Especificando o conteúdo de um eixo de consulta (MDX)

Eixos de consulta especificam as extremidades de um conjunto de células retornadas por uma instrução MDX SELECT. Especificar as extremidades de um conjunto de células permitir restringir os dados retornados que ficam visíveis ao cliente.

Para especificar eixos de consulta, use a <SELECT query axis clause> para atribuir um conjunto a um eixo de consulta em particular. Cada valor da <SELECT query axis clause> define um eixo de consulta. O número de eixos do conjunto de dados é igual ao número de valores da <SELECT query axis clause> na instrução SELECT.

Sintaxe do eixo de consulta

A sintaxe a seguir mostra a sintaxe da <SELECT query axis clause>:

<SELECT query axis clause> ::=
   [ NON EMPTY ] Set_Expression [ <SELECT dimension property list clause> ] [<HAVING clause>]
   ON {
      Integer_Expression | 
      AXIS( Integer_Expression ) | 
      {COLUMNS | ROWS | PAGES | SECTIONS | CHAPTERS}   
      }
      

Cada eixo de consulta possui um número: zero (0) para o eixo x, 1 para o eixo y, 2 para o eixo z e assim por diante. Na sintaxe da <SELECT query axis clause>, o valor Integer_Expression especifica o número do eixo. Uma consulta MDX comporta até 128 eixos especificados, mas bem poucas consultas MDX usarão mais de 5 eixos. Para os primeiros 5 eixos, podem ser usados os aliases COLUMNS, ROWS, PAGES, SECTIONS e CHAPTERS.

Uma consulta MDX não pode ignorar eixos de consulta. Ou seja, uma consulta que contém um ou mais eixos de consultas não deve excluir eixos intermediários ou de baixa numeração. Por exemplo, uma consulta não pode ter um eixo ROWS sem um eixo COLUMNS nem os eixos COLUMNS e PAGES sem um eixo ROWS.

Contudo, você pode especificar uma cláusula SELECT sem eixos (ou seja, uma cláusula SELECT vazia). Nesse caso, todas as dimensões são dimensões de segmentação de dados e a consulta MDX seleciona uma célula.

Na sintaxe do eixo de consulta mostrada anteriormente, cada valor Set_Expression especifica o conjunto que define o conteúdo do eixo de consulta. Para obter mais informações sobre conjuntos, consulte Trabalhando com membros, tuplas e conjuntos (MDX).

Exemplos

A instrução SELECT simples a seguir retorna a medida Valor de Vendas pela Internet no eixo Colunas e usa a função MDX MEMBERS para retornar todos os membros da hierarquia Calendário na dimensão Data no eixo Linhas:

SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
{[Date].[Calendar].MEMBERS} ON ROWS
FROM [Adventure Works]

As duas consultas a seguir retornam exatamente os mesmos resultados, mas demonstra o uso de números de eixo em vez de aliases:

SELECT {[Measures].[Internet Sales Amount]} ON 0,
{[Date].[Calendar].MEMBERS} ON 1
FROM [Adventure Works]

SELECT {[Measures].[Internet Sales Amount]} ON AXIS(0),
{[Date].[Calendar].MEMBERS} ON AXIS(1)
FROM [Adventure Works]

A palavra-chave NON EMPTY, usada antes da definição configurada, é uma maneira fácil de remover todas as tuplas vazias de um eixo. Por exemplo, nos exemplos que vimos até o momento não há dados no cubo de agosto de 2004 em diante. Para remover todas as linhas do conjunto de células que não têm dados em qualquer coluna, basta adicionar NON EMPTY antes do conjunto na definição de eixo Linhas como segue:

SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
NON EMPTY
{[Date].[Calendar].MEMBERS} ON ROWS
FROM [Adventure Works]

NON EMPTY pode ser usado em todos os eixos em uma consulta. Compare os resultados das duas consultas a seguir, a primeira não usa NON EMPTY e a segunda usa em ambos os eixos:

SELECT {[Measures].[Internet Sales Amount]} 
* [Promotion].[Promotion].[Promotion].MEMBERS
ON COLUMNS,
{[Date].[Calendar].[Calendar Year].MEMBERS} ON ROWS
FROM [Adventure Works]
WHERE([Product].[Subcategory].&[19])

SELECT NON EMPTY {[Measures].[Internet Sales Amount]} 
* [Promotion].[Promotion].[Promotion].MEMBERS
ON COLUMNS,
NON EMPTY
{[Date].[Calendar].[Calendar Year].MEMBERS} ON ROWS
FROM [Adventure Works]
WHERE([Product].[Subcategory].&[19])

A cláusula HAVING pode ser usada para filtrar o conteúdo de um eixo com base em critérios específicos; é menos flexível que outros métodos que podem obter os mesmos resultados, como a função FILTER, mas é mais simples de usar. Este é um exemplo que retorna somente as datas em que o Valor de Vendas pela Internet é maior que $ 15.000:

SELECT {[Measures].[Internet Sales Amount]} 
ON COLUMNS,
NON EMPTY
{[Date].[Calendar].[Date].MEMBERS} 
HAVING [Measures].[Internet Sales Amount]>15000
ON ROWS
FROM [Adventure Works]