Usando funções de conjunto

Uma função de conjuntos recupera um conjunto de uma dimensão, hierarquia, nível ou ao percorrer as localizações absolutas e relativas dos membros dentro desses objetos, construindo conjuntos de várias maneiras.

Funções de conjunto, assim como funções membros e funções tupla, são essenciais para negociar as estruturas multidimensionais encontradas nos Serviços de Análise. Funções de conjunto também são essenciais para obter resultados de consultas de Expressões Multidimensionais (MDX) porque expressões de conjunto definem os eixos de uma consulta MDX.

Uma das funções de conjunto mais comuns é a função Members (Set) (MDX ), que recupera um conjunto contendo todos os membros de uma dimensão, hierarquia ou nível. A seguir está um exemplo de seu uso dentro de uma 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]  

Outra função comumente usada é a função Crossjoin (MDX ). Ele retorna um conjunto de tuplas que representam o produto cartesiano dos conjuntos passados nele como parâmetros. Na prática, essa função permite criar eixos 'aninhados' ou 'cruzados' em 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]  

A função Descendentes (MDX) é semelhante à função Filhos , mas é mais poderosa. Ele retorna os descendentes de qualquer membro em um ou mais níveis em uma hierarquia:

SELECT

[Medidas]. [Valor das Vendas pela Internet]

ON Colunas,

Retorna um conjunto contendo todas as Datas abaixo do Ano Civil.

2004 na hierarquia do calendário da dimensão de data

DESCENDENTES(

[Data]. [Calendário]. [Ano Civil].&[2004]

, [Data]. [Calendário]. [Data])

Linhas ON

DE [Adventure Works]

A função Ordem (MDX) permite ordenar o conteúdo de um conjunto em ordem crescente ou descendente de acordo com uma expressão numérica específica. A consulta a seguir retorna os mesmos membros nas linhas da consulta anterior, mas agora os ordena pela medida de Valor de Vendas na 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]  

Essa consulta também ilustra como o conjunto retornado por uma função de conjunto, Descendentes, pode ser passado como um parâmetro para outra função de conjunto, Ordem.

Filtrar um conjunto de acordo com certos critérios é muito útil ao escrever consultas, e para isso você pode usar a função Filter (MDX ), como mostrado no exemplo a seguir:

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]  

Outras funções mais sofisticadas existem que permitem filtrar um conjunto de outras formas. Por exemplo, a consulta a seguir mostra que a função TopCount (MDX) retorna os n principais itens de um 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]  

Por fim, é possível realizar várias operações de conjunto lógico usando funções como Intersect (MDX),Union (MDX) e Except (MDX ). A consulta a seguir mostra exemplos das duas últimas funções:

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]