Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MDX As
MDX As
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.
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.
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.
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.
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.
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.
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.
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.
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.
Para ms informacin. Si desea hacernos un comentario sobre este artculo, contctenos en attcliente@danysoft.com o en el 902 123146.