Funciones más comunes de MDX

Funciones más comunes de MDX Meritxell 2 Octubre, 2014 - 11:23

IIF

IIF Meritxell 2 Octubre, 2014 - 11:34

Sintaxis de la función MDX IIF:

IIF (<<Logical Expression>>, <<String Expression1>>, <<String Expression2>>)

Esta función equivale al clásico condicional 'IF' y te permite dependiendo del valor que devuelve la expresión lógica hacer una cosa u otra.

Por tanto IIF sería como

Si Expresión Lógica = TRUE Entonces StringExpression1
Sino StringExpression2

 

Ejemplo de funcíón IIF en MDX:

Este ejemplo pondrá el color del texto en rojo si la cantidad pedida es iguala 1 y en verde si es diferente de 1.

iif([Measures].[Cantidad Pedida]=1, 255 /*Red*/, 8454016 /*R=128, G=255, B=128*/)

Otro ejemplo sería que si el miembro corriente de la dimensión Measures está vacío saldrá ‘YES’, si por el contrario está informado saldrá ‘NO’

IIF( IsEmpty([Measures].CurrentMember), ‘YES’, ‘NO’)

 

SUM

SUM Meritxell 2 Octubre, 2014 - 11:37

Sintaxis de la función SUM en MDX:

SUM (<<Set>> [, <<NumericExpression>>])

Devuelve la suma de una expresión numérica evaluada a partir de un conjunto

 

Ejemplo:

Devuelve la suma de los importes de pedidos del 2006.

SUM([Dim Periodo].[Año].&[2006] , [Measures].[Importe Pedido] )

 

En SSAS quedaría:

 

Resultado:

 

Count

Count Meritxell 2 Octubre, 2014 - 11:38

Sintaxis de Count en MDX:

COUNT( «Set» [, EXCLUDEEMPTY | INCLUDEEMPTY] )

Esta función devuelve el número de celdas de un Conjunto.

En esta función podemos especificar si se quiere excluir o incluir las celdas vacías en el cálculo.
 

CROSSJOIN

CROSSJOIN Meritxell 2 Octubre, 2014 - 11:42

Sintaxis de CROSSJOIN en MDX:

CROSSJOIN( «Set1», «Set2» )

Esta función permite hacer todas las posibles combinaciones entre dos conjuntos. Es equivalente al operador '*'.

 

Ejemplo de CROSSJOIN en MDX:

CROSSJOIN ( {[Zona Pedido].[Nombre Zona].&[Barcelones], [Zona Pedido].[Nombre Zona].&[Girones]},
                      {[Dim Producto].[Categoria Producto].[Categoria].&[1],
                       [Dim Producto].[Categoria Producto].[Categoria].&[2]} )

Esta expresión combina las zonas 'Barcelones' y 'Girones' con las categorías de producto 'hardware' y 'software'.
Para comprobarlo hacemos la siguiente query:

with set [zonas-Productos] as
  'CROSSJOIN({[Zona Pedido].[Nombre Zona].&[Barcelones],
              [Zona Pedido].[Nombre Zona].&[Girones]},
             {[Dim Producto].[Categoria Producto].[Categoria].&[1],
              [Dim Producto].[Categoria Producto].[Categoria].&[2]})'

select [zonas-Productos] on columns,
       [Measures].[Importe Pedido] on rows
from [Analysis DW]

 

Resultado:


 

Filter

Filter Meritxell 2 Octubre, 2014 - 11:48

Sintaxis de Filter en MDX:

FILTER( «Set», «Search Condition» )

Esta función toma un conjunto y una expresión booleana como argumentos y devuelve un subconjunto si la expresión booleana es TRUE.

 

Ejemplo de la función Filter en MDX:

FILTER( [Dim Producto].[Categoria Producto].[Producto], [Measures].[Importe Pedido] > 1000 )

Este ejemplo muestra del conjunto de los productos sólo los que tienen un importe de pedido superior a 1000€.

Para ver el resultado creamos la siguiente query:

with Set [Catprod] as
  'FILTER( [Dim Producto].[Categoria Producto].[Producto],
           [Measures].[Importe Pedido] > 1000 )'

select Catprod on columns, [Measures].[Importe Pedido] on rows
from [Analysis DW]

 

Resultado:

 

Si queremos comprobar que realmente se ha hecho bien el subconjunto ejecutamos la siguiente query que nos muestra todos los productos con el importe de pedido correspondiente:

select [Dim Producto].[Categoria Producto].[Producto] on columns,
       [Measures].[Importe Pedido] on rows
from [Analysis DW]

Resultado:


 

Como se puede observar sólo hay dos productos que superan los 1000€ de importe de pedido, y se corresponden con los productos resultantes de usar la funcion Filter anterior.

 

Order

Order Meritxell 2 Octubre, 2014 - 11:53

Sintaxis de Order en MDX:

ORDER( «Set», {«String Expression» | «Numeric Expression»} [, ASC | DESC | BASC | BDESC] )

Esta función ordena un conjunto de miembros dependiendo de la expresión, es decir, que puedes por ejemplo ordenar los productos que tienes en tu cubo ascendente o descendentemente por el importe de Pedido. También permite hacer la ordenación basándose en la jerarquia de ese grupo especificando ASC o DESC. En cambio, si quieres ignorar la jerarquía se debe especificar BASC o BDESC.

 

Ejemplo de la función Order en MDX

ORDER ( [Dim Producto].[Categoria Producto].[Producto], [Measures].[Importe Pedido], BDESC )

Este ejemplo ordena de manera descendente el conjunto de productos por el importe de pedidos, ignorando las jerarquias

Para comprobar el resultado hacemos la siguiente query:

with Set [Ordena_Catprod] as
  'ORDER( [Dim Producto].[Categoria Producto].[Producto],
          [Measures].[Importe Pedido], BDESC )'

select Ordena_Catprod on rows, [Measures].[Importe Pedido] on columns
from [Analysis DW]

 

Resultado:

 

En cambio, si no queremos ignorar las jerarquias:

ORDER( [Dim Producto].[Categoria Producto].[Producto], [Measures].[Importe Pedido], DESC )

La query es:

with Set [Ordena_Catprod] as
  'ORDER( [Dim Producto].[Categoria Producto].[Producto],
          [Measures].[Importe Pedido], DESC )'

select Ordena_Catprod on rows, [Measures].[Importe Pedido] on columns
from [Analysis DW]

y el resultado:

AVG

AVG Meritxell 2 Octubre, 2014 - 11:56

Esta función devuelve la media de los miembros de una jerarquía con respecto a su padre. Hemos de especificar el nivel para que no de resultados alterados.

 

Ejemplo de la función AVG de MDX:

Media de los miembros de la zona clientes

AVG([Dim Cliente].[Zonas Clientes].[Zona].members )

 

Confuguracion del miembro caculado en SSAS:

 

Resultado: