3. Fórmulas y funciones en MDX
3. Fórmulas y funciones en MDX Meritxell 29 Septiembre, 2014 - 11:28Conjunto con nombre (Named Sets)
Conjunto con nombre (Named Sets) Meritxell 29 Septiembre, 2014 - 11:35Un 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:
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:
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:
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:
Miembros Calculados
Miembros Calculados Dataprix 29 Septiembre, 2014 - 15:27Los 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:
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:
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:
Resultado:
Expresiones MDX
Expresiones MDX Meritxell 29 Septiembre, 2014 - 15:33Las 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:
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
Navegación
Navegación Meritxell 29 Septiembre, 2014 - 15:53CurrentMember
CurrentMember Meritxell 2 Octubre, 2014 - 12:18La 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:
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:18La 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:
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:19La 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:21La 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:23La 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:
Descendants
Descendants Meritxell 2 Octubre, 2014 - 12:24La 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:
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:
Operadores
Operadores Meritxell 2 Octubre, 2014 - 10:54Operadores Aritméticos y de conjunto
Operadores Aritméticos y de conjunto Meritxell 2 Octubre, 2014 - 11:18Operadores 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:16Los 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:19Los 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:22Los 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: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:
Funciones de Tiempo
Funciones de Tiempo Meritxell 2 Octubre, 2014 - 11:57Parallel Period
Parallel Period Meritxell 2 Octubre, 2014 - 11:59Sintaxis 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:02Sintaxis 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:05Sintaxis 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: