[Eventos]: SQLPASS.ES – Azure Machine Learning-From Design to Integration!

En esta ocasión os comparto un evento que organiza la Comunidad española de SQL Server, Business Intelligence y Big Data sobre tecnologías Microsoft (SQLPASS.ES) el próximo 21 de enero y en el que se tratarán conceptos avanzados de Azure Machine Learning. Los detalles del evento son:

  • Agenda:
    • 18:00 – 18:15: Registro y bienvenida.
    • 18:15 – 18:30: Presentación
    • 18:15 – 19:30: Azure Machine Learning. By Peter Myers.
    • 19:45 – 20:30: SQL PASS Spain, tu asociación (mesa redonda).
  • Lugar: Gran Vía Open Future. Gran Vía, 28, Planta 8, Madrid.
  • Ponente:
    • Peter Myers is from Melbourne, Australia and has worked with Microsoft database and development products since 1997. Today he specializes in all Microsoft Business Intelligence products and provides mentoring, technical training, and training course content authoring for SQL Server, Office and SharePoint. He has a broad business background supported by a Bachelor’s degree in applied economics and accounting, and he extends this with solid experience backed by current MCSE certifications. He has been a SQL Server MVP since 2007.
  • Enlace de inscrioción:

sqlpass.es

Anuncios

SQL Azure & SQL Server 2012: BDs de ejemplo listas para ser desplegadas!

Si necesitas disponer de BD’s de ejemplo tanto para SQL Server 2012 como para SQL Azure (basado en SQL Server 2012), dispones de una serie de BD de datos de ejemplo listas para descargar y utilizar:

image

SQL Azure: Nueva actualizaciónen la interfaz de administración!

Como no sólo de SharePoint vive el hombre como diría alguno, de vez en cuando toca experimentar con alguna otra tecnología o plataforma de Microsoft que pueda ser interesante. En mi caso, siempre me ha llamado la atención la evolución que ha ido siguiendo la versión de SQL Server en la nube, o SQL Azure. El caso es que tal y como podéis leer en este post, recientemente el equipo de SQL Azure ha actualizado la interfaz web de gestión de SQL Azure que no tiene mucho que ver con las versiones previas empezando por la tecnología base que es Silverlight 5.0. Veamos algunas novedades:

  • Nada más entrar al portal nos encontramos con una pantalla relativa a la sección de Administración de un servidor concreto de SQL Azure con información relativa a las propiedades de las BD de datos si estamos trabajando a ese nivel o de una tabla concreta si estamos editando el diseño de la misma. En este sentido, la nueva herramienta de gestión incorpora el concepto de área de trabajo que te permite ir realizando distintas tareas de administración y en cualquier momento hacer un switch a una tarea concreta.
  • La sección “Información general” da un acceso rápido aplicando el estilo METRO de Windows 8 a distintas secciones relativas a la administración de la BD o a secciones de información general.
  • Desde la sección “Diseñar” podremos acceder a visualizar las tablas disponibles en nuestra BD de SQL Azure o añadir nuevas.
image image image
  • Si editamos una de las tablas existentes, la experiencia de visualización de la misma es la que tenéis más abajo.
  • A la hora de crear y ejecutar consultas, la interfaz muestra como novedades un nuevo editor de consultas y la disponibilidad de varias opciones para la ejecución.
  • Una de esas novedades es la de poder visualizar el plan de ejecución de la consulta.
image image image
  • Finalmente, de vuelta a la pantalla de “Administración” podremos ver en el correspondiente informe el rendimiento de las consultas realizadas.

image

SQL Azure: Creación de informes con SQL Azure Reporting (I)!

Como comentaba ayer el amigo Ibón, uno de los anuncios que ha hecho Microsoft con respecto a SQL Azure es que por fin tenemos la posibilidad de comenzar a usar SQL Azure Reporting (hasta ahora su uso estaba restringido). En mi caso, tenía ganas de ver de que va esto de SQL Azure Reporting y he de decir que me he quedado un tanto decepcionado ya que:

  • Sólo se pueden crear informes para BD’s SQL Azure, no estando soportados otros orígenes de datos.
  • A la hora de crear un informe de SQL Azure Reporting hay que dar más de una “vuelta” hasta darte cuenta del proceso.
  • Relacionado con lo anterior, que no se pueda lanzar el generador de informes desde el portal de Azure para facilitar la creación del informe.

Dicho esto, vamos a ver un pequeño paso a paso de como crear un informe de SQL Azure Reporting:

  • Nos conectamos al portal de Windows Azure y nos validamos con nuestra suscripción. Pulsamos sobre la opción “Informes” disponible en el menú vertical.
  • Lo primero que tendremos que hacer es crear un servidor de SQL Azure Reporting a través de la opción correspondiente. A continuacón, se muestra la correspondiente ventana de Términos de uso…pulsamos “Siguiente” en la misma.
  • En la nueva ventana del asistente, especificamos la suscripción de Azure a crear y la región de provisionaiento y pulsamos “Siguiente”.
image image image
  • Tras especificar usuario y contraseña para SQL Azure Reporting y pulsar Siguiente, comienza el provisionado del servicio.
  • Cuando el proceso acaba, veremos que tenemos creado un nuevo servidor de SQL Azure Reporting bajo nuestra suscripción que podemos proceder a utilizar.
  • Lo primero que necesitamos es un origen de datos que crearemos con la opción correspondiente en la sección Data Source. En esta ventana especificaremos la cadena de conexión que tiene que ser de la forma:
   1: Server=tcp:<Servidor_SQLAzure>.database.windows.net;Database=Customers;User ID=UsuarioSQLAzure;Password=ContraseñaSQLAzure;Trusted_Connection=False;

  • Fijaros que a la hora de especificar la conexión, podemos indicar que o bien se soliciten las credenciales o que estas estén almacenadas de forma segura a nivel de base de datos. En mi caso, he escogido la primera opción aunque la buena práctica sería la segunda y usando un login de SQL Azure con los permisos mínimos para permitir la visualización del informe.
image image image
  • Probamos que la conexión a nuestro SQL Azure es correcta.
  • Una vez creado el origen de datos, este debería aparecer en el listado de objetos de reporting disponibles en el servidor de SQL Azure.
  • A continuación, el objetivo es crear un informe a partir de ese origen de datos definido…y la clave para crearlo es la url del servidor de informes.
image image image
  • Esa Url es la que tenemos que especificar en las opciones de configuración del generador de informes (aká Report Builder).
  • De esta forma, cuando vayamos a crear un origen de datos podremos seleccionar el ya disponible en SQL Azure Reporting. Tened en cuenta que se os irán pidiendo credenciales de acceso al servidor según vayáis creando los sucesivos elementos que se necesitan en el informe.
  • Una vez que tenemos disponible el origen de datos del informe, podemos crear un conjunto de datos a partir del mismo.
image image image
  • Lo siguiente que haremos es diseñar la consulta del informe, ya sea visualmente o vía T-SQL.
  • Probamos que la consulta está operativa.
  • Y a continuación definimos un informe sencillo sobre la base de ese conjunto de datos.
image image image
  • Para cargar el informe en el servidor de SQL Azure Reporting, simplemente usamos la opción de carga disponible en el portal de Windows Azure.
  • Para visualizar el informe desde el servidor de SQL Azure Reporting, simplemente navegamos a la Url del servidor de informes y hacemos clic sobre el informe en cuestión.
  • Cómo es lógico, y de acuerdo a mi configuración, se nos pedirán las credenciales de ejecución.
image image image
  • Tras especificar dichas credenciales, el informe se muestra sin problemas:

image

Y hasta aquí llega este primer post sobre SQL Azure Reporting.

SharePoint 2010: Integración con SQL Azure (IV)!

Siguiendo con la serie de post sobre integración entre SharePoint 2010 y SQL Azure, en este nuevo artículo vamos a ver como cerrar el círculo a través de la creación de un tipo de contenido externo (ECT) en SharePoint Designer 2010 (SPD 2010). Antes de comenzar, os recuerdo los posts previos de la serie:

Para poder integrar datos de una BD de SQL Azure en SharePoint 2010, lo primero que tenemos que tener configurado de forma correcta es la aplicación de servicio “Secure Store service” o “Servicio de Almacenamiento Seguro”:

  • Nos vamos a la Administración Central de SharePoint y la gestión de aplicaciones. Pulsamos sobre “Gestión de aplicaciones de servicio” (Manage Service Applications).
  • En el listado de aplicaciones de servicio, buscamos la de Secure Store Service, la seleccionamos y pulsamos la opción “Manage” de la Ribbon para acceder a la correspondiente página de configuración.
  • En la página inicial de configuración de la aplicación, se muestra un listado con los Application ID disponibles que en realidad no dejan de ser elementos que nos referencian a credenciales almacenadas de forma segura en el Secure Store Service y que nos permiten conectarnos a fuentes de datos externas de forma secura. Pulsamos sobre la opción “New” para crear un nuevo Application ID.
