INF: MDX: cómo determinar el primer o el último miembro con datos

Resumen

En algunas aplicaciones, resulta útil encontrar al miembro de la primera o la última dimensión que tiene datos asociados con él. En este artículo se ilustra cómo utilizar las funciones HEAD(), TAIL()y UNION() para devolver al primeros y el últimos miembros de una dimensión que tienen datos. El artículo también ilustra el uso de la función NonEmptyCrossJoin() .

Más información

Suponga que su tarea consiste en encontrar al primer y el último miembro de la dimensión de tiempo con los datos del ejemplo FoodMart 2000. Para muchos, el primer pensamiento para buscar al primer miembro con datos sería utilizar la función FirstChild() como sigue:
SELECT   {[Time].FirstChild} ON COLUMNS
FROM SALES

Del mismo modo, lo primero que harían para buscar que el último miembro de la dimensión de tiempo con datos sería utilizar la función LastChild() como sigue:
SELECT   {[Time].[1998].[Q4].LastChild} ON COLUMNS
FROM SALES

La primera consulta de expresión multidimensional (MDX), sin embargo, devuelve el valor asociado a [1997]. [T1] y no el valor asociado a [1997], que es el primer miembro con datos. La segunda consulta MDX devuelve el valor asociado a [1997]. [Q4]. [12], que es el último miembro de la dimensión, pero no el último miembro con datos.

Como alternativa, la función HEAD() devuelve el primer número especificado de elementos de un conjunto y puede utilizarse para devolver al primer miembro de la dimensión. Asimismo, la función TAIL() devuelve un subconjunto del final de un conjunto y puede utilizarse para devolver al último miembro de la dimensión. La consulta MDX que devuelve al primer miembro de la dimensión de tiempo tendría la forma siguiente:
SELECT   HEAD([Time].Members,1) ON COLUMNS
FROM SALES

Esta consulta devuelve 1997 como primer miembro de la dimensión con datos.

La consulta MDX que devuelve al último miembro de la dimensión tendría la forma siguiente:
SELECT   TAIL([Time].Members,1) ON COLUMNS
FROM SALES

Esta consulta MDX devuelve [1998]. [Q4]. [12] como último miembro de la dimensión. Sin embargo, el miembro devuelto no es el último miembro de la dimensión con datos. Para eliminar a los miembros sin datos, se debe utilizar la función NonEmptyCrossJoin() filtra todos los miembros de la dimensión que no tienen datos asociados con ellos.

La consulta MDX para buscar al primer miembro con datos, a continuación, toma la forma
SELECT   HEAD(NonEmptyCrossJoin([Time].Members,1),1) ON COLUMNS
FROM SALES

y la consulta MDX para buscar al último miembro con datos, a continuación, toma la forma:
SELECT   TAIL(NonEmptyCrossJoin([Time].Members,1),1) ON COLUMNS
FROM SALES

A continuación, puede utilizarse la función UNION() para combinar las dos consultas MDX en una sola consulta:
SELECT   UNION(HEAD(NonEmptyCrossJoin([Time].Members,1),1),
TAIL(NonEmptyCrossJoin([Time].Members,1),1)) ON COLUMNS
FROM SALES

Propiedades

Id. de artículo: 301934 - Última revisión: 22 ene. 2017 - Revisión: 2

Comentarios