You are on page 1of 11

Expresiones MDX en Analysis Services.

Analysis Services

Jorge Bustos | j.bustos@danysoft.com En este artculo se introducen las bases para entender el lenguaje de consulta MDX, diseado para realizar consultas sobre cubos OLAP en general, y en Analysis Services en particular. Se explican los conceptos bsicos y se ofrecen algunas muestras con la base de datos de ejemplo Foodmaret incluida en Analysis Services.
Para leer este artculo debera estar mnimamente familiarizado con los cubos OLAP, conocer lo que son y haberlos manejado con cualquier tipo de herramienta cliente. Asimismo es recomendable tener Analysis Services instalado, de modo que puedan ejecutarse los ejemplos propuestos.

Consulta de bases de datos multidimensionales con MDX


En estos tiempos en que Business Intelligence se est convirtiendo en uno de los temas ms en boga dentro de las Tecnologas de la Informacin, merece la pena hablar de un lenguaje cuya popularidad ir ganando terreno. Del mismo modo que el lenguaje SQL es el estndar para la consulta de bases de datos relacionales, MDX lo es para las bases de datos multidimensionales, conocidas habitualmente como OLAP. MDX es el acrnimo de MultiDimensional eXpressions, lo que da una idea de cual es su finalidad exacta.

Qu devuelve una consulta MDX?


Del mismo modo que una consulta SQL devuelve un conjunto de datos, una expresin MDX devuelve un conjunto de celdas que es el resultado de tomar un subconjunto de las celdas del cubo original. Por ejemplo, se puede considerar que este cubo completo es el punto de partida para la consulta.

Desde cualquier aplicacin cliente OLAP, se pueden hacer varios tipos de manipulaciones a este cubo:

Girarlo, que consiste en cambiar el lugar que ocupan las dimensiones. Es decir, asociar las dimensiones a diferentes ejes.

05/09/2005 | Valor aadido Danysoft | 902 123146 | www.danysoft.com | Pgina 1.11

Rebanarlo, que consiste en elegir un corte del cubo, correspondiente a un miembro concreto de una dimensin. Cortarlo en dados, que consiste en elegir un trozo particular del cubo limitando los miembros elegidos para visualizar en cada dimensin.

Girar un cubo consiste en cambiar las dimensiones asociadas a cada eje. El siguiente dibujo muestra el resultado de girar el cubo original, mostrado en la figura de arriba.

Como se puede apreciar, el cubo es el mismo, pero los ejes ocupados por las dimensiones de meses, provincias y productos se han cambiado, resultando en una vista diferente de los mismos datos. Otra operacin que se puede realizar en un cubo, segn se mencionaba arriba, es su rebanado. Rebanar un cubo es, en cierta manera, filtrar los datos que se quieren visualizar del mismo. (El en cierta manera es porque en MDX hay una diferencia sustancial entre filtrado y rebanado). Por ejemplo, tal como est el cubo orientado tras haberlo girado, podra ser interesante examinar los datos de una provincia concreta. De este modo se conseguira un conjunto de celdas distribuido en dos dimensiones, que es lo que realmente se puede visualizar en cualquier aplicacin cliente de cubos OLAP. La siguiente imagen muestra el cubo rebanado:

El rebanado consiste en elegir un miembro concreto de una dimensin para visualizar slo los datos correspondientes al mismo. En este ejemplo se ha elegido el miembro Zaragoza de la dimensin Provincias, de modo que estamos viendo los datos de Zaragoza para todos los meses y todos los productos existentes en el cubo.

La ltima operacin que se mencionaba arriba era cortarlo en dados. Cortar el cubo en dados supone mostrar slo los datos correspondientes a miembros concretos elegidos en cada dimensin. Esta operacin puede parecer lo mismo que el rebanado, pero hay dos diferencias fundamentales:

