Uno de los conceptos que más de moda hay en internet a día de hoy es el “machine learning” y que está dando mucho que hablar. Hoy en día parece que sino sabemos de “Big Data”, “machine learning”, “business intelligence”, “cloud”, parece que no sepamos de nada. Es por ello que en este post, vamos a intentar entender qué es esto del “machine learning”.

 

El machine learning como su nombre indica, significa aprendizaje automático; en wikipedia tenemos una buena definición. ¿Qué significa esto? Pues es una rama de la inteligencia artificial que intenta diseñar técnicas para que las máquinas puedan aprender. Pensando en esta definición, podemos pensar en ciencia ficción, robots, algo lejano a nosotros.. y esto ¿Cómo cuadra en las empresas? ¿Por qué está tan de moda?

Porque gran parte del know-how obtenido de la inteligencia artificial, ahora lo podemos aplicar al análisis predictivo y eso es en definitiva el machine learning. Hoy en día las empresas son muy dinámicas y ya no sirven los datos de reportes de BI de las ventas del mes pasado. Hoy en día se necesitan a diario y quizás más importante, esos análisis se necesitan “Antes”, osea análisis predictivo y saber por ejemplo a qué precio debo vender: no intentar un análisis a posterior como siempre se ha hecho, sino un análisis predictivo y ahí es donde los algoritmos del aprendizaje automático pueden ayudar.

Para entenderlo mejor y de una forma muy práctica, aconsejo seguir este tutorial de la página de Microsoft Azure.

https://azure.microsoft.com/en-us/documentation/articles/machine-learning-create-experiment/

En este tutorial de menos de 1 hora, se detalla paso a paso cómo crear un experimento en Azure ML, osea (Azure Machine Learning) que es la parte de Azure que se dedica al Machine Learning y lo más importante, vemos cómo podemos sacarle uso al aprendizaje automático. Veamos algunos detalles:

  • Inicialmente podemos acceder al Azure Machine Learning Studio de forma gratuita sin necesidad de tener cuenta de Azure, de Office365, eso sí por tiempo limitado, pero que para demos es muy útil.
  • En este entorno muy similar a Azure, vemos que tenemos la posibilidad de crear experimientos o cargar datasets propios.  El tutorial trata de explicar que a partir de los datos históricos que tenemos de automóviles, con los algoritmos del machine learning, somos capaces de predecir el precio al que hay que vender los coches (análisis predictivo).
  • En el tutorial se usa un dataset de automóviles que hay de prueba donde claramente se ve el precio de los coches y el resto de características de los coches.
Conjunto de datos inicial donde está el precio

Conjunto de datos inicial donde está el precio

  • Si seguimos el tutorial vamos añadiendo módulos para procesar los datos, definir reglas, aplicar algoritmos de aprendizaje, predecir un precio…
Módulos de Azure Machine Learning Studio

Módulos de Azure Machine Learning Studio

  • A medida que vamos añadiendo módulos, vemos cómo aparece el esquema de todos los pasos y las conexiones entre unos y otros.
Esquema con todos los módulos en Azure ML

Esquema con todos los módulos en Azure ML

  • Uno de los pasos más importantes, es añadir los algoritmos de aprendizaje. Si seleccionamos el módulo de Machine Learning, podemos encontrar multitud de estos algoritmos y que son los que nos van a permitir predecir el valor del precio.
Algoritmos de regresión

Algoritmos de regresión

Algoritmos de clasificación

Algoritmos de clasificación

 

  • Una vez tenemos los pasos bien definimos, los algoritmos seleccionados… entrenamos el experimento para que la máquina “aprenda”, osea que se aplique el algoritmo a los datos, para que en este caso, prediga el valor de venta de los coches. Para ello disponemos del botón Run.
Entrenar a la máquina

Entrenar a la máquina

  • Una vez entrenado el conjunto, podemos volver a abrir el dataset y veremos los datos predichos. En este caso vemos la columna del precio y el valor predicho de venta según el algoritmo de aprendizaje.
Dataset con los datos predichos

Dataset con los datos predichos

 

 

  • Como cualquier experimento, también podemos saber el error que hemos cometido
