Tutorial Introducción al MDX: Capítulo 4
He vuelto de mis vacaciones por USA y he podido sacar tiempo para una nueva entrega del tutorial MDX.Ya ha llegado el nuevo capítulo. Siguiendo el hilo del capítulo anterior seguimos avanzando y hoy vemos el capítulo 4.
4.- Miembros calculados y formulas complejas.
Una de las funcionalidades más potentes que ofrece el lenguaje MDX es la posibilidad de realizar cálculos complejos tanto dinámicos (en función de los datos que se estan analizando en ese momento) como estáticos. Los cubos multidimensionales trabajan con medidas (del inglés measures) y con miembros calculados ( calculated members). Las medidas son las métricas de la tabla de hechos a las que se aplica una función de agregación (count,distinct count,sum,max,avg,etc…), en otras palabras son las métricas del negocio en estado puro. Los miembros calculados son tratados como métricas a la hora de explotar los cubos,sin embargo son mucho más potentes que estas.
Un miembro calculado es una métrica que tiene como valor el resultado de la aplicación de una fórmula que puede utilizar todos los elementosdisponibles en un cubo, así como otras funciones de MDX disponibles. Veamos un ejemplo sencillo.
Imaginamos que tenemos dos métricas en nuestro cubo que son:
[Medidas].[importe ventas] y [Medidas].[Número de artículos vendidos].
Podríamos obtener el precio medio de articulo utilizando un miembro calculado con la siguiente formula:
[Medidas].[precio medio articulo]=[Medidas].[importe ventas] / [Medidas].[Número de artículos vendidos]
Voilà!!! Este es nuestro primer miembro calculado.
Los miembros calculados son realmente muy potentes pues podemos utilizar expresiones condicionales para mostrar diferente información en función del nivel o las dimensiones que estamos visualizando. Un segundo ejemplo algo más complejo:
iif([Tiempo.mensual].CurrentMember.Level IS [Tiempo.mensual].[Mes],[Measures].[promedio mensual],null)
En el ejemplo anterior utilizamos una función condicional de MDX llamada iif que nos permite asignar valor a un miembro calculado sólo cuando estamos en un nivel determinado de una dimension. Concretamente este miembro calculado sólo tiene valor cuando estamos en el nivel Mes de la dimensión temporal, en cualquier otro caso el valor es nulo.
Acabamos el capítulo con otro ejemplo algo más complejo.
<CalculatedMember name=”Criticidad 6″ dimension=”Measures“>
sum({ParallelPeriod([tiempo].[periodo],1, [tiempo].CurrentMember).Lag(5):ParallelPeriod([tiempo].[periodo],1, [tiempo].CurrentMember)},[Importe Ventas])
<CalculatedMemberProperty name=”FORMAT_STRING” expression=”IIf(
sum({ParallelPeriod([tiempo].[periodo],1, [tiempo].CurrentMember).Lag(5):ParallelPeriod([tiempo].[periodo],1, [tiempo].CurrentMember)},[Importe Ventas])>0,’|##,##%|arrow=up‘,’|##,##%|arrow=down‘)”/>
CalculatedMember>
Aquí podemos ver un ejemplo de como se define una formula más compleja y como se da un formato especial en función del valor a esa formula.
La fórmula está utilizando una función de agregación para sumar la métrica [Importe Ventas] haciendo el acumulado de los últimos 5 valores del nivel ( 5 años, 5 meses o 5 semanas) utilizando la función de tiempo ParallelPeriod con el intervalo de los últimos 5 miembros (con ayuda de la funcion Lag(5))
El formato se define en la propiedad FORMAT_STRING y consiste en una flecha verde o roja en función de si la cantidad es negativa o positiva utilizando de nuevo la función if y las propiedades de formato como arrow=up y arrow=down que son propias de la implementación de mondrian.
Espero que estos ejemplos os hayan hayan servido para entender la utilidad y la potencia de los miembros calculados.












