MDX (Multidimensional Expressions) es el lenguaje de consulta utilizado por Analysis Services (SSAS), equivalente al lenguaje SQL con los motores de Base de Datos relacionales. Con MDX, además de ejecutar consultas sobre nuestros Cubos, podemos escribir expresiones o cálculos, como es el caso de los Miembros Calculados (Calculated Members) y los Conjuntos con Nombre (Named Sets).
El Lenguaje de Consulta MDX (Multidimensional Expressions)
Las herramientas de visualización que utilicemos para explotar nuestros Cubos de Analysis Services, por debajo estarán ejecutando consultas MDX (que se suelen crear de forma dinámica en base a las acciones del usuario), recibiendo el resultado de ejecución, y presentando los resultados al usuario en un formato y con un interfaz orientado a un usuario de negocio que desea analizar los datos. Pero al final, tan sólo están ejecutando consultas MDX.
Del mismo modo, también podemos utilizar SQL Server Management Studio (SSMS) para ejecutar sencillas consultas MDX. Para ello, abriremos SSMS, nos conectaremos a una Instancia de Analysis Services (SSAS), para seguidamente crear una nueva consulta MDX.
La sintaxis que utiliza el Lenguaje MDX es diferente a la del lenguaje SQL. Si intentamos hacer las cosas igual que en SQL, nos encontraremos con diferentes problemas y errores, como en el siguiente ejemplo.
El Lenguaje MDX devuelve un conjunto de resultados multidimensional, motivo por el cual, deberemos especificar en nuestras consultas MDX la definición de cada eje con la palabra clave ON. Sin embargo, SQL Server Management Studio está limitado a la visualización de sólo dos ejes, aunque el Lenguaje MDX permite la utilización de hasta 128 ejes. Por lo demás, es relativamente sencillo, y podemos utilizar operaciones de Arrastrar y Soltar (Drag and Drop) de Dimensiones, Miembros, Medidas, etc., para facilitar la escritura de nuestras consultas MDX.
Además, también podemos utilizar una cláusula WHERE, y tenemos disponible numerosas funciones para construir consultas más ricas y complejas.
Los Miembros Calculados (Calculated Members)
Utilizando el Lenguaje MDX, podemos crear Miembros Calculados (Calculated Members), que son simplemente miembros de una Dimensión o de un Grupo de Medidas, definidos por expresiones MDX que son almacenadas en los Cubos, aunque sus valores son calculados en tiempo de ejecución (es decir, no son almacenados), minimizando las necesidades de almacenamiento del Cubo. Si deseamos que sus valores sean almacenados, deberíamos recurrir a otros medios, como por ejemplo, Columnas Calculadas (Named Column) ó Consultas con Nombre (Named Query) en el Data Source View, o incluso en el proceso de ETL.
Un caso típico es calcular el Beneficio, es decir, teniendo como medidas las Ventas y el Coste, el Beneficio sería la diferencia entre ambos, un valor que puede definirse de forma sencilla utilizando un Miembro Calculado.
Para crear un Miembro Calculado (Calculated Member), deberemos editar el Cubo de Analysis Services en Visual Studio, acceder a la página de Calculations, y utilizar el botón New Calculated Member.
Seguidamente deberemos especificar un nombre para el Miembro Calculado, así como especificar su ubicación jerárquica (en que Dimensión, o como en nuestro caso, indicar que es una Medida), escribir la expresión MDX, y especificar el resto de propiedades de formato, etc.
Realizado todo esto, tan sólo nos queda Procesar el Cubo, y ya podremos acceder al nuevo Miembro Calculado (Calculated Member) que acabamos de crear.
Los Conjuntos con Nombre (Named Sets)
Un Conjunto con Nombre (Named Set) es una expresión MDX que devuelve un conjunto de miembros de una Dimensión, de tal modo que podamos definirlos en un Cubo de Analysis Services (SSAS), y así simplificar futuras Consultas MDX que puedan utilizarlo. Al igual que ocurría con los Miembros Calculados (Calculated Members), su definición se almacena en el Cubo, pero sus valores son calculados en tiempo de ejecución (es decir, no son almacenados), minimizando las necesidades de almacenamiento del Cubo. Un ejemplo típico, podría ser crear un Conjunto con Nombre para los 10 mejores Clientes.
Para crear un Conjunto con Nombre (Named Set), deberemos editar el Cubo de Analysis Services en Visual Studio, acceder a la página de Calculations, y utilizar el botón New Named Set.
Seguidamente deberemos especificar un nombre para el Conjunto con Nombre, así como escribir su expresión MDX. En nuestro caso de ejemplo, vamos a crear un Conjunto con Nombre que nos devuelva los dos países con mayores ventas, para lo cual, vamos a utilizar la función MDX TopCount.
Realizado esto, podremos Procesar el Cubo para poder empezar a utilizar nuestro nuevo Conjunto con Nombre. Por ejemplo, podríamos escribir una Consulta MDX que muestre las ventas para los mejores países, para lo cual podríamos filtrar por el Conjunto con Nombre que acabamos de crear, tal y como se muestra en el siguiente ejemplo.
Despedida y Cierre
En el presente artículo hemos presentado a modo de introducción cómo realizar una Consulta MDX desde SQL Server Management Studio (SSMS), como crear un Miembro Calculado (Calculated Member) con MDX en un Cubo de Analysis Services, y como crear un Conjunto con Nombre (Named Set) con MDX en un Cubo de Analysis Services.
Un conocimiento avanzado del Lenguaje MDX nos permitirá poder Diseñar y Desarrollar Cubos de Analysis Services muy completos, así como poder explotar la información de nuestros Cubos de una forma muy eficiente. Por ello, es muy recomendable para cualquier Consultor de Analysis Services, disponer de un nivel avanzado del Lenguaje MDX.
Poco más por hoy. Como siempre, confío que la lectura resulte de interés.