Error cometido en el análisis de los datos

Error cometido en el análisis de los datos

 

Y aquí es donde podemos ver realmente la utilidad del machine learning, osea el poder aplicar algoritmos del  aprendizaje automático a nuestros datos diarios de la empresa, para por ejemplo poder predecir cómo irá una futura venta, a analizar a qué precio voy a tener que vender un nuevo producto para ser más competitivo.

Uno de los grandes dolores de cabeza de SharePoint es cómo personalizar los formularios. Con SharePoint podemos utilizar la maravillosa funcionalidad de las listas personalizadas para simular cualquier base de datos, pero cuando vamos a editar cualquier contenido, nos encontramos con el típico formulario de una custom list, que es feo y poco usable: todos los campos van uno detrás de otro con lo que sí o sí te encuentras con un scroll lateral y además con espacio vacío en la parte derecha.

Entonces intentamos ver cómo personalizar ese formulario y nos encontramos con varias formas:

InfoPath: mejor lo dejamos… es antiguo y Microsoft quiere dejarlo de usar
PowerApps: la mejor opción, si lo tenemos instalado y configurado…
Designer: con la versión 2013 ya nos quitaron la versión web y en 2016 no existe…

Normalmente optamos por la versión de Designer, pero cuando abrimos los formularios nos encontramos con un componente que tiene todos los campos, pero no podemos acceder a él. Podemos añadir código arriba o abajo del formulario, pero no en los campos. Por ejemplo ¿y si quiero poner los campos en 2 columnas para aprovechar mejor el espacio?.

Por suerte, con el Editor de contenido se pueden hacer milagros…

La idea es muy sencilla: creamos un html y un javascript que añadimos a la librería de siteassets y añadimos 2  editores de contenido al formulario que queramos editar.

Componente de SharePoint que permite añadir html, javascript, css...

Componente de SharePoint que permite añadir html, javascript, css…

En uno de ellos enlazamos el javascript y en el otro el html personalizado subidos en la librería de SiteAssets. El Javascript es así:

 

Javascript que subimos a SharePoint

Javascript que subimos a SharePoint

En el script con jquery vamos recorriendo los campos del formulario usando data-displayName. Fijémonos que usa un span denominado hillbillyForm que es el que luego referencia en el html como una class.

El html es muy sencillo, simplemente ponemos en celdas de tablas los campos del customList y como class asociamos hillbillyForm, en este caso las columnas de Incidencia y Familia.

Html que añadimos a SharePoint

Html que añadimos a SharePoint

El html lo formateamos con tablas, capas, css o como queramos y una vez subido y asociado a SharePoint, voilá veremos cómo el formulario se personaliza.

En esta web tenemos la explicación del creador de este script

http://www.markrackley.net/2013/08/29/easy-custom-layouts-for-default-sharepoint-forms/

y en este video, se detalla paso a paso cómo hacerlo:

 

Funciona tanto en SharePoint Online como OnPremise

Un detalle: para que SharePoint pueda integrar y descargar correctamente el javascript y el html personalizado, es necesario desactivar la característica Estrategia de descarga mínima.

Desactivar la característica Estrategia de descarga mínima

Desactivar la característica Estrategia de descarga mínima

 

https://msdn.microsoft.com/en-us/library/office/dn456544.aspx

 

Desde hace tiempo, estamos oyendo que Microsoft quiere deshacerse de InfoPath, e incluso se llegó a anunciar su muerte, aunque estemos tranquilos: se seguirá soportando hasta 2016, eso sí InfoPath 2013…

http://www.qore.com/noticias/15610/Microsoft-anuncia-el-final-de-InfoPath

https://blogs.msdn.microsoft.com/microsoft_infopath_bloggers/2016/03/01/infopath-is-not-included-in-office-2016/

De hecho, en SharePoint 2016 ya no disponemos ni de InfoPath 2016 ni de Sharepoint Designer 2016, ni de la versión Foundation… por lo que la idea es ir eliminando esta tecnología antigua y obsoleta.

¿Y qué opciones tenemos?

Pues una de las opciones que más fuerza está teniendo es PowerApps. PowerApps es una tecnología que permite al usuario crear sus propias bases de datos, o aplicaciones en la nube. Como cualquier aplicación,  necesita de unos datos y PowerApps puede tener como origen Dynamics CRM, SalesForce, y una lista de sharepoint… y aquí es donde tiene su gran ventaja: Podemos crear una aplicación de PowerApp a partir de una lista de SharePoint y esta aplicación es accesible desde un móvil Android por ejemplo. Veamos qué fácil es hacerlo:

  1. Creamos una lista de SharePoint donde vamos a registrar incidencias y metemos algunos datos.
Lista de SharePoint con incidencias

Lista de SharePoint con incidencias

2. Seleccionamos el botón de PowerApps

Seleccionamos PowerApps desde SharePoint

Seleccionamos PowerApps desde SharePoint

3. Aparece un diseñador web en donde podemos editar formularios, vistas, añadir botones, layouts, añadir datasources… de una forma visual y muy sencilla. Cuando acabemos, pulsamos el botón Save del menú File para publicar la aplicación en PowerApps.

Editor web de PowerApps

Editor web de PowerApps

4. Accedemos a esta misma aplicación desde un móvil Android

 

Aplicación de PowerApp desde un móvil Android

Aplicación de PowerApp desde un móvil Android

 

Uno de los grandes problemas que tiene InfoPath es que no es para uso móvil y es una tecnología anticuada. En cambio desde PowerApp, hemos publicado la lista de SharePoint de una forma muy muy sencilla y es accesible desde cualquier dispositivo y conectando a nuestro SharePoint.

 

 

Hace poco he tenido un requisito en una implantación de CRM en la que se pedía trasformar una relación existente 1:N a N:N. En concreto en la ficha de clientes, existía un campo denominado “tipo de compañía” el cual era un campo de búsqueda a una entidad de tipo de compañía. Ese tipo de campo, dynamics CRM lo modela como una relación 1:N, y significa que una cuenta sólo puede ser de 1 tipo de compañía.

Los requisitos cambiaron y el cliente solicitó que una cuenta pudiera tener más de 1 tipo de compañía, osea una cuenta puede ser de varios tipos de compañía, con lo que la relación cambia a N:N y se complica bastante.

Las relaciones 1:N se manejan de una forma muy sencilla y de hecho, se añaden como campos en las vistas y es posible obtener la información a Excel rápidamente.

Una vez tengo los datos exportados a Excel de la relación 1:N, añado los datos que faltan y reimporto en dynamics CRM a la relación N:N, pero ¿Cómo lo hago?, ¿en qué tabla?.

En dynamics CRM, cuando creamos una relación N:N, automáticamente crea una tabla intermedia entre las dos entidades N:N. En el ejemplo, hay una tabla de cuentas, otra tabla de tipo de compañía y otra tabla intermedia en donde se almacenan registros que relacionan cuentas con tipo de compañia, así una cuenta puede tener muchos tipo de compañía y un tipo de compañía puede estar en muchas cuentas.

Relaciones N:N en dynamics CRM

Relaciones N:N en dynamics CRM

El problema es que desde la interfaz de dynamics crm no es posible acceder a esta tabla intermedia, con lo que no es posible reimportar los datos que exportamos previamente.

Por suerte, tenemos esta maravillosa herramienta en codeplex, que ya nos ha salvado en más de un apuro: XrmToolBox.

XrmToolBox es una herramienta desarrollada en codeplex que es gratuita y que como su nombre indica es una caja de herramientas para dynamics CRM. Muchas de las cosas que no podemos hacer con la interfaz, podemos hacerlo desde XrmToolBox. Precisamente una de estas herramientas es Manage N:N relations, el cual nos permite gestionar la tabla intermedia de las relaciones N:N de dynamics CRM

 

Manage NN relationships

Manage NN relationships

 

Si cargamos esta herramienta del XrmToolBox nos aparece esta pantalla donde podemos especificar las dos entidades N:N de la relación (First Entity y Second Entity), la tabla intermedia (Relationship), los dos campos por los que quiero relacionar las dos tablas en Mapping attribute y el fichero csv que quiero importar.

 

XrmToolBox

XrmToolBox

 

Pulsamos en Importar y !voila!, importa los datos perfectamente en la tabla intermedia. De esta forma, convierto mi relación 1:N en una relación N:N gracias a XrmToolBox.

Una de las grandes funcionalidades que tiene Dynamics CRM, es la posibilidad de ampliarlo vía plugins, o como se denominan oficialmente “soluciones“. Las soluciones permiten que software de terceros, pueda ampliar la funcionalidad base de dynamics CRM. La idea es que las soluciones son un zip que se puede importar, desplegar y cuando ya no se utilicen, desinstalar.

 

Un solución muy interesante para dynamics crm es PowerMailChimp la cuál permite enlazar las listas de marketing de dynamics crm con MailChimp de una forma prácticamente automática y natural. El problema viene cuando intentas desinstalar dicha solución. En teoría, simplemente borras los datos de la solución, pulsas en eliminar…. pero no funciona. Al igual que es muy fácil instalar, desinstalar se hace un imposible y PowerObjects, debería de mejorar notablemente esta funcionalidad…

Error al eliminar una solución en Dynamics CRM

Error al eliminar una solución en Dynamics CRM

 

Si pulsamos en Detalles podemos obtener más información. En concreto vemos que no puede eliminar la solución porque tiene varias dependencias. PowerObjects, en vez de dar una solución, indica que el problema es del CRM, cuando las dependencias son creadas por la propia solución…

 

Dependencias de PowerMailChimp

Dependencias de PowerMailChimp

Los Javascript de los formularios de Contactos y Cliente potencial son fácilmente modificables. Si accedemos a las propiedades de los formularios, veremos las dependencias en los eventos OnLoad. Simplemente seleccionamos el javascript y pulsamos en Quitar y eliminamos esa dependencia.

Propiedades del formulario en dynamics CRM

Propiedades del formulario en dynamics CRM

El problema lo encontramos con las dependencias del mapa del sitio, ya que dynamics crm no tiene una interfaz para su fácil modificación. El mapa del sitio permite modificar los menús del CRM y las dependencias que existen no permiten eliminar la solución.

 

Una vez más, recurrimos a la maravillosa herramienta XrmToolBox, la cuál tiene un editor gráfico para el mapa del sitio.

Editor del mapa del sitio de XrmToolBox

Editor del mapa del sitio de XrmToolBox

Una vez cargado el mapa, vemos el nodo “Area (PowerPack)” el cuál es incapaz de ser eliminado por su creador, PowerObjects y en cambio sí que es posible eliminarlo con XrmToolBox. Eliminamos el nodo y actualizamos el mapa del sitio y esta vez sí, ya nos deja eliminar correctamente la solución de PowerMailChimp y por fin eliminar todos sus objetos.

Una de las dudas típicas de uso de SharePoint es el backup/restore granular, osea cómo podemos recuperar un documento de una lista de SharePoint. Desde versiones muy antiguas, la recuperación de documentos en SharePoint suele ser una labor tediosa y normalmente el administrador de IT suele ir a herramientas de backup/restore más especializadas, como por ejemplo Veeam o Veritas los cuáles desde la misma herramienta GUI son capaces de recuperar un único documento.

Para quien no quiera invertir en un software especializado, desde la versión 2010 SharePoint viene con una funcionalidad que nos permite recuperar documentos. Esta funcionalidad se denomina “unattached content databases“. En concreto lo que nos permite es “enlazar una base de datos de SQL Server, montarla como un site y obtener el contenido”.

Este post viene motivado por una incidencia que he tenido en SharePoint: una excel que varias personas modifican y que de repente desaparecen varias columnas… claro, el documento no ha sido borrado (para eso tenemos la papelera de SharePoint) no nos sirve esa opción. Recuperemos una versión anterior (no estaba activado), por lo que hemos tenido que ir al backup a recuperar dicho documento. Cuando hemos intentado recuperar por el proceso normal, hemos visto que SharePoint sólo nos permite restaurar sites, no librerías o documentos… Aquí es donde la opción de unattached content databases es una opción muy interesante. Veamos los pasos que hemos seguido:

  1. Localizar el backup de la base de datos: Lo primero que tenemos que hacer es buscar nuestro último backup de SharePoint y buscar el bak que contiene nuestra base de datos. Una de las ventajas del backup de SharePoint, es que hace un backup de SQL normal y corriente dentro del propio backup de sharepoint, con lo que es posible localizar el bak. En concreto es muy fácil de localizar porque es el que más tamaño tiene.

    Backup de SharePoint

    Backup de SharePoint

  2. Restaurar el backup en SQL Server: El siguiente paso es restaurar el backup de la base de datos en SQL Server y muy importante en una base de datos distinta (sino “sobreescribiremos la actual”). En este ejemplo la base de datos es WSS_Content. En el restore de SQL Server, cambiamos el nombre a WSS_Content2 y veremos que también cambia el nombre del fichero de datos y del log
    Cambio de nombre de la base de datos, del mdf y del ldf

    Cambio de nombre de la base de datos, del mdf y del ldf

    Es preferible ejecutar este comando vía script y eliminar la parte del backup log de la base de datos original.

    Script con el restore de la nueva base de datos a partir del Backup

    Script con el restore de la nueva base de datos a partir del Backup

  3. Ejecutar unattached content database: Una vez tenemos restaurada la base de datos desde SQL Server, ejecutamos la opción unattached content database desde SharePoint. Veremos que es una opción más del Backup/Restore de SharePoint.

    unattached content databases

    unattached content databases

  4. Seleccionamos la base de datos restaurada y seleccionamos la opción Browser content. La base de datos original WSS_Content, sigue online y los usuarios siguen trabajando…

    Seleccionamos la base de datos restaurada

    Seleccionamos la base de datos restaurada

  5. Seleccionamos y exportamos: SharePoint monta la base de datos seleccionada y nos pide que seleccionemos el site y la librería que contiene el documento.

    Seleccionamos la librería que contiene el documento a restaurar

    Seleccionamos la librería que contiene el documento a restaurar

  6. Exportamos la librería: SharePoint nos pedirá una ruta donde exportar en formato cmp la librería con el contenido.

    Exportamos la librería y sus documentos en formato cmp

    Exportamos la librería y sus documentos en formato cmp

  7.  Importamos la librería: Lo último que nos queda es importar la librería en otro site ya existente de sharepoint con el comando de powershell Import-SPWeb.  En este comando debemos decirle el site donde queremos restaurar la librería y el fichero cmp con el contenido de la librería.
Importación de la librería y sus documentos en un site existente

Importación de la librería y sus documentos en un site existente

Una vez importado, accedemos al site ya existente y veremos que aparece la librería importada con sus documentos y desde ahí podremos recuperar el documento que necesitemos. Es un poco laborioso, pero nos puede sacar de más de un apuro.

 

Por fin ha aparecido SharePoint 2016 con no muchos cambios… La verdad es que viendo las novedades,  no veo muchas razones para migrar un SharePoint 2013 a SharePoint 2016 (son prácticamente iguales obviando la parte de integración con Office365)

En este vídeo de SharePoint Saturday en Madrid, se explican muy bien las novedades y el porqué migrar.

Varias cosas que no me han gustado nada de SharePoint 2016 es el deshuso de la versión Foundation y el Designer

Desaparece SharePoint Foundation 2016, con lo que nos quedamos sin la versión gratuita de SharePoint. Creo que es un desacierto por parte de Microsoft quitar la versión foundation, ya que para muchas empresas, con la versión foundation es suficiente. Si queremos SharePoint Foundation, tendremos que seguir usando la versión 2013.

No habrá más SharePoint Designer 2016, otro desacierto de Microsoft. Entiendo que Microsoft quiera que todas las modificaciones y customizaciones de plantillas, css, html las hagamos desde el entorno web, pero hasta que no tenga un entorno completo y que funcione correctamente en el browser, no debería dejar de mejorar designer, una herramienta muy necesaria en temas de personalizaciones. Si queremos usar SharePoint Designer, tendremos que seguir usando la versión 2013.

En este enlace, os dejo la información oficial de las características en deshuso en SharePoint 2016.

A %d blogueros les gusta esto: