3. Fórmulas y funciones en MDX

3. Fórmulas y funciones en MDX Meritxell 29 Septiembre, 2014 - 11:28

Conjunto con nombre (Named Sets)

Conjunto con nombre (Named Sets) Meritxell 29 Septiembre, 2014 - 11:35

Un conjunto o Set es un conjunto de celdas de la misma dimensionalidad, es decir, que en un mismo conjunto podemos tener más de una celda, pero todas tienen que pertenecer a la misma dimensión.

Un conjunto se puede definir a priori asignándole un nombre y así cada vez que se quiera hacer referencia a ese conjunto no se tendra que especificar cada celda sino el nombre de ese conjunto previamente definido. A esto se le llama Conjunto con Nombre o Named Sets.

La expresión para crear un conjunto con nombre es:

SET <set_alias_name> AS [']<set>[']

Cada conjunto se deberá delimitar entre {}. Si hay uno solo no es necesario, pero si por el contrario hay más de uno se deberán poner.

Ejemplo de Conjunto con nombre con el cubo Analysis DW

Query usando un conjunto sin nombre

Select [Measures].[Importe Pedido] on columns,
{[Dim Cliente].[Zonas Clientes].[Zona].&[1], [Dim Cliente].[Zonas Clientes].[Zona].&[2]} on rows
from [Analysis DW]

 

Resultado:

Conjunto sin nombre

 

La misma query usando un conjunto con nombre y por tanto usando la clausula with y así una vez definido solo poniendo el nombre del conjunto ya lo reconoce

with set [Provincia Barcelona] as '{[Dim Cliente].[Zonas Clientes].[Zona].&[1], [Dim Cliente].[Zonas Clientes].[Zona].&[2]}'

Select [Measures].[Importe Pedido] on columns,
[Provincia Barcelona] on rows
from [Analysis DW]

 

Resultado:

Conjunto sin nombre

Creación de un conjunto con nombre con SSAS

La configuración queda de la siguiente manera para el ejemplo de hacer un conjunto con los 5 mejores clientes con respecto al importe de pedido:

 Conjunto con nombre con SSAS

El problema es que no se puede visualizar dentro del browser del SSAS, sino que se tiene que visualizar haciendo una Query como esta:

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

 

Resultado:

Visualización con una Query

 

Miembros Calculados

Miembros Calculados Dataprix 29 Septiembre, 2014 - 15:27

Los miembros Calculados son cálculos hechos con expresiones MDX. Un ejemplo típico de miembro calculado es el calculo Year-To-Date (YTD) de las ventas de los productos. Esto puede ser especificado por una expresión MDX usando la cláusula WITH. Por tanto, se podrán devolver las ventas no sólo de cada mes sino también las ventas de los meses desde inicio de año hasta el mes corriente.

La fórmula de la clausula WITH para crear un miembro calculado es:

Formula_expression := MEMBER <MemberName> AS [‘]<MDX_Expression>[‘],
[ , SOLVE_ORDER = <integer>]
[ , <CellProperty> = <PropertyExpression>]

 

El Solve_Order es un parámetro opcional el valor del cual debe ser un entero positivo. Este parámetro determina el orden en que deben ser evaluados los miembros siempre y cuando se hayan definido más de un miembro dentro de la clausula WITH.

El CellProperty es también un parámetro opcional que se usa para especificar las propiedades de la celda para el miembro calculado, como por ejemplo el formato del texto de la celda, incluído el color de fondo.

 

Los miembros calculados pueden ser utilizados como medidas o como miembros. Por tanto, si creamos un miembro tenemos que especificar dónde se quiere guardar su definición, si en la dimensión Measures y por tanto será una medida, o por el contrario en cualquier otra dimensión, que entonces será un miembro.

Es importante saber que de un miembro calculado sólo se guarda su definición, y es en el momento de su utilización cuando se calcula. Por tanto, esto hace que no se incremente la dimensión del cubo. También se debe saber que los miembros calculados se deben basar en datos existentes en el cubo.

Para crear estos miembros MDX dispone de una gama de funciones que ofrecen una extrema flexibilidad a la hora de manipular los datos multidimensionales.

Ejemplo de Miembros calculados con el cubo AnalysisDW

With Member [Measures].[PorcentajePedidos] as
          '([Measures].[ImportePedido]/[Measures].[Cantidad Pedida])'

Select [Measures].[PorcentajePedidos] on columns,
       [Dim Cliente].[Zonas Clientes].members on rows
from [Analysis DW]

 

Resultado:

Miembros calculados con el culbo AnalysisDW

Combinación de Miembros calculados y conjuntos con nombres dentro de una misma clausula WITH

with set [Provincia Barcelona] as
       '{[Dim Cliente].[Zonas Clientes].[Zona].&[1],    
         [Dim Cliente].[Zonas Clientes].[Zona].&[2]}'
     Member [Measures].[PorcentajePedidos] as
       '([Measures].[Importe Pedido]/[Measures].[Cantidad Pedida])'

Select [Measures].[PorcentajePedidos] on columns,
[Provincia Barcelona] on rows
from [Analysis DW]

Resultado:

Combinación de Miembros calculados y conjuntos con nombres dentro de una misma clausula WITH

 

Ejemplo de creación de miembros calculados MDX con SSAS

Vamos a añadir un miembro dentro de una dimensión y no como una medida. El miembro lo añadiremos en el año de la dimensión dim_periodo y calculará el sumatorio de los años 2005 y 2006.

La configuracion para crear un miembro calculado con una expresión SSAS es:

Añadir un miembro dentro de una dimension

 

Resultado:

Añadir un miembro dentro de una dimension resultado

 

Expresiones MDX

Expresiones MDX Meritxell 29 Septiembre, 2014 - 15:33

Las expresiones MDX sirven para evaluar un valor. Son usadas en cálculos o para definir valores de objetos como default member o default measures o para definir expresiones de seguridad que permitiran o denegaran el acceso a los datos.

Las expresiones MDX normalmente toman un miembro, una tupla o un conjunto como parámetro y devuelven un valor. Si el resultado de evaluar la expresión MDX no tiene valor devuelve NULL.

A continuación se muestran unos cuantos ejemplos:

Este ejemplo devuelve el valor por defecto de la jerarquía Zonas Clientes de la Dimension:

[Dim Cliente].[Zonas Clientes].DEFAULTMEMBER

Para ver el resultado lo sacaremos en forma de query:

select [Dim Cliente].[Zonas Clientes].DEFAULTMEMBER on columns
from [Analysis DW]

 

Resultado:

valor por defecto de la jerarquía Zonas Clientes de la Dimension

Este ejemplo devuelve para cada Zona de cliente la diferencia de importe que hay respecto a la zona de Barcelona:

([Dim Cliente].[Zonas Clientes].CURRENTMEMBER, [Measures].[Importe Pedido]) -
([Dim Cliente].[Zonas Clientes].[Zona].&[1], [Measures].[Importe Pedido])

Para ver el resultado lo escribimos en forma de miembro calculado dentro de la clausula WITH:

With Member [Measures].[Diferencia] as
  '([Dim Cliente].[Zonas Clientes].CURRENTMEMBER,[Measures].[Importe Pedido]) -
   ([Dim Cliente].[Zonas Clientes].[Zona].&[1], [Measures].[Importe Pedido])'

select [Measures].[Diferencia] on columns,
       [Dim Cliente].[Zonas Clientes].[Zona] on rows
from [Analysis DW]

 

Resultado de la expresión MDX

valor por defecto de la jerarquía Zonas Clientes de la Dimension, resultado

 

Navegación

Navegación Meritxell 29 Septiembre, 2014 - 15:53

CurrentMember

