18 marzo 2008

Novedades en SQL Server 2008 Parte 2 - SSAS

Hola de nuevo,

En mi última entrega estuvimos hablando de algunas de las novedades que la versión de SQL 2008 nos trae con respecto al mundo de BI y tocamos las nuevas características y/o mejoras en la parte del motor relacional (SQL) e Integration Services (SSIS). En esta entrega estaremos revisando algunas de las principales novedades en Analysis Services. Aqui vamos:

Generalmente hablando no hay cambios radicales en la manera de crear las dimensiones y cubos, pero sí muchas mejoras en la experiencia del usuario, en el rendimiento o performance del motor y en la parte de monitoreo y administración.

  • Dimension Wizard: Anteriormente el mismo asistente para la creación de dimensiones (Dimension Wizard) nos "empujaba" a tener un mal diseño de las dimensiones con respecto a performance. En esta nueva versión el asistente se enfoca en ayudarnos a tener un mejor diseño desde el inicio y por tanto evitar o reducir los problemas de baja performance en el entorno de producción.
    Una de las nuevas posibilidades con el asistente es que ahora se incluye una nueva columna en donde le podemos indicar al asistente si un atributo es "browsable" o mejor dicho, si dicho atributo está diseñado para poder ser incluido en alguno de los ejes (fila, columna, etc) de una consulta y por tanto la posibilidad de crear agregaciones por dicho atributo.

    A continuación cito un ejemplo. Si tenemos una dimensión Reseller (Distribuidor), para cualquiera de los informes o consultas del usuario, el atributo Teléfono no debiera ser usado por si sólo sin tener el nombre del Reseller (no tendría mucho valor tener las ventas según número de teléfono sin tener información del Reseller a quien pertenece dicho teléfono y venta). En este caso en el paso del asistente llamado "SELECT DIMENSION ATTRIBUTES" vamos a dejar de marcar el check box de la columna "Enable Browsing" para dicho atributo. De este modo Analysis Services no permitirá que el atributo sea usado directamente sin el cliente en una consulta en específico, sino tendrá como una propiedad del atributo al que esté relacionado, por ejemplo "Reseller Name".

    Figura 1. El atributo teléfono es el único que no se ha marcado como "Enable Browsing" ya que debe ser tratado como una propiedad del Reseller y no permitir consultas ni crear agregaciones usando este atributo directamente.


Figura 2. El asistente ahora nos permite también indicar el tipo de atributo como se muestra en la figura. Por ejemplo el atributo "English Month Name" lo marcamos como de tipo "Month" dentro del grupo "Calendar".

  • Mejores Prácticas: Algu súper interesante que se ha agregado a los diseñadores son las recomendaciones de diseño, producto de las mejores prácticas en el desarrollo con SSAS. Estas recomendaciones nos dan advertencias o sugerencias a través de líneas curvas de color azul (similares a las que usa Word para corregir la ortografía) o en la ventana de Errores, con respecto al diseño del atributo, dimensión, jerarquía o cubo en el que se esté trabajando.
    Lo bueno además es que podemos personalizar estas recomendaciones habilitándolas/deshabilitándolas o agregándole comentarios para efectos de documentación o auditoría. Estas recomendaciones se pueden personalizar a nivel de todo el proyecto (base de datos de SSAS) o a nivel de una dimensión o cubo.

Figura 3. Analysis Services sugiere que creemos al menos una jerarquía para la dimensión.

Figura 4. Al hacer deployment de la dimensión, SSAS muestra 2 advertencias: "Evite la duplicidad de atributos ocultando los atributos que ya existen en jerarquías" (Categoría, Sub Categoría y Producto); y "Defina las relaciones entre los atributos como 'Rígidas' donde aplique". En este caso si el mismo producto no cambia nunca de categoría, podríamos definirlo como Rígido, lo mismo para la relación entre Sub Categoría y Categoría.

      Figura 5. Podemos indicarle a SSAS que no queremos considerar alguna de las recomendaciones que nos ofrece para una dimensión en específico o para toda la base de datos.

      Figura 6. Para efectos de documentación y auditoría podemos ingresar comentarios cuando queremos deshabilitar algunas de las recomendaciones.

    • Relaciones entre Atributos de Manera Gráfica: Wow, creo que esta de las mejoras que deseábamos muchos. Y es que una de las claves para obtener mejores tiempos de respuesta cuando el usuario consulte los cubos se basa en cómo definimos las relaciones entre atributos de una dimensión. El caso típico es la relación entre los atributo de una dimensión de Tiempo como: Año, Trimestre, Mes y Día. En esta caso en orden de izquierda a derecha, cada atributo es padre del otro. Para este caso tenemos un nuevo "tab" en diseñador de dimensiones que nos permite hacer las relaciones entre atributos de manera gráfica mediante "drag and drop". Esto es mil veces más fácil que hacerlo desde la ventana de propiedades.


    Figura 7: La pantalla para definir las relaciones entre los atributos de manera gráfica con simples "drag and drop".

    Figura 8: Además de definir las relaciones entre los atributos de la dimensión de Tiempo en la figura, podemos definir si las relaciones entre atributos son flexibles o rígidas. Rígidas en el caso de la dimensión de tiempo.


    • DYNAMIC SET: Se agregó una nueva extensión al lenguaje MDX para incluir ahora los SETs (conjuntos) Dinámicos. Por si no lo notaron, la versión 2005 nos permitía crear SETS (usando CREATE SET) pero éstos sólo se calculaban al hacer deployment del cubo (como parte de los "Calculations"). Es decir, si creabamos una función para devolver los 5 principales clientes según ventas, esto funcionará bien solamente si no incluimos ningún filtro o cláusula WHERE que seleccione a un miembro distinto a "ALL" (Todos) de cualquiera de los atributos.
      Por ejemplo si a mi consulta donde utilizo el NAMED SET para devolver los TOP 5 clientes según ventas le agregamos un WHERE que filtre el Año igual a 2001, obtendremos resultados incorrectos, ya que SSAS no vuelve a calcular el NAME SET nuevamente (sólo sirve cuando se use el Named Set sin filtro alguno).
      Aquí es donde aparecen los DYNAMIC SET (CREATE DYNAMIC SET) al rescate. Y es que con sólo agregar la palabra DYNAMIC a nuestra sintaxis de creación del SET anterior, tendremos el conjunto de los 5 clientes principales funcionando como queríamos incluso incluyendo distintos filtros para cualquiera de los demás atributos.


    • DYNAMIC MANAGEMENT VIEWS (DMV): Esta es la mejor ayuda que el administrador de base de datos puede haber deseado. Y es que ahora SSAS soporta el uso de Dynamic Management Views similares a los que tenemos en SQL 2005 relacional para monitorear toda la actividad del servidor de Analysis Services, como las conexiones, sesiones, usuarios, consultas que se estén ejecutando, estadísticas con respecto a la consulta, etc. Estas vistas pueden ser consultadas de forma simple como un "SELECT * FROM $system.discover_connections" sobre un conexión a SSAS usando un DMX query. aunque el SELECT se ve idéntico a un query de SQL relacional, esta consulta se ejecuta sobre el motor de Analysis Services gracias a que se incluyó esta nueva extensión al lenguaje MDX para aceptar este tipo de consultas de igual manera a como las utilizamos sobre SQL.
      Lo mejor de todo es que podemos usar estas consultas a los DMV para generar nuestras propias gráficas estadísticas en Reporting Services o cualquier otra herramienta para monitoreo. Es bastante probable que posterior al lanzamiento oficial de la versión final de SQL 2008, Microsoft publique algunas extensiones que incluyan una serie de reportes para monitorear SSAS usando los DMV, mientras tanto podemos hacerlo nosotros mismos sin relativamente muchas complicaciones.

    Figura 9: Consulta usando las extensiones de MDX hacia los DMV. En la figura se muestra cómo saber cuáles son todos los DMVs existentes.

    Figura 10: Consulta para obtener las conexiones existentes a SSAS.

    Figura 11: Consulta para obtener las sesiones abiertas.

    Además de todas estas mejoras el motor de consultas de Analysis Services ha sido mejorado para responder mucho más rápido cuanto tengamos miembros calculados sin mayores cambios a nuestro código MDX. Otra de las mejoras más importantes desde mi punto de vista es el "Aggregation Wizard" o "Asistente de Agregaciones" el cual ha sido rediseñado totalmente, entre las características más importantes es que ahora podemos tener más de un diseño de agregación y podemos asignarlos a nuestras particiones según su uso. Más adelante espero dedicar un post completo a este tema.

    Esto ha sido todo por hoy, en la próxima entrega revisaremos las principales mejoras a Reporting Services 2008.


    Alan.

    17 marzo 2008

    Novedades en SQL Server 2008 Parte 1

    La semana pasada tuve la oportunidad de participar en el evento de lanzamiento de SQL 2008 en Puerto Rico, así que tuve que sacar tiempo de donde no había para comenzar a explorar las novedades de esta nueva versión que según dicen, tendremos la versión final para el 3er trimestre de este año.

    La versión con la que estuve trabajando es el CPT de Febrero y a continuación voy a comentar las principales novedades para la parte de BI.

    Lo primero que debo decir es que no hay mayores cambios a nivel de arquitectura del producto tal como existió de la versión 2000 a la 2005, eso es muy bueno para nosotros porque nos demuestra que el producto sigue madurando y no require hacerlo de nuevo desde cero. Por tanto todos los que están ya trabajando con 2005 o los que están recién empezando con esta versión no deben sentirse "mal" debido a que ya nos viene una nueva versión y habría que volver a empezar.

    Motor Relacional

    Específicamente para BI se han agregado nuevas características al lenguaje T-SQL como la inclusión de STAR JOIN, comando para relacionar nuestras dimensiones y fact tables de manera optimizada cuando creemos nuestras consultas (queries). El comando MERGE es otra novedad el cuál nos permite hacer inserciones o actualizaciones de una manera transparente entre dos tablas. Esto es bastante utilizado cuando tenemos que actualizar nuestras dimensiones o facts.

    Otras nuevas características son:
    • Change Data Capture (CDC): Básicamente CDC nos permite guardar en una segunda tabla los cambios realizadas a la primera, de manera que para realizar actualizaciones a nuestras dimensiones o facts dentro del DW, no tengamos que leer nuevamente toda la data de la tabla fuente (que puede tener millones de registros) para hacer preguntas acerca de cuál es la data que cambió o se insertó (que pueden ser sólo unas decenas o centenas pero seguramente mucho menor que toda la tabla fuente).

      Lo más interesante de esto es que el motor relacional hace todo el trabajo del CDC a través de un proceso que monitorea el Log y busca las inserciones, actualizaciones o eliminaciones que se realizaron a la tabla que se está monitoreando, logrando de esta manera el mínimo impacto con respecto a utilización de recursos del servidor.

      Para utilizar CDC primero hay que activarlo a nivel de la base de datos (se requiere tener rol de SysAdmin para poder hacer esto). Luego de ejecutar el Stored Procedure para la activación de CDC podrán notar que se crean nuevas tablas dentro del database schema llamado CDC (nombre reservado en SQL ahora para este propósito). A continuación debemos activar el CDC para las tablas específicas que necesitamos monitorear. Si vemos de nuevo las tablas existentes en nuestra base de datos podremos notar que ahora tenemos otras nuevas bajo el schema de CDC y también nuevas funciones de tipo tabla (Table Value Functions).

      La forma en que el CDC guarda la información de los cambios las tablas recientemente creadas se basa en el LSN (Log Sequence Number) que es el ID del log dónde guardó el o los cambios a nuestra tabla. Si revisamos las tabla CDC creada para monitoriar los cambios de nuestra tabla origen (cdc.[nombre_tabla]_CT), notaremos que hay varias columnas de metadata que empiezan con "_$" como las que muestran el LSN de inicio y de fin, así como una columna "_$Operation", que indica que tipo de operación fue la realizada con esa data (inserción, antes de actualización, después de actualización, eliminación). Para leer la información de nuestra tabla CDC podemos hacer uso de las funciones creadas automáticamente que nos permiten obtener los cambios filtrando los mismos por fecha.

      Leyendo la data que ha sido creada/modificada desde las tablas CDC para realizar actualizaciones en el DW disminuye el trabajo que hay que realizar en los paquetes a la misma vez que el tiempo de procesamiento puede mejorar sustancialmente.
    SSIS

    Con respecto a SSIS se han realizado mejoras al engine para maximizar el uso de varios procesadores creando procesos paralelos, lo cual aumenta la escalabilidad y permite distribuir la carga.

    Una de las mejoras ampliamente solicitadas fue la de incluir C# como parte del lenguaje para crear Script Components. Además cuando trabajemos con este componetne ahora tenemos mayor integración con el IDE de Visual Studio, podemos referenciar assemblies externos de una manera más fácil permitiendo que nuestros paquetes sean más extensibles usando el poder del .NET Framework.

    Otras características importantes son:
    • Data Profiling Component: Súper útil para ayudarnos a conocer más la data con la que tenemos que trabajar. Este componente permite realizar hasta 8 disitintos tipo de análisis sobre la tabla completa o sobre las columnas que nos interesan. Alguno de los tipos de análisis que podemos realizar son: cantidad de NULLs, tamaño Min/Max, Primary Key (para determinar si una columna puede ser primary key), data inclussion (para determinar si todos los valores de una columna están contenidos dentro de otra - foreign keys - lookups).
      La salida (output) de este control es un archivo en formato XML que puede ser visualizado con una nueva herramienta dentro del folder de SSIS llamada Data Profiler Viewer.
    • Lookup Cache: Realizar lookups en nuestros paquetes para obtener el Surrogate Key a partir de un Business Key, es una tarea común. El tema se complica cuando la tabla contra la que tenemos que realizar los lookups tiene millones de records y más aún si debemos realizar dicho lookup más de una vez dentro del mismo paquete o en varios paquetes diferentes. Esta complicación se da debido a que en 2005 SSIS necesita leer TOOODA la data de la tabla lookup en memoria antes de comenzar a procesar las tareas del data flow y por tanto, mientras más records, más lento es el proceso (si no les arroja primero algún error por falta de memoria).

      La buena nueva es que en 2008 podemos guardar la data del lookup en Cache, ya sea en memoria o físicamente en el disco, de manera que podamos cargar ese cache por adelantado y reutilizarlo en los distintos lookups según sea requerido, ya sea en el mismo o en otros paquetes. Bastante simple pero excelente mejora.

      Otras mejoras al lookup component existente es la posibilidad de dar un tratamiento distinto a los records que no existan en nuestra tabla lookup (antes sólo teníamos la opción de enviarla al output de error). Para esto se ha agregado un nuevo tipo de output al componente de Lookup.
    En la próximo post continuaremos revisando algunas de las nuevas características de SQL 2008 para BI. Alguno de ellos serán:

    SSAS
    • Dimension Wizard
    • Diseño más intuitivo
    SSRS
    • IIS Independent
    • Report Designer
    • Tablix
    • Nuevos controles

    Nos vemos,

    Alan