Funciones más comunes de MDX
Funciones más comunes de MDX Meritxell 2 Octubre, 2014 - 11:23IIF
IIF Meritxell 2 Octubre, 2014 - 11:34Sintaxis 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:37Sintaxis 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:38Sintaxis 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:42Sintaxis 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:48Sintaxis 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:53Sintaxis 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:56Esta 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: