Usando funções de conjunto

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

As funções de conjuntos, tal como funções membros e funções tupla, são essenciais para negociar as estruturas multidimensionais encontradas nos Serviços de Análise. As funções de conjunto são também essenciais para obter resultados de consultas de Expressões Multidimensionais (MDX) porque as 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. Segue-se um exemplo da sua utilização numa 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 frequentemente utilizada é a função Crossjoin (MDX ). Devolve um conjunto de tuplas que representam o produto cartesiano dos conjuntos que lhe são passados como parâmetros. Em termos práticos, esta função permite-lhe 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. Devolve os descendentes de qualquer membro em um ou mais níveis numa hierarquia:

SELECT

[Medidas]. [Montante de Vendas na Internet]

ON Colunas,

Devolve 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 Order (MDX) permite-lhe ordenar o conteúdo de um conjunto por ordem crescente ou descendente de acordo com uma expressão numérica particular. A consulta seguinte devolve os mesmos membros nas linhas que a consulta anterior, mas agora ordena-os 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]  

Esta consulta também ilustra como o conjunto devolvido de uma função de conjunto, Descendentes, pode ser passado como 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 pode usar a função Filter (MDX ), como mostrado no exemplo seguinte:

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]  

Existem outras funções, mais sofisticadas, que permitem filtrar um conjunto de outras formas. Por exemplo, a consulta seguinte mostra que a função TopCount (MDX) devolve os n primeiros 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]  

Finalmente, é possível realizar várias operações de conjunto lógico usando funções como Intersect (MDX),Union (MDX) e Except (MDX ). A consulta seguinte 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]