Expresiones MDX en Analysis Services.

Analysis Services

Jorge Bustos | j.bustos@danysoft.com En este artículo se introducen las bases para entender el lenguaje de consulta MDX, diseñado para realizar consultas sobre cubos OLAP en general, y en Analysis Services en particular. Se explican los conceptos básicos y se ofrecen algunas muestras con la base de datos de ejemplo Foodmaret incluida en Analysis Services.
Para leer este artículo debería estar mínimamente 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 más en boga dentro de las Tecnologías de la Información, merece la pena hablar de un lenguaje cuya popularidad irá ganando terreno. Del mismo modo que el lenguaje SQL es el estándar para la consulta de bases de datos relacionales, MDX lo es para las bases de datos multidimensionales, conocidas habitualmente como OLAP. MDX es el acrónimo 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 expresión 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 aplicación 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 añadido Danysoft | 902 123146 | www.danysoft.com | Página 1.11

. Rebanar un cubo es. La siguiente imagen muestra el cubo rebanado: El rebanado consiste en elegir un miembro concreto de una dimensión para visualizar sólo los datos correspondientes al mismo. podría ser interesante examinar los datos de una provincia concreta. mostrado en la figura de arriba. tal como está el cubo orientado tras haberlo girado. (El “en cierta manera” es porque en MDX hay una diferencia sustancial entre filtrado y rebanado). provincias y productos se han cambiado.• • Rebanarlo. el cubo es el mismo. que consiste en elegir un “corte” del cubo. filtrar los datos que se quieren visualizar del mismo. que es lo que realmente se puede visualizar en cualquier aplicación cliente de cubos OLAP. Girar un cubo consiste en cambiar las dimensiones asociadas a cada eje. El siguiente dibujo muestra el resultado de girar el cubo original. que consiste en elegir un trozo particular del cubo limitando los miembros elegidos para visualizar en cada dimensión. En este ejemplo se ha elegido el miembro Zaragoza de la dimensión Provincias. resultando en una vista diferente de los mismos datos. Cortarlo en dados. según se mencionaba arriba. de modo que estamos viendo los datos de Zaragoza para todos los meses y todos los productos existentes en el cubo. es su “rebanado”. Como se puede apreciar. en cierta manera. pero los ejes ocupados por las dimensiones de meses. Otra operación que se puede realizar en un cubo. De este modo se conseguiría un conjunto de celdas distribuido en dos dimensiones. Por ejemplo. correspondiente a un miembro concreto de una dimensión.

que no se suele utilizar nunca. Un ejemplo de hacer dados a este cubo consistiría en tomar solo parte de los miembros de las dos dimensiones visibles en los ejes. resultante de trocear el cubo original. ¿Qué son las medidas de un cubo? En los ejemplos de arriba se ha obviado deliberadamente el tema de las medidas. en la dimensión de los meses. dado que no es posible visualizar más de dos ejes. dado que no tenemos la capacidad de visualizar más de tres dimensiones mediante dibujos. es una rebanada de un dado. Ambas expresiones.La última operación que se mencionaba arriba era “cortarlo en dados”. En el ejemplo utilizado. esto nos daría un dado completo. . el cubo sólo dispone de tres dimensiones. Incluso se ha hablado de que. en dichas celdas. más que un dado. de modo que sólo se toma la provincia de Zaragoza y. En cambio. Por tanto. Así que la tercera y siguientes dimensiones nunca suelen ir en los ejes de la consulta. Esta operación puede parecer lo mismo que el rebanado. En el ejemplo de arriba se puede ver que en el momento de rebanar. la dimensión elegida para rebanar no está en un eje visible. La palabra rebanar y rebanador es la utilizada por Microsoft en la ayuda de Analysis Services. y representan muy bien lo que le sucede al cubo original. muchas veces al rebanado se le denomina paginación. dejando ocultos todos los demás. Hacer ejemplos de más de tres dimensiones obligaría entrar en terrenos demasiado abstractos. De la dimensión utilizada para rebanar sólo se puede elegir un único miembro. y todas las provincias. En el ejemplo de arriba sólo se están visualizando las bebidas. La elección de un cubo de tres dimensiones se ha hecho intencionadamente para simplificar el ejemplo. Y “hacer dados”. en los cubos que se explotan habitualmente suele haber más de tres dimensiones. sino en los rebanadores. A continuación se explica que datos hay en ellas. Una nota sobre nomenclatura: a las dos últimas operaciones mencionadas se les suele denominar “Slice & Dice” en la jerga inglesa de OLAP. la dimensión provincias ha dejado de estar en un eje. Se ha hablado de los cubos y de sus celdas. Sin embargo nada más se ha dicho sobre los datos de las celdas. En realidad la paginación correspondería al tercer eje de las expresiones MDX. es la traducción literal de dice. pero hay dos diferencias fundamentales: • • En el rebanado. hay datos. son muy visuales. aunque el ejemplo haya sido sobre 3 dimensiones. Si no estuviera rebanado. en las dimensiones pertenecientes a los ejes se pueden elegir todos los miembros que se desee. y el 2º trimestre. Pero el dado de la figura además está rebanado. el segundo trimestre. Aunque en rigor no es lo mismo. Naturalmente. que comprendería las bebidas. y de qué celdas se muestran y de cómo se muestran. en la dimensión de productos. y permitir que siga siendo muy visual. Cortar el cubo en dados supone mostrar sólo los datos correspondientes a miembros concretos elegidos en cada dimensión. las tomemos en inglés o en su traducción al castellano. los conceptos explicados se pueden extender a cualquier número de dimensiones.