CurrentMember Meritxell 2 Octubre, 2014 - 12:18

La función MDX currentmember devuelve el miembro corriente. Esto significa que devolverá el miembro que en ese momento esta seleccionado. Si no existe ningún miembro seleccionado se cogerá el miembro de default, que normalente es ALL. Por tanto, si queremos sacar una medida y no especificamos ninguna dimension siempre nos sacará el miembro de default.

Esta función incluye otra llamada name que nos informa del nombre del miembro corriente.

Un ejemplo de esta funcion usando una Query seria:

select [Dim Cliente].[Zonas Clientes].currentmember on columns
from [Analysis DW]

 

Resultado:

Llamada name

Como podemos ver, el miembro corriente de la dimension cliente es el miembro ALL llamado en este caso Todos los Clientes., que es el miembro por defecto.
 

DefaultMember

DefaultMember Meritxell 2 Octubre, 2014 - 12:18

La función DefaultMember devuelve el miembro por defecto.

Para seguir con el ejemplo anterior, si queremos saber el miembro por defecto de la dimension Cliente haremos lo siguiente:

select [Dim Cliente].[Zonas Clientes].DEFAULTMEMBER on columns
from [Analysis DW]

 

Resultado:

Llamada name

Como podemos ver, es el mismo resultado ya que en este caso el miembro corriente y el miembro de default es el mismo. 

Children

Children Meritxell 2 Octubre, 2014 - 12:19

La función Children de MDX saca a partir de un miembro de una jerarquía todos sus hijos.

Ejemplo:

Se quiere sacar el importe de los pedidos de los hijos de la zona de Barcelona.

select [Dim Cliente].[Zonas Clientes].[Zona].&[1].CHILDREN on rows,
       [Measures].[Importe Pedido] on columns
from [Analysis DW]

 

Resultado:

 

PrevMember

PrevMember Meritxell 2 Octubre, 2014 - 12:21

La función PrevMember de MDX nos devuelve el miembro anterior al seleccionado o CurrentMember.

Ejemplo:

Queremos saber el importe de los pedidos del año 2006 y de su miembro anterior, es decir, del 2005.

Select {([Dim Periodo].[Año - Trimestre - Mes - Fecha Iso].[Año].&[2006],
         [Measures].[Importe Pedido] ),
        ([Dim Periodo].[Año - Trimestre - Mes - Fecha Iso].[Año].&[2006].prevmember,          [Measures].[Importe Pedido])} on columns
from [Analysis DW]

 

Resultado:

 

 

Ascendants

Ascendants Meritxell 2 Octubre, 2014 - 12:23

La función Ascendants de MDX devuelve el conjunto de antecesores de un miembro.

Ejemplo:

Query que devuelve el importe de pedidos por cada uno de los antecesores del mes de marzo del 2006

select ASCENDANTS([Dim Periodo].[Año - Trimestre - Mes - Fecha Iso].
                                [Año].&[2006].&[1.].&[3.]) on columns,
       [Measures].[Importe Pedido] on rows
from [Analysis DW]

 

Resultado:

Función Ascendans

 

Descendants

Descendants Meritxell 2 Octubre, 2014 - 12:24

La función Descendants de MDX devuelve el conjunto de descendientes de un miembro.

Sintaxis:

DESCENDANTS (Miembro, nivel)

Ejemplo:

Importe de los descendientes del año 2006 a nivel de mes, sabiendo que la jeraquia es año-trimestre-mes-fecha

select descendants ([Dim Periodo].[Año - Trimestre - Mes - Fecha Iso].
                                  [Año].&[2006],2) on columns,
       [Measures].[Importe Pedido] on rows
from [Analysis DW]

 

Resultado:

Función descendants

 

Si lo hacemos a nivel de trimestre será:

select descendants ([Dim Periodo].[Año - Trimestre - Mes - Fecha Iso].
                    [Año].&[2006],1) on columns,
       [Measures].[Importe Pedido] on rows