image image image
  • En la siguiente pantalla especificamos los parámetros de configuración del Application ID: Target Application ID que usaremos más tarde en SPD 2010, el nombre “amigable” con el que se visualizará, el e-mail de contacto y el tipo de target de la aplicación (individual en este caso).
  • A continuación especificamos la naturaleza de las credenciales que queremos almacenar en cuanto a forma de autenticación contra el sistema externo. En este caso, como nos vamos a integrar con SQL Azure la opción correcta es la de Usuaro y Contraseña.
  • Para finalizar el asistente, especificamos el usuario o usuarios owners de las credenciales.
image image image
  • De vuelta al listado de Applications IDs disponibles, podemos fijar las credenciales a utilizar para conectarse a SQL Azure a través de la opción correspondiente de la Ribbon.
  • Ya en SPD 2010, nos vamos a la sección External Content Types para crear un nuevo ECT. Aquí especificamos los parámetros de configuración habituales como nombre interno del ECT, nombre para mostrar o espacio de nombres. A continuación pulamos el enlace “Click here to discover external data sources and define operations” para poder crear la conexión al origen de datos.
  • En nuestro caso, el origen de datos es de tipo SQL Server.
image image image
  • Especificamos los parámetros de conexión a nuestro SQL Azure indicando el nombre del servidor, de la BD y el nombre que le queremos dar a la conexión. Como mecanismo de autenticación elegimos “Connect with Impersonated Custom Identity” y especificamos el Application ID creado con anterioridad.
  • A continuación se nos pedirán las credenciales de acceso a SQL Azure, las especificamos y una vez que concluya el proceso de conexión veremos las tablas que expone la BD que estamos integrando.
  • Creamos las operaciones pertinentes sobre una de las tablas definidas en la BD de SQL Azure.
image image image
  • Definidas las operaciones, guardamos el ECT para que toda su definición se almacene en el catálogo de datos profesionales.
  • A través de la Ribbon de SPD 2010 procedemos a crear la correspondiente lista externa.
  • Navegamos hasta el sitio de SharePoint 2010 y comprobamos que la lista muestra la información de la BD de SQL Azure como se esperaba.
image image image

Y hasta aquí llega este cuarto post sobre la integración de SharePoint 2010 y SQL Azure.

SharePoint 2010: Integración con SQL Azure (III)!

Siguiendo con la serie de artículos de integración entre SharePoint 2010 y SQL Azure, en esta ocasión vamos a dar un paso más y vamos a ver como realizar esta integración aprovechando la aplicación de servicio Business Connectivity Services (BCS) de SharePoint que permite integrar datos externos en SharePoint de forma sencilla y que en Visual Studio 2010 disponemos de una plantilla para crear modelos de Business Data Connectivity (BDC) para modelar dicha integración. Antes de empezar, os recuerdo los artículos previos relativos a la integración entre SharePoint 2010 y SQL Server Azure:

Como en artículos previos, partiremos de una BD creada en SQL Server Azure:

  • Iniciamos Visual Studio 2010 y creamos un proyecto de tipo “Emtpy SharePoint Project”.
  • Le añadimos al proyecto un elemento de tipo Business Data Connectivity Model.
  • Renombramos la entidad por defecto Entity1 a Store, el identificador de la misma a StoreID y los métodos ReadItem y ReadList a ReadStore y ReadStores respectivamente.
  • Realizamos los cambios necesarios a través del BDC Explorer para que cumpla lo siguiente (empezamos por el tipo devuelto por el método ReadStores):
    • El Type Name para la entidad Store tiene que ser de la forma “SQLAzureBCSDemo.Stores.Store, Stores”, es decir, al renombrar Entity1 por Store hay que tener cuidado de que dicho cambio se arrastre en las distintas propiedades del modelo.
    • El Type Descriptor  StoreID tiene que tener un Type Name de tipo Int32 y no de tipo String (valor por defecto) y hay que tener cuidado de cambiarlo en aquellos lugares dónde aparezca.
    • Añadimos varios Type Descriptors como campos de la tabla de la BD de SQL Azure queramos integrar mediante el BCS de SharePoint 2010.
  • Una vez que tenemos modelada la entidad Store, simplemente hacemos un copy de la misma para poder usarla como tipo devuelto por el método ReadStore() del modelo. Aquí verificamos que el Type Name para el parámetro de entrada es Int32.
image image image
  image  
  • Guardamos los cambios realizados en el modelo y nos vamos a la vista de explorador del proyecto para empezar con la lógica asociada. Lo primero que tenemos que hacer es modelar de forma correcta la clase Store de acuerdo a los Type Descriptor que hemos configurado en el BDC Explorer.
   1: using System;

   2: using System.Collections.Generic;

   3: using System.Linq;

   4: using System.Text;

   5:  

   6: namespace SQLAzureBCSDemo.Stores

   7: {

   8:     /// <summary>

   9:     /// This class contains the properties for Entity1. The properties keep the data for Entity1.

  10:     /// If you want to rename the class, don't forget to rename the entity in the model xml as well.

  11:     /// </summary>

  12:     public partial class Store

  13:     {

  14:         //TODO: Implement additional properties here. The property Message is just a sample how a property could look like.

  15:         public int StoreID { get; set; }

  16:         public string StoreTitle { get; set; }

  17:         public string StoreName { get; set; }

  18:         public string StoreAddress { get; set; }

  19:         public string StorePhone { get; set; }

  20:         public string StoreLatitude { get; set; }

  21:         public string StoreLongitude { get; set; }

  22:         public string StoreHours { get; set; }

  23:     }

  24: }

  • Siguiendo la filosofía del último artículo sobre la integración de SharePoint y SQL Azure, añadimos dentro del SPI del Bussiness Data Connectivity Model un elemento de tipo LINQ To SQL que nos va  a permitir integrarnos de forma sencilla con la BD SQL Azure.
  • Editamos la clase StoreService en la que tenemos que implementar los métodos ReadStore() y ReadStores() necesarios para poder consumir los datos de la BD SQL Azure a través del modelo LINQ To SQL. Como véis, la implementación con LINQ To SQL es bastante sencilla:
   1: using System;

   2: using System.Collections.Generic;

   3: using System.Linq;

   4: using System.Text;

   5:  

   6: using SQLAzureBCSDemo.Stores;

   7:  

   8: namespace SQLAzureBCSDemo.Stores

   9: {

  10:     public partial class StoreService

  11:     {

  12:         public static IEnumerable<Store> ReadStores()

  13:         {

  14:             using (SQLAzureStoresDataContext ctx =

  15:                 new SQLAzureStoresDataContext(

  16:                     "Server=tcp:<Server>.database.windows.net;Database=<BD>;User ID=<User>;Password=<Password>;Trusted_Connection=False;Encrypt=True;"))

  17:             {

  18:  

  19:                 var qStores = from s in ctx.StoreInformations

  20:                              select new{

  21:                                  SID=s.StoreID,

  22:                                  STitle=s.Title,

  23:                                  SName=s.StoreName,

  24:                                  SAddress=s.StoreAddress,

  25:                                  SPhone=s.StorePhone,

  26:                                  SLatitude=s.Latitude,

  27:                                  SLongitude=s.Longitude,

  28:                                  SHours=s.Hours

  29:                              };

  30:  

  31:                 List<Store> cStores = new List<Store>();

  32:                 foreach (var qs in qStores)

  33:                 {

  34:                     Store cStore = new Store();

  35:                     cStore.StoreID = qs.SID;

  36:                     cStore.StoreTitle = qs.STitle;

  37:                     cStore.StoreName = qs.SName;

  38:                     cStore.StoreAddress = qs.SAddress;

  39:                     cStore.StorePhone = qs.SPhone;

  40:                     cStore.StoreLatitude = qs.SLatitude;

  41:                     cStore.StoreLongitude = qs.SLongitude;

  42:                     cStore.StoreHours = qs.SHours;

  43:                     cStores.Add(cStore);

  44:                 }

  45:                 return cStores;

  46:             }

  47:         }

  48:  

  49:         public static Store ReadStore(int id)

  50:         {

  51:             using (SQLAzureStoresDataContext ctx =

  52:                 new SQLAzureStoresDataContext(

  53:                     "Server=tcp:<Server>.database.windows.net;Database=<BD>;User ID=<User>;Password=<Password>;Trusted_Connection=False;Encrypt=True;"))

  54:             {

  55:  

  56:                 var qStores = from s in ctx.StoreInformations

  57:                               where s.StoreID == id

  58:                               select new

  59:                               {

  60:                                   SID = s.StoreID,

  61:                                   STitle = s.Title,

  62:                                   SName = s.StoreName,

  63:                                   SAddress = s.StoreAddress,

  64:                                   SPhone = s.StorePhone,

  65:                                   SLatitude = s.Latitude,

  66:                                   SLongitude = s.Longitude,

  67:                                   SHours = s.Hours

  68:                               };

  69:  

  70:  

  71:                 Store cStore = new Store();

  72:                 cStore.StoreID = qStores.First().SID;

  73:                 cStore.StoreTitle = qStores.First().STitle;

  74:                 cStore.StoreName = qStores.First().SName;

  75:                 cStore.StoreAddress = qStores.First().SAddress;

  76:                 cStore.StorePhone = qStores.First().SPhone;

  77:                 cStore.StoreLatitude = qStores.First().SLatitude;

  78:                 cStore.StoreLongitude = qStores.First().SLongitude;

  79:                 cStore.StoreHours = qStores.First().SHours;

  80:                 return cStore;

  81:             }

  82:         }

  83:     }

  84: }

  • Hacemos el despliegue de nuestro modelo a nuestro entorno de SharePoint
  • Nos vamos al sitio de trabajo y creamos una lista externa para comprobar que la integración funciona de forma correcta.
image image image
  image  

Y hasta aquí llega este tercer artículo sobre la integración de SharePoint 2010 y SQL Azure.

SharePoint 2010: Integración con SQL Azure (II)!

Siguiendo con la serie de artículos en torno a la integración de SharePoint 2010 y SQL Azure, en esta nueva entrega vamos a ver como podemos modelar esa integración por medio de una WebPart que creemos con ayuda de las herramientas de desarrollo de Visual Studio 2010 para SharePoint 2010:

  • Creamos en primer lugar un proyecto de tipo “Empty SharePoint Project”.
  • Elegimos como tipo de despliegue “Deploy as farm solution”.
  • Añadimos al proyecto un elemento de tipo “Visual Web Part”
image image image
  • Añadimos dentro del SPI (SharePoint Project Item) correspondiente a la WebPart visual un elemento de tipo LINQ To SQL Classes.
  • Para definir el correspondiente modelo, creamos a través del Server Explorer una conexión a nuestra BD de SQL Azure especificando la dirección del servidor y el usuario SQL que nos permita acceder a la correspondiente BD.
  • Añadimos a la WebPart visual los controles que necesitemos de acuerdo a la funcionalidad a implementar.
image image image
  • En el code behind de la WebPart añadimos el siguiente código en el que:
    • Añadimos dos directivas using a System.LINQ y a nuestro modelo LINQ To SQL.
    • En el manejador del botón definimos una simple instancia del correspondiente contexto de datos especificando la cadena de conexión que nos permita conectarnos a la BD de SQL Azure.
    • Realizamos la correspondiente consulta LINQ y volcamos el resultado de la misma en el control GridView de la WebPart.
   1: using System;

   2: using System.Web.UI;

   3: using System.Web.UI.WebControls;

   4: using System.Web.UI.WebControls.WebParts;

   5:  

   6: //Espacios de nombres necesarios

   7: using System.Linq;

   8: using SPSQLAzureWP.SQLAzureWP;

   9:  

  10: namespace SPSQLAzureWP.SQLAzureWP

  11: {

  12:     public partial class SQLAzureWPUserControl : UserControl

  13:     {

  14:         protected void Page_Load(object sender, EventArgs e)

  15:         {

  16:         }

  17:  

  18:         protected void lnkbtnGetStoreInformation_Click(object sender, EventArgs e)

  19:         {

  20:             using (SQLAzureCustomersDataContext ctx =

  21:                 new SQLAzureCustomersDataContext(

  22:                     "Server=tcp:<Server>.database.windows.net;Database=<BS>;User ID=<User>;Password=<Password>;Trusted_Connection=False;Encrypt=True;"))

  23:             {

  24:                 

  25:             var Stores = from s in ctx.StoreInformations

  26:                          select s;

  27:             datagrdStoreData.DataSource = Stores;

  28:             datagrdStoreData.DataBind();

  29:             }

  30:  

  31:         }

  32:     }

  33: }

  • Realizamos el despliegue de la WebPart y comprobamos que se muestran los datos consultados.
  • Lógicamente, estos datos son los mismos a los que podemos acceder desde el portal de gestión de SQL Azure.
image image

Y hasta aquí llega este post sobre la integración de SQL Azure.