En el rebanado, la dimensin elegida para rebanar no est en un eje visible. En el ejemplo de arriba se puede ver que en el momento de rebanar, la dimensin provincias ha dejado de estar en un eje. De la dimensin utilizada para rebanar slo se puede elegir un nico miembro. En cambio, en las dimensiones pertenecientes a los ejes se pueden elegir todos los miembros que se desee.

Un ejemplo de hacer dados a este cubo consistira en tomar solo parte de los miembros de las dos dimensiones visibles en los ejes, dejando ocultos todos los dems.

En el ejemplo de arriba slo se estn visualizando las bebidas, en la dimensin de productos, y el 2 trimestre, en la dimensin de los meses. Si no estuviera rebanado, esto nos dara un dado completo, resultante de trocear el cubo original, que comprendera las bebidas, el segundo trimestre, y todas las provincias. Pero el dado de la figura adems est rebanado, de modo que slo se toma la provincia de Zaragoza y, ms que un dado, es una rebanada de un dado. Una nota sobre nomenclatura: a las dos ltimas operaciones mencionadas se les suele denominar Slice & Dice en la jerga inglesa de OLAP. La palabra rebanar y rebanador es la utilizada por Microsoft en la ayuda de Analysis Services. Y hacer dados, es la traduccin literal de dice. Ambas expresiones, las tomemos en ingls o en su traduccin al castellano, son muy visuales, y representan muy bien lo que le sucede al cubo original. Aunque en rigor no es lo mismo, muchas veces al rebanado se le denomina paginacin. En realidad la paginacin correspondera al tercer eje de las expresiones MDX, que no se suele utilizar nunca, dado que no es posible visualizar ms de dos ejes. As que la tercera y siguientes dimensiones nunca suelen ir en los ejes de la consulta, sino en los rebanadores. En el ejemplo utilizado, el cubo slo dispone de tres dimensiones. Naturalmente, en los cubos que se explotan habitualmente suele haber ms de tres dimensiones. La eleccin de un cubo de tres dimensiones se ha hecho intencionadamente para simplificar el ejemplo, y permitir que siga siendo muy visual, dado que no tenemos la capacidad de visualizar ms de tres dimensiones mediante dibujos. Hacer ejemplos de ms de tres dimensiones obligara entrar en terrenos demasiado abstractos. Por tanto, aunque el ejemplo haya sido sobre 3 dimensiones, los conceptos explicados se pueden extender a cualquier nmero de dimensiones.

Qu son las medidas de un cubo?


En los ejemplos de arriba se ha obviado deliberadamente el tema de las medidas. Se ha hablado de los cubos y de sus celdas, y de qu celdas se muestran y de cmo se muestran. Incluso se ha hablado de que, en dichas celdas, hay datos. Sin embargo nada ms se ha dicho sobre los datos de las celdas. A continuacin se explica que datos hay en ellas.

A los datos existentes en cada celda de los cubos se les denomina medidas. En el cubo empleado para los ejemplos la medida podra ser el nmero de unidades vendidas, o el costo de fabricacin de los productos vendidos, o la cifra neta de ventas, o el beneficio neto de las ventas. Es ms, el cubo podra tener todas estas medidas definidas. Sin embargo slo es posible ver un dato en cada celda en cada momento. Es decir, hay que elegir que medida se quiere ver en cada momento en las celdas del cubo. En el siguiente apartado se explica como se utilizan las medidas en las expresiones MDX de Analysis Services.

Cmo se tratan las medidas en MDX?


En MDX, las medidas se tratan como si fueran una dimensin ms del cubo, de modo que se puede hacer dos cosas con ellas:

Utilizarlas para rebanar, eligiendo una medida concreta para visualizarla en el cubo. Mostrar las medidas en un eje, como si se tratara de otra dimensin cualquiera.

Concretando an ms, en las expresiones MDX las medidas se tratan como si pertenecieran a una dimensin que siempre se va a llamar Measures, cuyos miembros son los nombres de las diferentes medidas definidas en el cubo.

Para qu se utilizan las consultas MDX?


Afortunadamente para los usuarios finales, el conocimiento de las consultas MDX no es necesario para poder realizar la serie de manipulaciones bsicas que se han ido mencionando en los apartados anteriores. Cualquier herramienta cliente de OLAP permite visualizar el cubo, girarlo, hacerlo dados, rebanarlo, e incluso realizar otra serie de operaciones ms avanzadas, como ordenar, filtrar por valores, aadir clculos, etc. Sin embargo, detrs de todas estas operaciones, suele existir una consulta MDX. (Algunos sistemas OLAP funcionan de otra manera, siendo especficos de determinados fabricantes). En definitiva, el usuario final de una aplicacin cliente OLAP nunca tiene por que verse involucrado con la creacin de consultas MDX ya que dicha aplicacin las crea automticamente para l. Entonces para qu se necesita MDX? Existen varios motivos que se enuncian a continuacin. Al igual que en SQL, en MDX se pueden utilizar expresiones para manipular los datos, ordenarlos, filtrarlos, agruparlos, realizar clculos con ellos, etc. Dichas expresiones deben escribirse, como no poda ser de otra manera, con la sintaxis de MDX. A veces hace falta realizar consultas ms avanzadas que las permitidas por los clientes OLAP. Tambin puede ser necesario conocer la sintaxis MDX para crear miembros o celdas calculadas, incluso cuando se est utilizando una buena aplicacin cliente OLAP. Y, por ltimo, muchas veces, al desarrollar una aplicacin, o un informe, no queda ms remedio que escribir la expresin MDX a mano. Este es el caso, por ejemplo, de Reporting Services. Cuando se desean mostrar los datos de un cubo en un informe realizado con esta herramienta, es necesario escribir la consulta que se desea visualizar. Cuando se quieren leer datos de un cubo desde una aplicacin personalizada sucede lo mismo.

Cmo se conectan las aplicaciones a los servidores de cubos?


Aunque en su momento trataron de implantarse otros estndares, y fuera de las conexiones especficas entre los servidores y clientes de determinados fabricantes de productos OLAP, el estndar de facto, sin ningn lugar a dudas, es ADO MD, o ADO con extensiones multidimensionales, si se utiliza el nombre largo. ADO MD se puede considerar como el ODBC de las bases de datos multidimensionales en el sentido de que est tan generalizado entre las bases multidimensionales como ODBC en las relacionales. O, si an no llega al mismo nivel de generalizacin, algn da lo har.

Con este tipo de conexin, y mediante la utilizacin de expresiones MDX, es posible obtener datos de un cubo desde mltiples lenguajes de programacin. Por ejemplo se puede utilizar en Visual Basic o en los lenguajes .NET.

Cmo se pueden escribir y probar las expresiones MDX?


A falta de una herramienta ms avanzada para ello, como la que aparecer en SQL Server 2005, el nico modo de probar las expresiones MDX es utilizando una aplicacin de ejemplo a la que se accede desde Analysis Manager. Dicha aplicacin de ejemplo se encuentra dentro del men SQL Server, en el grupo de Analysis Services. Al abrir el programa hay que introducir los datos para realizar la conexin:

Se debe proporcionar el nombre del servidor, donde puede especificarse su nombre de red, y el proveedor, que ser MSOLAP para conectarse a Analysis Services. La seguridad de Analysis Services va integrada con la de Windows y, por defecto, el Administrador de Windows puede acceder a los cubos sin ningn tipo de limitacin. La aplicacin tiene una interfaz bsica, pero ms que suficiente para realizar pruebas. Consta de un cuadro de texto donde se escribir la consulta, un explorador de cubos que permite examinar los miembros y niveles de las dimensiones, una lista de los elementos de la sintaxis MDX y una rejilla que se crea al ejecutar las consultas para mostrar sus resultados:

Los nombres de los niveles de las dimensiones y de los miembros se pueden arrastrar directamente desde el explorador al cuadro de texto como ayuda para escribir las consultas.

Cmo se escribe una consulta MDX bsica?