from [Analysis DW]

 

Resultado:

Función Decendants

 

Operadores

Operadores Meritxell 2 Octubre, 2014 - 10:54

Operadores Aritméticos y de conjunto

Operadores Aritméticos y de conjunto Meritxell 2 Octubre, 2014 - 11:18

Operadores Aritméticos y de Conjunto

Los operadores aritméticos son los típicos: +, - , * y /

Tanto el operador + como el – y el *, también son operadores de Conjunto.

La + y la - hacen la unión y la diferencia entre dos conjuntos respectivamente, pero el operador * hace el producto entre dos, pero lo hace para todas las posibles combinaciones entre los conjuntos, es decir,

Si por ejemplo, tienes un conjunto {Barcelona, Girona} y otro {2003, 2004, 2005} y quieres hacer el producto se representará de la siguiente manera:

{Barcelona, Girona} * {2003, 2004, 2005}

Y el comportamiento de este operador será:

{(Barcelona, 2003), (Barcelona, 2004), (Barcelona, 2005), (Girona, 2003), (Girona, 2004), (Girona, 2005)}

Ejemplos de operadores aritméticos:

Operador +

Se quiere unir la ciudad Barcelona con la ciudad Girona usando el operador + la expresión MDX sería:

[Dim Cliente].[Ciudad].&[Barcelona] + {[Dim Cliente].[Ciudad].&[Girona]

El resultado de esta expresión es:

{[Dim Cliente].[Ciudad].&[Barcelona],[Dim Cliente].[Ciudad].&[Girona]}

Para poder ver como se usaría este operador en una Query usamos un conjunto con nombre dentro de la clausula WITH:

with set [Barcelona-Girona] as '{[Dim Cliente].[Ciudad].&[Barcelona]} +
                                {[Dim Cliente].[Ciudad].&[Girona]}'

select [Measures].[Importe Pedido] on columns,
       [Barcelona-Girona] on rows
from [Analysis DW]

 

   

 

Operador *

Se quiere hacer una combinación entre dos conjuntos, por ejemplo, las zonas Barcelona y Girona con las categorías de producto hardware y software:

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

El resultado de esta expresión sería:

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

 

Para poder ver cómo se usaría este operador en una Query usamos un conjunto con nombre dentro de la clausula WITH:

with set [zonas-Productos] as
'{[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
from [Analysis DW]

 

Resultado:

 

En este resultado podemos observar cómo se han hecho todas las posibles combinaciones. Si le ponemos la medida importe veremos cómo por cada combinación, en este caso zona-pedido, se calcula el importe correspondiente.

Para ello, la Query sería:

with set [zonas-Productos] as
  '{[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:

 

Operadores de Comparación

Operadores de Comparación Meritxell 2 Octubre, 2014 - 11:16

Los operadores de comparación de MDX son los habituales: <, <=, >, >=, =, y <>.

Estos operadores comparan dos expresiones MDX y devuelven TRUE o FALSE.

Un ejemplo sería:

Count ([Dim Cliente].[Zonas Clientes].members) > 3

Esto nos diría si el numero de miembros de esta jerarquía es mayor que 3 o no.

 

Operadores lógicos

Operadores lógicos Meritxell 2 Octubre, 2014 - 11:19

Los operadores lógicos en MDX son: AND, OR, XOR, NOT, and IS.

Estos operadores usan dos expresiones MDX como argumentos y devuelven TRUE o FALSE.

 

Operadores Especiales MDX

Operadores Especiales MDX Meritxell 2 Octubre, 2014 - 11:22

Los operadores especiales de MDX son: '{}', comas y ':'

El operador {} permite encapsular una celda o un conjunto de celdas. Si es una única celda el operador es opcional, porque MDX lo pone por defecto.

El operador ‘,’ se usa para separar los diferentes miembros dentro de un conjunto.

Por ejemplo:

{(Barcelona, 2003), (Barcelona, 2004), (Gerona, 2003), (Gerona, 2004)}

El operador ':' se usa para definir rangos. Por tanto, cuando pongamos dos miembros no consecutivos de un conjunto separados por este operador significa que cogera todos los miembros desde el miembro antes del operador hasta el miembro de después del operador.

Ejemplo:

{[Dim Cliente].[Ciudad].&[Barcelona]:[Dim Cliente].[Ciudad].&[Vilafranca]}

Esto nos daria como resultado todas las ciudades que hay entre Barcelona y Vilafranca (ambas incluídas) dentro del cubo.

Para comprobarlo hacemos una Query:

with set [Ciudades] as
  '{[Dim Cliente].[Ciudad].&[Barcelona]:[Dim Cliente].[Ciudad].&[Vilafranca]}'

select ciudades on columns
from [Analysis DW]

 

Resultado:


 

 

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:


 

Funciones de Tiempo

Funciones de Tiempo Meritxell 2 Octubre, 2014 - 11:57

Parallel Period

Parallel Period Meritxell 2 Octubre, 2014 - 11:59

Sintaxis de la función ParallelPeriod de MDX:

PARALLELPERIOD( [«Level»[, «Numeric Expression»[, «Member»] ] ] )

Esta funcion devuelve el periodo paralelo al corriente. Por tanto, dado un nivel de jerarquía, un número y la medida que queremos analizar nos da el valor de la misma medida en el periodo paralelo. Por tanto, si estás sobre el mes irá al mes anterior, si estamos sobre el año te dará el año anterior,...

Ejemplo de la función ParallelPeriod de MDX

Queremos saber el el importe de pedidos para el periodo año, trimestre, mes, fecha del año pasado de los productos.

Esto seria:

(PARALLELPERIOD ([Dim Periodo].[Año - Semana - Fecha Iso].[Año],1,
                                [Dim Periodo].[Año - Semana - Fecha Iso]), [Measures].[Importe Pedido] )

Puedes ir para atrás al mismo periodo de un año o de más de uno.

Configuración de esta función añadiéndola como un miembro calculado dentro del entorno de SSAS

 

Resultado:

 

Year To Date (YTD)

Year To Date (YTD) Meritxell 2 Octubre, 2014 - 12:02

Sintaxis de la función YTD en MDX:

YTD( [«Member»] )

Esta función devuelve un miembro desde el inicio del año hasta ahora.

Si hacemos la YTD a fecha de hoy de los importes, devolverá la suma de los importes desde inicio de año hasta hoy.

Ejemplo de YearToDate en MDX

sum(YTD( [Dim Periodo].[Año - Semana - Fecha Iso] ), [Measures].[Importe Pedido])

Se ha configurado también a través del entorno SSAS que si la cantidad pedida es igual a 1 se pone en rojo el importe y si es mayor se pone en verde. La pantalla de SSAS queda de la siguiente manera:

 

Resultado:

Otras funciones de MDX muy parecidas a YTD son: QTD (Quarter To Date), MTD (Month To Date), WTD (Week To Date)

 

Periods To Date

Periods To Date Meritxell 2 Octubre, 2014 - 12:05

Sintaxis de PeriodsToDate en MDX:

PERIODSTODATE( [«Level»[, «Member»] ] )

Esta función devuelve el conjunto de miembros del nivel especificado que van del primer miembro hasta el especificado.

Ejemplo de PeriodsToDate en MDX

Si queremos sacar el conjunto de miembros del nivel año hasta el mes de Abril de 2006

Sum (PERIODSTODATE( [Dim Periodo].[Año - Trimestre - Mes - Fecha Iso].[Año],
                                      [Dim Periodo].[Año - Trimestre - Mes - Fecha Iso].[Año].&[2006].&[2.].&[4.] ),
                                      [Measures].[Importe Pedido])

 

En SSAS sería:

 

Resultado: