Gerenciando escopo e contexto (MDX)
No Microsoft SQL Server Analysis Services, um script MDX (Multidimensional Expressions) pode ser aplicado ao cubo inteiro ou a partes específicas do cubo, em pontos específicos dentro da execução do script. O script MDX pode adotar uma abordagem em camadas dos cálculos em um cubo usando passagens de cálculo.
Observação
Para obter mais informações sobre como as passagens de cálculo podem afetar os cálculos, consulte Noções básicas sobre ordem de aprovação e ordem de resolução (MDX).
Para controlar a passagem de cálculo, o escopo e o contexto de um script MDX, use especificamente a instrução CACULATE, a função This
e a instrução SCOPE.
Usando a instrução CALCULATE
A instrução CALCULATE preenche cada célula do cubo com dados agregados. Por exemplo, o script MDX padrão possui uma única instrução CALCULATE no início do script.
Para obter mais informações sobre a sintaxe da instrução CALCULATE, consulte Instrução CALCULATE (MDX).
Observação
Se o script contiver uma instrução SCOPE com uma instrução CALCULATE, a linguagem MDX avaliará a instrução CALCULATE no contexto do subcubo definido pela instrução SCOPE e não com relação ao cubo inteiro.
Usando a função This
A função This
permite a recuperação do subcubo atual dentro de um script MDX. Use a função This
para configurar rapidamente o valor de células do subcubo atual para uma expressão MDX. Com frequência, você usará a função This
em conjunto com a instrução SCOPE para alterar o conteúdo de um subcubo específico durante uma passagem de cálculo específica.
Observação
Se o script contiver uma instrução SCOPE com uma função This
, o MDX avaliará a função This
no contexto do subcubo definido pela instrução SCOPE e não com relação ao cubo inteiro.
Exemplo da função This
O exemplo de comando de script MDX a seguir usa a This
função para aumentar o valor da medida Amount, no grupo de medidas Finance do cubo de exemplo Adventure Works DW Multidimensional 2012, para 10% maior para os filhos do membro Redmond na dimensão Customer:
/* This SCOPE statement defines the current subcube */
SCOPE([Customer].&[Redmond].MEMBERS,
[Measures].[Amount], *);
/* This expression sets the value of the Amount measure */
THIS = [Measures].[Amount] * 1.1;
END SCOPE;
Para obter mais informações sobre a sintaxe da This
função, consulte This (MDX).
Usando a instrução SCOPE
A instrução SCOPE define o subcubo atual que contém outras expressões MDX e instruções em um script MDX e especifica seu escopo. A linguagem MDX avalia essas outras expressões e instruções MDX, incluindo a função This
e a instrução CALCULATE, no contexto do subcubo.
Uma instrução SCOPE é dinâmica, mas não é iterativa por natureza. As instruções contidas em uma instrução SCOPO são executadas uma vez, mas o próprio subcubo pode ser determinado dinamicamente. Por exemplo, você tem um cubo chamado CuboExemplo. Ao cubo CuboExemplo, aplica a instrução SCOPE a seguir para definir um subcubo que define o contexto como ALLMEMBERS na dimensão Medidas:
SCOPE([Measures].ALLMEMBERS);
THIS = [Measures].ALLMEMBERS.COUNT;
END SCOPE;
As instruções e expressões dessa instrução SCOPE são executadas uma vez.
Agora, um usuário da empresa executa a consulta MDX a seguir que contém uma medida, chamada MedidaExistente, no cubo de CuboExemplo:
WITH MEMBER [Measures].[NewMeasure] AS '1'
SELECT
[Measures].ALLMEMBERS ON COLUMNS,
[Customer].DEFAULTMEMBER ON ROWS
FROM
[SampleCube]
O conjunto de células retornado pela consulta é semelhante à saída mostrada na tabela a seguir.
[MedidaExistente] | [NovaMedida] | |
---|---|---|
[Cliente]. [Todos] | 2 | 2 |
Analisando o conjunto de células retornado, observe como o valor MedidaExistente, incluído na instrução SCOPE do script MDX, foi atualizado dinamicamente depois que a medida NovaMedida foi definida.
Uma instrução SCOPE pode ser aninhada em outra instrução SCOPE. No entanto, como a instrução SCOPE não é iterativa, a principal finalidade de aninhar instruções SCOPE é subdividir ainda mais um subcubo para um tratamento especial.
Exemplo da instrução SCOPE
O exemplo de script MDX a seguir usa uma instrução SCOPE para definir o valor da medida Amount, no grupo de medidas Finance do cubo de exemplo Adventure Works DW Multidimensional 2012, como 10% maior para os filhos do membro Redmond na dimensão Customer. No entanto, outra instrução SCOPE altera o subcubo para incluir a medida Quantia para os filhos do ano calendário 2002. Por fim, a medida Quantia é agregada somente a esse subcubo, deixando os valores agregados da medida Quantia dos outros anos calendários inalterados.
/* Calculate the entire cube first. */
CALCULATE;
/* This SCOPE statement defines the current subcube */
SCOPE([Customer].&[Redmond].MEMBERS,
[Measures].[Amount], *);
/* This expression sets the value of the Amount measure */
THIS = [Measures].[Amount] * 1.1;
END SCOPE;
Para obter mais informações sobre a sintaxe da instrução SCOPE, consulte Instrução SCOPE (MDX).
Consulte Também
MDX (Referência de Linguagem MDX)
O script básico de MDX (MDX)
Conceitos básicos de consulta MDX (Analysis Services)