A travs de unos pocos ejemplos se va a dar una visin global del aspecto de las consultas MDX ms bsicas. Para ejecutar las consultas puede utilizarse la aplicacin de ejemplo mencionada arriba, conectndose a la base de datos de ejemplo Foodmart 2000. La sintaxis bsica es: SELECT <especificacin de eje> on columns, <especificacin de eje> on rows FROM <especificacin de cubo> WHERE <especificacin Slicer (rebanador)> En vez de entrar de lleno en ella es mejor partir de ejemplos ms sencillos, como el siguiente: SELECT FROM Sales Ya que no se han especificado ejes, esta consulta nicamente devuelve una celda, correspondiente a los datos acumulados del cubo completo. Ms precisamente, las dimensiones tienen un miembro por defecto, que es el que toman cuando no se especifican en la consulta MDX. Normalmente este es el miembro todos, por lo que esta consulta devuelve el resultado global de todos los datos del cubo. Es decir, para cada dimensin, al no haberse especificado nada, se elige el miembro todos que engloba a toda la jerarqua de la dimensin. La oveja negra, es la dimensin de medidas, Measures, para la que no existe un miembro todos, sino que

hay una medida por defecto, especificada al crear el cubo, elegida entre todas las medidas existentes. El valor de la celda se corresponde a la medida Unit Sales. Para especificar un rebanador, basta con escribir el nombre de un miembro concreto de una dimensin tras el WHERE. La consulta anterior, por tanto, sera totalmente equivalente a: SELECT FROM Sales WHERE [Measures].[Unit Sales] En la consulta puede especificarse el nmero de ejes que se desee, aunque debe respetarse que el primer eje sea el de columnas, el segundo el de filas, el tercero el de pginas, etc. En este caso, y en la mayora de los casos, la aplicacin slo soporta un mximo de dos ejes. Eso es natural, si se recuerda lo que se comentaba sobre los ejes y rebanadores al principio de este artculo. Una consulta que especifica un eje tiene este aspecto: SELECT {[Product].[All Products].[Drink].[Beverages], [Product].[All Products].[Drink].[Dairy], [Product].[All Products].[Food].[Eggs], [Product].[All Products].[Food].[Meat]} on columns FROM Sales Como es aprecia, la especificacin de un eje consiste en definir los miembros de la dimensin que se aparecern en el eje. Este es el resultado:

Naturalmente existen medios para no tener que especificar uno a uno todos los miembros, como la funcin Members, que devuelve la lista de todos los miembros de un nivel de una dimensin: SELECT {[Product].[Product Department].Members} on columns FROM Sales El resultado es ahora mucho ms largo, ya que muestra todos los departamentos de producto existentes en el cubo. Se puede introducir un segundo eje, como el nivel de ingresos de los compradores: SELECT {[Product].[Product Department].Members} on columns, {[Yearly Income].[Yearly Income].Members} on rows FROM Sales Siendo el resultado de la consulta, aunque no se muestre completo, este:

El girar el cubo es tan sencillo como cambiar las dimensiones mostradas en cada eje: SELECT {[Yearly Income].[Yearly Income].Members} on columns, {[Product].[Product Department].Members} on rows FROM Sales WHERE [Measures].[Unit Sales] En este caso el resultado, (igualmente incompleto) queda as:

Se coment ms arriba que las medidas pueden tratarse como si fueran una dimensin ms del cubo. Arriba, en la segunda consulta de ejemplo, ya se vio como se poda utilizar la dimensin Measures como rebanador. Aqu se muestra una consulta que utiliza la dimensin Measures para definir un eje: SELECT {[Measures].[MeasuresLevel].Members} on columns, {[Product].[Product Department].Members} on rows FROM Sales Siendo este el resultado:

Para terminar, este es un ejemplo de una expresin que contiene varios rebanadores, y que muestra una informacin muy concreta del cubo original: SELECT {[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine], [Product].[All Products].[Drink].[Beverages].[Carbonated Beverages], [Product].[All Products].[Drink].[Beverages].[Pure Juice Beverages]} on columns, {[Promotion Media].[All Media].[TV]} on rows FROM Sales WHERE ([Customers].[All Customers].[USA].[CA], [Time].[1997].[Q2], [Marital Status].[All Marital Status].[M], [Measures].[Profit]) Esta consulta devuelve los beneficios (Profit) de las ventas de cerveza y vino, bebidas gaseosas y zumos, en California (CA), en el segundo trimestre del 97 (Q2), para los casados (M), mostrando las cifras para las promociones de TV y Radio.

Se puede apreciar que hay celdas, filas y columnas vacas. Las filas o columnas completamente vacas pueden eliminarse del resultado anteponiendo las palabras claves NON EMPTY a la especificacin del eje correspondiente: SELECT NON EMPTY {[Product].[All Products].[Drink].[Alcoholic Beverages].[Beer and Wine], [Product].[All Products].[Drink].[Beverages].[Carbonated Beverages], [Product].[All Products].[Drink].[Beverages].[Pure Juice Beverages]}

on columns, NON EMPTY {[Promotion Media].[All Media].[TV]} on rows FROM Sales WHERE ([Customers].[All Customers].[USA].[CA], [Time].[1997].[Q2], [Marital Status].[All Marital Status].[M], [Measures].[Profit]) Y el resultado de la consulta pasa a ser este orto:

Slo se ha mostrado la sintaxis ms bsica de MDX. Este lenguaje de consulta es, como puede imaginarse, mucho ms potente. En el siguiente apartado se comentan ms posibilidades ofrecidas por MDX.

Qu ms puede hacerse con MDX?


El lenguaje MDX permite hacer consultas muy avanzadas, obteniendo informacin que no est directamente disponible en las dimensiones del cubo. Por poner algunos ejemplos:

Pueden combinarse varias dimensiones en solo eje, haciendo que una dimensin subdivida a otra. Esto tambin es algo muy habitual en los clientes OLAP. Pueden realizarse consultas con miembros y celdas calculadas: esto permite calcular una nueva medida a partir de otras medidas existentes en un cubo, o crear un nuevo miembro que englobe la dimensin de varios miembros existentes. Es posible crear consultas que ordenen y filtren el cubo basndose en los valores de las celdas (medidas), en vez de basarlo en los nombres de los miembros de las dimensiones. Entre otras cosas esto permite realizar anlisis ABC, o de Pareto, u 80/20, como se prefiera llamarlo, sobre los miembros de una dimensin. Se pueden realizar agregaciones de datos (sumas, medias, mximos, etc.) del mismo modo que en SQL. Entre las agregaciones, un caso algo especial son los recuentos y, especialmente, los recuentos distintivos, que respondan a preguntas como cuantos clientes han comprado un producto determinado en un rango de fechas dado, o cuantos clientes han comprado dos productos concretos en otro rango de fechas determinado.

Algunas de estas consultas no son tan fciles de realizar como podra pensarse y requieren un conocimiento y una experiencia grande en MDX, del mismo modo que sucede con las consultas SQL complejas. An ms, hay determinadas consultas MDX capaces de proporcionar informacin que aparentemente no existe en el cubo. Solo una gran dosis de experiencia permite conocer las posibilidades reales de este lenguaje.

Cmo seguir avanzando?


Quizs usted se encuentre involucrado ahora, o vaya a estarlo en algn momento del futuro prximo, en un proyecto en el que necesite realizar este tipo de consultas incluso puede que su proyecto consista en la implantacin de un Data Warehouse completo o en la creacin de los cubos. Si es as, puede contar con los Servicios Profesionales de Danysoft para recibir la formacin adecuada, o realizar la consultora necesaria, para llevar su proyecto a buen puerto.

Para ms informacin. Si desea hacernos un comentario sobre este artculo, contctenos en attcliente@danysoft.com o en el 902 123146.

You might also like