Está en la página 1de 11

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

11
Ex pr esi ones MDX en Anal ysi s Ser vi c es.
Analysis Services
Jorge Bustos | j.bustos@danysoft.com
En est e ar t c ul o se i nt r oduc en l as bases par a ent ender el l enguaj e
de c onsul t a MDX, di seado par a r eal i zar c onsul t as sobr e c ubos
OLAP en gener al , y en Anal ysi s Ser vi c es en par t i c ul ar . Se ex pl i c an
l os c onc ept os bsi c os y se of r ec en al gunas muest r as c on l a base
de dat os de ej empl o Foodmar et i nc l ui da en Anal ysi s Ser vi c es.
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.
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 <especi f i caci n de ej e> on col umns,
<especi f i caci n de ej e> on r ows
FROM <especi f i caci n de cubo>
WHERE <especi f i caci n Sl i cer ( r ebanador ) >

En vez de entrar de lleno en ella es mejor partir de ejemplos ms sencillos, como el siguiente:

SELECT
FROM Sal es

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 Sal es
WHERE [ Measur es] . [ Uni t Sal es]

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
{[ Pr oduct ] . [ Al l Pr oduct s] . [ Dr i nk] . [ Bever ages] ,
[ Pr oduct ] . [ Al l Pr oduct s] . [ Dr i nk] . [ Dai r y] ,
[ Pr oduct ] . [ Al l Pr oduct s] . [ Food] . [ Eggs] ,
[ Pr oduct ] . [ Al l Pr oduct s] . [ Food] . [ Meat ] } on col umns
FROM Sal es

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
{[ Pr oduct ] . [ Pr oduct Depar t ment ] . Member s} on col umns
FROM Sal es

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
{[ Pr oduct ] . [ Pr oduct Depar t ment ] . Member s} on col umns,
{[ Year l y I ncome] . [ Year l y I ncome] . Member s} on r ows
FROM Sal es

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
{[ Year l y I ncome] . [ Year l y I ncome] . Member s} on col umns,
{[ Pr oduct ] . [ Pr oduct Depar t ment ] . Member s} on r ows
FROM Sal es
WHERE [ Measur es] . [ Uni t Sal es]

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
{[ Measur es] . [ Measur esLevel ] . Member s} on col umns,
{[ Pr oduct ] . [ Pr oduct Depar t ment ] . Member s} on r ows
FROM Sal es

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
{[ Pr oduct ] . [ Al l Pr oduct s] . [ Dr i nk] . [ Al cohol i c
Bever ages] . [ Beer and Wi ne] ,
[ Pr oduct ] . [ Al l Pr oduct s] . [ Dr i nk] . [ Bever ages] . [ Car bonat ed
Bever ages] ,
[ Pr oduct ] . [ Al l Pr oduct s] . [ Dr i nk] . [ Bever ages] . [ Pur e J ui ce
Bever ages] }
on col umns,
{[ Pr omot i on Medi a] . [ Al l Medi a] . [ TV] }
on r ows
FROM Sal es
WHERE
( [ Cust omer s] . [ Al l Cust omer s] . [ USA] . [ CA] , [ Ti me] . [ 1997] . [ Q2] ,
[ Mar i t al St at us] . [ Al l Mar i t al St at us] . [ M] ,
[ Measur es] . [ Pr of i t ] )

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
{[ Pr oduct ] . [ Al l Pr oduct s] . [ Dr i nk] . [ Al cohol i c
Bever ages] . [ Beer and Wi ne] ,
[ Pr oduct ] . [ Al l Pr oduct s] . [ Dr i nk] . [ Bever ages] . [ Car bonat ed
Bever ages] ,
[ Pr oduct ] . [ Al l Pr oduct s] . [ Dr i nk] . [ Bever ages] . [ Pur e J ui ce
Bever ages] }
on col umns,
NON EMPTY
{[ Pr omot i on Medi a] . [ Al l Medi a] . [ TV] }
on r ows
FROM Sal es
WHERE
( [ Cust omer s] . [ Al l Cust omer s] . [ USA] . [ CA] , [ Ti me] . [ 1997] . [ Q2] ,
[ Mar i t al St at us] . [ Al l Mar i t al St at us] . [ M] ,
[ Measur es] . [ Pr of i t ] )

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.

También podría gustarte