Principais conceitos em MDX (MDX)
Você pode usar MDX (Multidimensional Expressions) para consultar dados multidimensionais ou criar linguagens MDX para uso em um cubo, mas primeiro você precisa entender os conceitos e a terminologia do MicrosoftSQL ServerAnalysis Services. A seção a seguir fornece uma descrição rápida sobre terminologia e conceitos básicos de modelagem dimensional de que você precisa. As seções a seguir ilustram como aplicar esses conceitos.
Para obter mais informações, consulte a seção Recursos adicionais na página SQL Server 2005 – Analysis Services no site da Microsoft TechNet. Para obter mais informações sobre questões de desempenho relacionadas a cálculos e consultas MDX, consulte a seção “Writing Efficient MDX” no SQL Server 2005 Analysis Services Performance Guide.
Termos e conceitos de modelagem dimensional
Um cubo do MicrosoftSQL ServerAnalysis Services é organizado com base em medidas, dimensões e atributos de dimensão. A tabela a seguir descreve os termos e conceitos de modelagem dimensional que você precisa entender para trabalhar com a linguagem de expressão MDX.
Dimensão do banco de dados
Uma dimensão do banco de dados é uma coleção de atributos de dimensão relacionados a um atributo de chave, que, por sua vez, é relacionado a fatos na dimensão de medidas.Atributo de dimensão
Um atributo de dimensão é associado a uma ou mais colunas em uma tabela de dimensões e contém membros. Um atributo de dimensão pode conter nomes de cliente, nomes de mês e nomes de produto.Membro
Um membro é um valor de um atributo de dimensão, incluindo a dimensão de medidas. Um membro em uma hierarquia pode ser um membro folha, um membro pai, um membro de dados ou um membro (All).Medida
Uma medida é um valor de uma tabela de fatos, também chamada de fato. Às vezes, um valor na dimensão de medidas também é genericamente chamado um membro. Geralmente as medidas são valores numéricos, mas também podem ser valores de cadeia de caracteres.Dimensão de medidas
Uma dimensão de medidas é a dimensão que contém todas as medidas em um cubo. Uma dimensão de medidas é um tipo especial de dimensão onde os membros normalmente são agregados (geralmente por soma ou por contagem) com base no membro atual de cada atributo de dimensão com o qual existe uma medida especificada.Grupo de medidas
Um grupo de medidas é uma coleção de medidas relacionadas em um cubo no SQL Server Analysis Services (geralmente medidas da mesma tabela de fatos). No SQL Server Analysis Services, um cubo pode conter vários grupos de medidas.Membro (All)
O Membro (All) é o valor calculado de todos os membros em uma hierarquia de atributo ou em uma hierarquia definida pelo usuário.Membro calculado
Um membro calculado é um membro de dimensão definido e calculado na hora da consulta. Um membro calculado pode ser definido como uma consulta de usuário ou como script de cálculo MDX e armazenado no servidor. Um membro calculado corresponde a filas na tabela de dimensão na dimensão onde elas estão definidas.Membro de dados
Um membro de dados é um membro filho associado a um membro pai em uma hierarquia pai-filho. Um membro de dados contém o valor de dados para seu membro pai, em vez do valor agregado dos filhos do pai.Membro pai
Um membro pai é um membro de uma hierarquia pai-filho que contém o valor agregado de seus filhos.Membro folha
Um membro folha é um membro de uma hierarquia que não tem filho.Membro filho
Um membro filho é um membro em uma hierarquia abaixo do nível superior.Atributo de chave
O atributo de chave de uma dimensão de banco de dados é o atributo ao qual todos os atributos não-chave na dimensão são vinculados (direta ou indiretamente). O atributo de chave também é muitas vezes o atributo de granularidade.Atributo de granularidade
O atributo de uma dimensão de cubo que vincula uma dimensão aos fatos em um grupo de medidas na dimensão de medidas. Se o atributo de granularidade e o atributo de chave forem diferentes, os atributos não-chave deverão ser vinculados, direta ou indiretamente, ao atributo de granularidade. Dentro de um cubo, o atributo de granularidade define a granularidade de uma dimensão.Dimensão do cubo
Uma dimensão do cubo é uma instância de uma dimensão de banco de dados em um cubo.Hierarquia de atributo
Uma hierarquia de atributo é uma hierarquia de membros de atributo que contém os seguintes níveis:Um nível folha que contém cada membro distinto de atributo, com cada membro do nível folha também conhecido como um membro folha.
Níveis intermediários se a hierarquia de atributo for uma hierarquia pai-filho.
Um nível (All) opcional (IsAggregatable=True) que contém o valor agregado dos membros folha da hierarquia de atributo, com o membro do nível (All) também conhecido como o membro (All).
Por padrão, uma hierarquia de atributo está definida para cada atributo de dimensão (AttributeHierarchyEnabled=True). Hierarquias de atributo são visíveis por padrão (AttributeHierarchyVisible=True).
Hierarquia equilibrada
Uma hierarquia equilibrada é uma hierarquia onde o mesmo número de níveis existe entre o nível superior e qualquer membro folha.Hierarquia desbalanceada
Consulte hierarquia desbalanceada.Hierarquia desbalanceada
Uma hierarquia desbalanceada é uma hierarquia onde existem diferentes números de níveis entre o nível superior e o nível folha. Um exemplo de uma hierarquia desbalanceada é uma hierarquia pai-filho. Uma hierarquia desbalanceada também é chamada de hierarquia desbalanceada.Hierarquia pai-filho
Uma hierarquia pai-filho é um tipo especial de hierarquia de atributo onde um atributo na dimensão é definido como tipo parent. Uma hierarquia pai-filho é uma hierarquia desbalanceada de membros pai e filho. Uma hierarquia pai-filho contém os seguintes níveis:Níveis filho que contêm filhos de membros pai. Os filhos de um pai incluem os membros de atributo que agregam ao membro pai, incluindo membros de dados.
Níveis intermediários que contêm membros pai.
Um nível (All) opcional (IsAggregatable=True) que contém o valor agregado dos membros folha das hierarquias pai-filho, com o membro do nível (All) também conhecido como o membro (All).
Somente uma hierarquia pai-filho pode existir por dimensão e deve ser relacionada ao atributo de chave.
Hierarquia definida pelo usuário
Uma hierarquia definida pelo usuário é uma hierarquia equilibrada de hierarquias de atributo usada para facilitar a procura de dados de cubo pelos usuários. Hierarquias definidas pelo usuário não são adicionadas ao espaço do cubo. Os níveis em uma hierarquia definida pelo usuário podem ser ocultados em certas circunstâncias, e podem parecer estar desbalanceados.Relação de atributo
Uma relação de atributo é uma relação entre atributos de um para muitos, por exemplo, uma relação entre um atributo de dimensão de um estado e uma cidade.Propriedade do membro
Uma propriedade do membro é uma propriedade de um membro de atributo, por exemplo, o sexo de um cliente ou a cor de um produto.Célula
Uma célula em um cubo é o espaço existente na interseção de um membro do membro de dimensão de medidas e um membro de cada hierarquia de atributo em um cubo.Um membro da dimensão de medidas pode ser um membro folha (um fato individual) ou um membro agregado (por exemplo, vendas agregadas durante um ano específico).
Um membro de uma dimensão pode ser um membro folha, um membro de dados, um membro pai, ou um membro (All).
Espaço de Cubo
Espaço de cubo é o produto dos membros das hierarquias de atributo de um cubo com as medidas do cubo.Subcubo
Um subcubo é um subconjunto de um cubo que representa uma exibição filtrada do cubo. Subcubos podem ser definidos com uma instrução de Escopo no script de cálculo MDX ou em cláusula de subseleções em uma consulta MDX.Subcubo com subseleção
Um subcubo definido com uma cláusula de subseleção em uma consulta MDX inclui todos os membros existentes com a definição do subcubo, com as seguintes conseqüências:Incluir um membro (All) de uma hierarquia é o mesmo do que incluir cada membro folha da hierarquia.
Incluir qualquer membro inclui seus ascendentes e descendentes.
Incluir cada membro de um nível em uma hierarquia definida pelo usuário inclui todos os membros da hierarquia definida pelo usuário, mas pode excluir membros de outras hierarquias que não existem com membros do nível (como uma cidade que não contém clientes).
Cada membro (All) no cubo sempre existe em subcubos criados a partir do cubo.
Valores agregados dentro de um subcubo são visualmente totalizados.
Tuplas
Uma tupla identifica exclusivamente uma célula, com base em uma combinação de membros de atributo que consistem em um atributo de cada hierarquia de atributo no cubo. Ao definir uma tupla em uma consulta ou expressão MDX, você não precisa explicitamente incluir o membro de atributo de cada hierarquia de atributo. Se um membro de uma hierarquia de atributo não for explicitamente incluído em uma consulta ou em uma expressão, o membro padrão para aquela hierarquia de atributo será o membro de atributo implicitamente incluso na tupla. Salvo indicação contrária explicitamente definida em um cubo, o membro padrão para cada hierarquia de atributo é o membro (All), se houver um membro (All). Se não houver um membro (All) em uma hierarquia de atributo, o membro padrão será um membro do nível superior da hierarquia de atributo. A medida padrão é a primeira medida especificada no cubo, salvo se uma medida padrão estiver explicitamente definida. Para obter mais informações, consulte Definindo um membro padrão e DefaultMember (MDX).
Por exemplo, a tupla a seguir identifica uma célula única no banco de dados do Adventure Works, definindo explicitamente um membro único da dimensão Medidas.
(Measures.[Reseller Sales Amount])
O exemplo anterior identifica exclusivamente a célula que consiste no membro Valor das Vendas do Revendedor da dimensão Medidas e o membro padrão de cada hierarquia de atributo no cubo. O membro padrão é o membro (All) para cada hierarquia de atributo diferente da hierarquia de atributo Moeda de Destino. O membro padrão da hierarquia Moeda de Destino é o membro Dólar (EUA) (esse membro padrão está definido no script MDX no cubo Adventure Works).
Importante |
---|
O membro de uma hierarquia de atributo em uma tupla também é afetado por relações definidas entre atributos dentro de uma dimensão. Para obter mais informações, consulte Relações de atributo e espaço de cubo a seguir. |
A consulta a seguir retorna o valor da célula referenciada pela tupla especificada no exemplo anterior ($80.450.596,98).
SELECT
Measures.[Reseller Sales Amount] ON COLUMNS
FROM [Adventure Works]
Observação |
---|
Quando você especifica um eixo para um conjunto (nesse caso, composto por uma tupla única) em uma consulta, você deve começar especificando um conjunto para o eixo da coluna antes de especificar um conjunto para o eixo de linhas. O eixo da coluna também pode ser referido como eixo (0) ou simplesmente 0. Para obter mais informações sobre consultas MDX, consulte A consulta básica de MDX (MDX). |
Você pode usar uma tupla em uma consulta para retornar o valor na célula que é referenciado pela tupla, como no exemplo anterior. Ou você pode usar uma tupla em uma expressão para explicitamente se referir aos membros especificados na tupla. A consulta ou a expressão podem utilizar funções que retornam ou consomem tuplas. Uma tupla pode ser usada para se referir ao valor da célula que a tupla especifica, ou especificar uma combinação de membros, quando utilizada em uma função.
A dimensionalidade de uma tupla se refere à seqüência ou ordem dos membros na tupla. Como os membros implícitos sempre ocorrem na mesma ordem, na maioria das vezes a dimensionalidade é considerada em termos dos membros explicitamente definidos da tupla. A ordenação dos membros da tupla é importante quando você define um conjunto de tuplas. O exemplo a seguir inclui dois membros em uma tupla no eixo da coluna.
SELECT
([Measures].[Reseller Sales Amount],[Date].[Calendar Year].[CY 2004]) ON COLUMNS
FROM [Adventure Works]
Observação |
---|
Quando você especificar explicitamente um membro em uma tupla de mais de uma dimensão, você deve incluir toda a tupla entre parênteses. Ao especificar somente um membro único em uma tupla, os parênteses são opcionais. |
A tupla na consulta no exemplo anterior especifica o retorno da célula do cubo na interseção da Medida do Valor das Vendas do Revendedor da dimensão Medidas e o membro CY 2004 da hierarquia de atributo Ano Civil na dimensão Data.
Observação |
---|
Um membro de atributo pode ser referido por seu nome de membro ou sua chave de membro. No exemplo anterior, você poderia substituir a referência [CY 2004] por &[2004]. |
Conjuntos
Um conjunto é um conjunto ordenado de tuplas com a mesma dimensionalidade. A seguir, é mostrado um exemplo de um conjunto.
SELECT
{
([Measures].[Reseller Sales Amount],
[Date].[Calendar Year].[CY 2003]),
([Measures].[Reseller Sales Amount],
[Date].[Calendar Year].[CY 2004])
} ON COLUMNS
FROM [Adventure Works]
Observação |
---|
Use chaves {} para designar um conjunto de tuplas. |
No exemplo anterior, cada tupla no conjunto tem a mesma dimensionalidade porque o primeiro membro de cada tupla é um membro da dimensão Medidas e o segundo membro de cada tupla é um membro da hierarquia de atributo Ano Civil. Se o segundo membro de qualquer tupla fosse de uma hierarquia de atributo diferente na dimensão Data (como Mês do Calendário), você receberia um erro se referindo à diferença na dimensionalidade.
Dica |
---|
Você pode criar um conjunto com um alias, referido como conjunto nomeado. Usar um conjunto nomeado facilita o entendimento da consulta MDX ou a nova utilização quando se trabalha com expressões MDX complexas. Para usar um conjunto nomeado, use a palavra "AS" seguida do nome do alias desejado depois do final do identificador do conjunto. |
Espaço de cubo e Autoexists
Anteriormente neste tópico, definimos espaço de cubo como o produto dos membros de suas hierarquias de atributo. O conceito de Autoexists limita esse espaço de cubo às células que realmente existem. É possível que membros de uma hierarquia de atributo em uma dimensão não existam com membros de outra hierarquia de atributo na mesma dimensão.
Por exemplo, se você tiver um cubo com uma hierarquia de atributo Cidade, uma hierarquia de atributo País, e uma medida Valor de Vendas pela Internet, o espaço desse cubo somente vai incluir os membros que existem um com o outro. Por exemplo, se a hierarquia de atributo Cidade incluir as cidades de Nova Iorque, Londres, Paris, Tóquio e Melbourne; e a hierarquia de atributo País incluir os países Estados Unidos, Reino Unido, França, Japão e Austrália; o espaço do cubo não incluirá o espaço (célula) na interseção Paris e Estados Unidos.
Ao consultar células que não existem, as células inexistentes retornarão nulas; ou seja, elas não poderão conter cálculos e você não poderá definir um cálculo que seja gravado nesse espaço. Por exemplo, a instrução a seguir inclui células que não existem.
SELECT [Customer].[Gender].[Gender].Members ON COLUMNS,
{[Customer].[Customer].[Aaron A. Allen]
,[Customer].[Customer].[Abigail Clark]} ON ROWS
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
Observação |
---|
Essa consulta usa a função Membros (Conjunto) (MDX) para retornar o conjunto de membros da hierarquia de atributo Sexo no eixo da coluna, e cruza esse conjunto com o conjunto especificado de membros da hierarquia de atributo Cliente no eixo de linhas. |
Quando você executa a consulta anterior, a célula na interseção Aaron A. Allen e Feminino exibe um valor nulo. Similarmente, a célula na interseção Abigail Clark e Masculino exibe um valor nulo. Essas células não existem e não podem conter um valor, mas as células que não existem podem aparecer no resultado retornado por uma consulta.
Quando você usa a função Crossjoin (MDX) para retornar o produto vetorial de membros de hierarquia de atributo de hierarquias de atributo na mesma dimensão, o Autoexists limita as tuplas que são retornadas ao conjunto de tuplas que realmente existem, em vez de retornar um produto Cartesiano completo. Por exemplo, execute e examine os resultados da execução da consulta a seguir.
SELECT CROSSJOIN
(
{[Customer].[Country].[United States]},
[Customer].[State-Province].Members
) ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
Observação |
---|
Note que 0 é usado para designar o eixo da coluna, que é a forma abreviada de eixo (0) – que é o eixo da coluna. |
A consulta anterior somente retorna células para membros de cada hierarquia de atributo na consulta que existe um com o outro. A consulta anterior também pode ser escrita usando a nova * variante da função * (Crossjoin) (MDX).
SELECT
[Customer].[Country].[United States] *
[Customer].[State-Province].Members
ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
A consulta anterior também poderia ser escrita da seguinte forma:
SELECT [Customer].[State-Province].Members
ON 0
FROM [Adventure Works]
WHERE (Measures.[Internet Sales Amount],
[Customer].[Country].[United States])
Os valores das células retornadas serão idênticos, apesar de os metadados no conjunto de resultados serem diferentes. Por exemplo, com a consulta anterior, a hierarquia País foi movida para o eixo do slicer (na cláusula WHERE) e, portanto, não aparece explicitamente no conjunto de resultados.
Cada uma dessas três consultas anteriores demonstra o efeito do comportamento Autoexists no SQL ServerAnalysis Services.
Hierarquias definidas pelo usuário e espaço do cubo
Os exemplos anteriores deste tópico definem posições no espaço do cubo, usando hierarquias de atributo. Porém, você também pode definir uma posição no espaço do cubo usando hierarquias definidas pelo usuário que foram definidas com base em hierarquias de atributo em uma dimensão. Uma hierarquia definida pelo usuário é uma hierarquia das hierarquias de atributo planejada para facilitar a procura de dados de cubo pelos usuários.
Por exemplo, a consulta CROSSJOIN na seção anterior também poderia ter sido escrita conforme apresentado a seguir:
SELECT CROSSJOIN
(
{[Customer].[Country].[United States]},
[Customer].[Customer Geography].[State-Province].Members
)
ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
Na consulta anterior, a hierarquia Geografia do Cliente definida pelo usuário dentro da dimensão Cliente é usada para definir a posição no espaço do cubo que foi anteriormente definida usando uma hierarquia de atributo. A posição idêntica no espaço do cubo pode ser definida usando hierarquias de atributo ou hierarquias definidas pelo usuário.
Relações de atributo e espaço de cubo
Definindo relações de atributo entre atributos relacionados aprimora o desempenho da consulta (facilitando a criação de agregações apropriadas) e afeta o membro de uma hierarquia de atributo relacionada que aparece com um membro de hierarquia de atributo. Por exemplo, quando você define uma tupla que inclui um membro da hierarquia de atributo Cidade e a tupla não define explicitamente o membro da hierarquia de atributo País, você poderia esperar que o membro padrão da hierarquia de atributo País seria o membro relacionado da hierarquia de atributo País. Porém, isso só ocorrerá se uma relação de atributo estiver definida entre a hierarquia de atributo Cidade e a hierarquia de atributo País.
O exemplo a seguir retorna o membro de uma hierarquia de atributo relacionada que não está explicitamente incluído na consulta.
WITH MEMBER Measures.x AS
Customer.Country.CurrentMember.Name
SELECT Measures.x ON 0,
Customer.City.Members ON 1
FROM [Adventure Works]
Observação |
---|
Note que a WITH palavra-chave é usada com as funções CurrentMember (MDX) e Name (MDX) para criar um membro calculado para uso na consulta. Para obter mais informações, consulte A consulta básica de MDX (MDX). |
Na consulta anterior, o nome do membro da hierarquia de atributo País que está associado a cada membro da hierarquia de atributo Estado é retornado. O membro País esperado é exibido (porque uma relação de atributo está definida entre os atributos Cidade e País). Porém, se nenhuma relação de atributo estivesse definida entre hierarquias de atributo na mesma dimensão, o membro (All) seria retornado, conforme ilustrado na consulta a seguir.
WITH MEMBER Measures.x AS
Customer.Education.Currentmember.Name
SELECT Measures.x ON 0,
Customer.City.Members ON 1
FROM [Adventure Works]
Na consulta anterior, é retornado o membro (All) ("Todos os Clientes"), porque não existe nenhuma relação entre Educação e Cidade. Portanto, o membro (All) da hierarquia de atributo Educação seria o membro padrão da hierarquia de atributo Educação usado em qualquer tupla envolvendo a hierarquia de atributo Cidade onde um membro Educação não é explicitamente fornecido.
Contexto de cálculo
Cada conjunto, membro, tupla, ou função numérica é executado no contexto de toda a expressão ou instrução MDX. Quando um argumento, como uma tupla, é transmitido para uma função, somente algumas coordenadas no espaço do cubo são explicitamente fornecidas. As outras coordenadas são obtidas com base no contexto de cálculo atual. O contexto de cálculo para coordenadas de célula não especificada e membros de atributo é determinado na seguinte ordem:
A cláusula FROM (se aplicável) – essa cláusula pode especificar um cubo inteiro ou pode especificar um subcubo na forma de uma instrução SELECT.
A cláusula WHERE (se aplicável) – essa cláusula, também conhecida como eixo do slicer, onde você especifica um conjunto, tupla ou membro que restringe os membros retornados no eixo da coluna e eixo de linhas em uma consulta. Conceitualmente, o membro padrão de cada hierarquia de atributo que não é especificado explicitamente no eixo da coluna ou no eixo de linhas faz parte do eixo do slicer.
Observação Quando as coordenadas da célula de um atributo específico são especificadas no eixo do slicer e em outro eixo, as coordenadas especificadas na função podem ter prioridade ao determinar os membros do conjunto no eixo. As funções Filter (MDX) e Order (MDX) são exemplos dessas funções – você pode filtrar ou pode ordenar um resultado por membros de atributo que são excluídos do contexto de cálculo pela cláusula WHERE, ou por uma instrução SELECT na cláusula FROM.
Os conjuntos nomeados e membros calculados definidos na consulta ou na expressão.
As tuplas e conjuntos especificados nos eixos de linhas e da coluna, utilizando o membro padrão para atributos que não aparecem no eixo de linha, coluna ou do slicer.
As células de cubo ou subcubo em cada eixo, eliminando tuplas vazias no eixo e aplicando a cláusula HAVING.
Para obter mais informações, consulte Estabelecendo o contexto de cubo em uma consulta (MDX).
Na consulta a seguir, o contexto de cálculo para o eixo de linha é restrito pelo membro de atributo País e pelo membro de atributo Ano Civil que são especificados na cláusula WHERE.
SELECT Customer.City.City.Members ON 0
FROM [Adventure Works]
WHERE (Customer.Country.France, [Date].[Calendar].[Calendar Year].[CY 2004],
Measures.[Internet Sales Amount])
- Porém, se você modificar essa consulta especificando a função FILTER no eixo de linhas, e utilizar um membro de hierarquia de atributo Ano Civil na função FILTER, o membro de atributo da hierarquia de atributo Ano Civil que é usada para fornecer o contexto de cálculo aos membros do conjunto no eixo da coluna poderá ser modificado.
SELECT FILTER
(
Customer.City.City.Members,
([Date].[Calendar].[Calendar Year].[CY 2003],
Measures.[Internet Order Quantity]) > 75
) ON 0
FROM [Adventure Works]
WHERE (Customer.Country.France,
[Date].[Calendar].[Calendar Year].[CY 2004],
Measures.[Internet Sales Amount])
- Na consulta anterior, o contexto de cálculo para as células nas tuplas que aparecem no eixo da coluna é filtrado pelo membro CY 2003 da hierarquia de atributo Ano Civil, mesmo se o contexto de cálculo nominal da hierarquia de atributo Ano Civil for CY 2004. Além disso, o contexto é filtrado pela medida Quantidade de Pedidos pela Internet. No entanto, assim que os membros do conjunto no eixo da coluna forem definidos, o contexto de cálculo dos valores dos membros que aparecem no eixo é novamente determinado pela cláusula WHERE.
Importante |
---|
Para aprimorar o desempenho da consulta, você deve eliminar membros e tuplas no processo de resolução assim que possível. Dessa forma, cálculos complexos de tempo de consulta no conjunto final de membros operam com o menor número possível de células. |
Importante |
---|
O passagem e a ordem de resolução nas quais as expressões são avaliadas são relevantes para o valor final de uma expressão. Consulte Entendendo a ordem de passagem e a ordem de resolução (MDX) para obter mais informações sobre como esses valores podem afetar os cálculos. |
Consulte também