Al igual que en SQL. incluso cuando se está utilizando una buena aplicación cliente OLAP. A veces hace falta realizar consultas más avanzadas que las permitidas por los clientes OLAP. Concretando aún más. rebanarlo. muchas veces. hacerlo dados. siendo específicos de determinados fabricantes). Cuando se quieren leer datos de un cubo desde una aplicación personalizada sucede lo mismo. o el beneficio neto de las ventas. ¿Cómo se tratan las medidas en MDX? En MDX. En definitiva. como no podía ser de otra manera. ¿Para qué se utilizan las consultas MDX? Afortunadamente para los usuarios finales. o la cifra neta de ventas. con la sintaxis de MDX. y fuera de las conexiones específicas entre los servidores y clientes de determinados fabricantes de productos OLAP. como ordenar. (Algunos sistemas OLAP funcionan de otra manera. hay que elegir que medida se quiere ver en cada momento en las celdas del cubo. el usuario final de una aplicación cliente OLAP nunca tiene por que verse involucrado con la creación de consultas MDX ya que dicha aplicación las crea automáticamente para él. el cubo podría tener todas estas medidas definidas. si se utiliza el nombre largo. detrás de todas estas operaciones. eligiendo una medida concreta para visualizarla en el cubo. e incluso realizar otra serie de operaciones más avanzadas. Cualquier herramienta cliente de OLAP permite visualizar el cubo. si aún no llega al mismo nivel de generalización. suele existir una consulta MDX. ordenarlos. En el siguiente apartado se explica como se utilizan las medidas en las expresiones MDX de Analysis Services. Y. Sin embargo. de Reporting Services. 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. por ejemplo. Es más.A los datos existentes en cada celda de los cubos se les denomina medidas. Entonces ¿para qué se necesita MDX? Existen varios motivos que se enuncian a continuación. algún día lo hará. Es decir. realizar cálculos con ellos. etc. en MDX se pueden utilizar expresiones para manipular los datos. cuyos miembros son los nombres de las diferentes medidas definidas en el cubo. o el costo de fabricación de los productos vendidos. . el conocimiento de las consultas MDX no es necesario para poder realizar la serie de manipulaciones básicas que se han ido mencionando en los apartados anteriores. de modo que se puede hacer dos cosas con ellas: • • Utilizarlas para rebanar. Cuando se desean mostrar los datos de un cubo en un informe realizado con esta herramienta. Sin embargo sólo es posible ver un dato en cada celda en cada momento. ¿Cómo se conectan las aplicaciones a los servidores de cubos? Aunque en su momento trataron de implantarse otros estándares. en las expresiones MDX las medidas se tratan como si pertenecieran a una dimensión que siempre se va a llamar Measures. las medidas se tratan como si fueran una dimensión más del cubo. añadir cálculos. sin ningún lugar a dudas. Este es el caso. girarlo. Dichas expresiones deben escribirse. no queda más remedio que escribir la expresión MDX a mano. agruparlos. es ADO MD. Mostrar las medidas en un eje. etc. por último. filtrar por valores. También puede ser necesario conocer la sintaxis MDX para crear miembros o celdas calculadas. el estándar de facto. al desarrollar una aplicación. O. En el cubo empleado para los ejemplos la medida podría ser el número de unidades vendidas. o ADO con extensiones multidimensionales. filtrarlos. o un informe. como si se tratara de otra dimensión cualquiera. es necesario escribir la consulta que se desea visualizar.

el Administrador de Windows puede acceder a los cubos sin ningún tipo de limitación. Por ejemplo se puede utilizar en Visual Basic o en los lenguajes . Al abrir el programa hay que introducir los datos para realizar la conexión: Se debe proporcionar el nombre del servidor. Consta de un cuadro de texto donde se escribirá la consulta. donde puede especificarse su nombre de red. La aplicación tiene una interfaz básica. en el grupo de Analysis Services.NET. La seguridad de Analysis Services va integrada con la de Windows y. y el proveedor. un explorador de cubos que permite examinar los miembros y niveles de las dimensiones. es posible obtener datos de un cubo desde múltiples lenguajes de programación. y mediante la utilización de expresiones MDX. una lista de los elementos de la sintaxis MDX y una rejilla que se crea al ejecutar las consultas para mostrar sus resultados: . como la que aparecerá en SQL Server 2005. que será MSOLAP para conectarse a Analysis Services. pero más que suficiente para realizar pruebas.Con este tipo de conexión. Dicha aplicación de ejemplo se encuentra dentro del menú SQL Server. por defecto. ¿Cómo se pueden escribir y probar las expresiones MDX? A falta de una herramienta más avanzada para ello. el único modo de probar las expresiones MDX es utilizando una aplicación de ejemplo a la que se accede desde Analysis Manager.

Measures. ¿Cómo se escribe una consulta MDX básica? A través de unos pocos ejemplos se va a dar una visión global del aspecto de las consultas MDX más básicas. como el siguiente: SELECT FROM Sales Ya que no se han especificado ejes. Para ejecutar las consultas puede utilizarse la aplicación de ejemplo mencionada arriba. esta consulta únicamente devuelve una celda. conectándose a la base de datos de ejemplo Foodmart 2000. para la que no existe un miembro “todos”. Es decir.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. La sintaxis básica es: SELECT <especificación de eje> on columns. al no haberse especificado nada. <especificación de eje> on rows FROM <especificación de cubo> WHERE <especificación Slicer (rebanador)> En vez de entrar de lleno en ella es mejor partir de ejemplos más sencillos. sino que . por lo que esta consulta devuelve el resultado global de todos los datos del cubo. correspondiente a los datos acumulados del cubo completo. que es el que toman cuando no se especifican en la consulta MDX. para cada dimensión. se elige el miembro “todos” que engloba a toda la jerarquía de la dimensión. La oveja negra. es la dimensión de medidas. Más precisamente. Normalmente este es el miembro “todos”. las dimensiones tienen un miembro por defecto.

[Product Department]. Una consulta que especifica un eje tiene este aspecto: SELECT {[Product].[Yearly Income]. [Product].Members} on columns.hay una medida por defecto. ya que muestra todos los departamentos de producto existentes en el cubo. aunque debe respetarse que el primer eje sea el de columnas. {[Yearly Income].[All Products]. el segundo el de filas.[Meat]} on columns FROM Sales Como es aprecia.[Drink].[Beverages]. especificada al crear el cubo. este: .[All Products]. Este es el resultado: Naturalmente existen medios para no tener que especificar uno a uno todos los miembros. La consulta anterior.[All Products].[Drink]. la especificación de un eje consiste en definir los miembros de la dimensión que se aparecerán en el eje.[Unit Sales] En la consulta puede especificarse el número de ejes que se desee. si se recuerda lo que se comentaba sobre los ejes y rebanadores al principio de este artículo. Eso es natural. Se puede introducir un segundo eje. sería totalmente equivalente a: SELECT FROM Sales WHERE [Measures]. como el nivel de ingresos de los compradores: SELECT {[Product]. aunque no se muestre completo. El valor de la celda se corresponde a la medida Unit Sales.Members} on rows FROM Sales Siendo el resultado de la consulta. En este caso. Para especificar un rebanador. y en la mayoría de los casos.[Dairy]. basta con escribir el nombre de un miembro concreto de una dimensión tras el WHERE. [Product].[Product Department].Members} on columns FROM Sales El resultado es ahora mucho más largo. etc. el tercero el de páginas.[Food]. elegida entre todas las medidas existentes. la aplicación sólo soporta un máximo de dos ejes. como la función Members.[All Products].[Food]. por tanto. que devuelve la lista de todos los miembros de un nivel de una dimensión: SELECT {[Product].[Eggs]. [Product].

Members} on columns. (igualmente incompleto) queda así: Se comentó más arriba que las medidas pueden tratarse como si fueran una dimensión más del cubo. {[Product].El girar el cubo es tan sencillo como cambiar las dimensiones mostradas en cada eje: SELECT {[Yearly Income]. Aquí se muestra una consulta que utiliza la dimensión Measures para definir un eje: SELECT {[Measures].[Unit Sales] En este caso el resultado.Members} on columns.[Yearly Income].Members} on rows FROM Sales Siendo este el resultado: . en la segunda consulta de ejemplo.[Product Department].[MeasuresLevel]. Arriba. ya se vio como se podía utilizar la dimensión Measures como rebanador.Members} on rows FROM Sales WHERE [Measures].[Product Department]. {[Product].

[Pure Juice Beverages]} . Se puede apreciar que hay celdas.Para terminar.[Pure Juice Beverages]} on columns.[Beer and Wine].[Beverages].[All Media]. [Product].[USA]. Las filas o columnas completamente vacías pueden eliminarse del resultado anteponiendo las palabras claves NON EMPTY a la especificación del eje correspondiente: SELECT NON EMPTY {[Product].[M]. mostrando las cifras para las promociones de TV y Radio.[All Products].[Alcoholic Beverages]. [Measures].[All Products].[Carbonated Beverages]. [Product].[Beverages]. {[Promotion Media].[Q2].[All Marital Status].[Alcoholic Beverages]. y que muestra una información muy concreta del cubo original: SELECT {[Product].[TV]} on rows FROM Sales WHERE ([Customers].[Drink]. este es un ejemplo de una expresión que contiene varios rebanadores. para los casados (M).[Drink].[All Products].[Profit]) Esta consulta devuelve los beneficios (Profit) de las ventas de cerveza y vino. filas y columnas vacías. bebidas gaseosas y zumos. [Product].[Drink].[All Products].[All Products].[CA]. en California (CA).[Drink].[1997].[All Products].[Beverages].[All Customers].[Carbonated Beverages].[Drink]. [Marital Status].[Beer and Wine]. [Time].[Drink]. en el segundo trimestre del 97 (Q2).[Beverages]. [Product].

obteniendo información que no está directamente disponible en las dimensiones del cubo. Algunas de estas consultas no son tan fáciles de realizar como podría pensarse y requieren un conocimiento y una experiencia grande en MDX. .[All Marital Status]. máximos. Entre las agregaciones.) del mismo modo que en SQL.[M]. que respondan a preguntas como cuantos clientes han comprado un producto determinado en un rango de fechas dado.on columns. como se prefiera llamarlo.[1997]. en un proyecto en el que necesite realizar este tipo de consultas… incluso puede que su proyecto consista en la implantación de un Data Warehouse completo o en la creación de los cubos. como puede imaginarse. o crear un nuevo miembro que englobe la dimensión de varios miembros existentes. para llevar su proyecto a buen puerto. Es posible crear consultas que ordenen y filtren el cubo basándose en los valores de las celdas (medidas). sobre los miembros de una dimensión. [Time]. ¿Cómo seguir avanzando? Quizás usted se encuentre involucrado ahora. o de Pareto. o realizar la consultoría necesaria. los recuentos distintivos. etc. hay determinadas consultas MDX capaces de proporcionar información que aparentemente no existe en el cubo. del mismo modo que sucede con las consultas SQL complejas.[CA]. Esto también es algo muy habitual en los clientes OLAP. En el siguiente apartado se comentan más posibilidades ofrecidas por MDX. un caso algo especial son los recuentos y. Por poner algunos ejemplos: • • • • • Pueden combinarse varias dimensiones en solo eje.[Q2]. ¿Qué más puede hacerse con MDX? El lenguaje MDX permite hacer consultas muy avanzadas. haciendo que una dimensión subdivida a otra.[Profit]) Y el resultado de la consulta pasa a ser este orto: Sólo se ha mostrado la sintaxis más básica de MDX. medias. Pueden realizarse consultas con miembros y celdas calculadas: esto permite calcular una nueva medida a partir de otras medidas existentes en un cubo.[All Customers]. Aún más. o cuantos clientes han comprado dos productos concretos en otro rango de fechas determinado. NON EMPTY {[Promotion Media]. Este lenguaje de consulta es. mucho más potente. Si es así.[USA]. Solo una gran dosis de experiencia permite conocer las posibilidades reales de este lenguaje. Se pueden realizar agregaciones de datos (sumas. puede contar con los Servicios Profesionales de Danysoft para recibir la formación adecuada. en vez de basarlo en los nombres de los miembros de las dimensiones.[TV]} on rows FROM Sales WHERE ([Customers]. Entre otras cosas esto permite realizar análisis ABC. u 80/20.[All Media]. o vaya a estarlo en algún momento del futuro próximo. [Measures]. especialmente. [Marital Status].

Si desea hacernos un comentario sobre este artículo. contáctenos en attcliente@danysoft. .Para más información.com o en el 902 123146.

Sign up to vote on this title
UsefulNot useful