Uso de funciones de conjunto

Una función de conjunto recupera un conjunto de una dimensión, jerarquía, nivel o recorriendo las ubicaciones absolutas y relativas de los miembros dentro de estos objetos, construyendo conjuntos de diversas maneras.

Las funciones de conjuntos, al igual que las funciones miembro y las funciones tupla, son esenciales para negociar las estructuras multidimensionales que se encuentran en los Servicios de Análisis. Las funciones de conjunto también son esenciales para obtener resultados de consultas de Expresiones Multidimensionales (MDX) porque las expresiones de conjunto definen los ejes de una consulta MDX.

Una de las funciones de conjunto más comunes es la función Members (Set) (MDX ), que recupera un conjunto que contiene todos los miembros de una dimensión, jerarquía o nivel. A continuación se muestra un ejemplo de su uso dentro de una consulta:

SELECT  
//Returns all of the members on the Measures dimension  
[Measures].MEMBERS  
ON Columns,  
//Returns all of the members on the Calendar Year level of the Calendar Year Hierarchy  
//on the Date dimension  
[Date].[Calendar Year].[Calendar Year].MEMBERS  
ON Rows  
FROM [Adventure Works]  

Otra función comúnmente utilizada es la función Crossjoin (MDX ). Devuelve un conjunto de tuplas que representan el producto cartesiano de los conjuntos que se le han pasado como parámetros. En términos prácticos, esta función te permite crear ejes 'anidados' o 'cruzados' en consultas:

SELECT  
//Returns all of the members on the Measures dimension  
[Measures].MEMBERS  
ON Columns,  
//Returns a set containing every combination of all of the members  
//on the Calendar Year level of the Calendar Year Hierarchy  
//on the Date dimension and all of the members on the Category level  
//of the Category hierarchy on the Product dimension  
Crossjoin(  
[Date].[Calendar Year].[Calendar Year].MEMBERS,  
[Product].[Category].[Category].MEMBERS)  
ON Rows  
FROM [Adventure Works]  

La función Descendientes (MDX) es similar a la función Hijos , pero es más poderosa. Devuelve los descendientes de cualquier miembro en uno o más niveles de una jerarquía:

SELECT

[Medidas]. [Importe de ventas de Internet]

ON Columnas,

Devuelve un conjunto que contiene todas las fechas que aparecen debajo del Año Calendario

2004 en la jerarquía del calendario de la dimensión de fecha

DESCENDIENTES (

[Fecha]. [Calendario]. [Año Natural].&[2004]

, [Fecha]. [Calendario]. [fecha])

Filas ON

DE [Adventure Works]

La función de Orden (MDX) permite ordenar el contenido de un conjunto en orden ascendente o descendente según una expresión numérica particular. La siguiente consulta devuelve los mismos miembros en las filas que la consulta anterior, pero ahora los ordena por la medida de Cantidad de Ventas por Internet:

SELECT  
[Measures].[Internet Sales Amount]  
ON Columns,  
//Returns a set containing all of the Dates beneath Calendar Year  
//2004 in the Calendar hierarchy of the Date dimension  
//ordered by Internet Sales Amount  
ORDER(  
DESCENDANTS(  
[Date].[Calendar].[Calendar Year].&[2004]  
, [Date].[Calendar].[Date])  
, [Measures].[Internet Sales Amount], BDESC)  
ON Rows  
FROM [Adventure Works]  

Esta consulta también ilustra cómo el conjunto devuelto por una función de conjunto, Descendentes, puede pasarse como parámetro a otra función de conjunto, Order.

Filtrar un conjunto según ciertos criterios es muy útil al escribir consultas, y para ello puedes usar la función Filter (MDX ), como se muestra en el siguiente ejemplo:

SELECT  
[Measures].[Internet Sales Amount]  
ON Columns,  
//Returns a set containing all of the Dates beneath Calendar Year  
//2004 in the Calendar hierarchy of the Date dimension  
//where Internet Sales Amount is greater than $70000  
FILTER(  
DESCENDANTS(  
[Date].[Calendar].[Calendar Year].&[2004]  
, [Date].[Calendar].[Date])  
, [Measures].[Internet Sales Amount]>70000)  
ON Rows  
FROM [Adventure Works]  

Existen otras funciones más sofisticadas que permiten filtrar un conjunto de otras maneras. Por ejemplo, la siguiente consulta muestra que la función TopCount (MDX) devuelve los n primeros n elementos de un conjunto:

SELECT  
[Measures].[Internet Sales Amount]  
ON Columns,  
//Returns a set containing the top 10 Dates beneath Calendar Year  
//2004 in the Calendar hierarchy of the Date dimension by Internet Sales Amount  
TOPCOUNT(  
DESCENDANTS(  
[Date].[Calendar].[Calendar Year].&[2004]  
, [Date].[Calendar].[Date])  
,10, [Measures].[Internet Sales Amount])  
ON Rows  
FROM [Adventure Works]  

Finalmente, es posible realizar varias operaciones de conjuntos lógicos usando funciones como Intersect (MDX),Union (MDX) y Except (MDX ). La siguiente consulta muestra ejemplos de estas dos últimas funciones:

SELECT  
//Returns a set containing the Measures Internet Sales Amount, Internet Tax Amount and  
//Internet Total Product Cost  
UNION(  
{[Measures].[Internet Sales Amount], [Measures].[Internet Tax Amount]}  
, {[Measures].[Internet Total Product Cost]}  
)  
ON Columns,  
//Returns a set containing all of the Dates beneath Calendar Year  
//2004 in the Calendar hierarchy of the Date dimension  
//except the January 1st 2004  
EXCEPT(  
DESCENDANTS(  
[Date].[Calendar].[Calendar Year].&[2004]  
, [Date].[Calendar].[Date])  
,{[Date].[Calendar].[Date].&[915]})  
ON Rows  
FROM [Adventure Works]