Gerenciando escopo e contexto (MDX)
No Microsoft SQL Server Analysis Services, um script de linguagem MDX pode ser aplicado ao cubo inteiro ou a partes específicas dele, a pontos específicos da execução do script. O script MDX pode adotar uma abordagem em camadas dos cálculos em um cubo usando fases de cálculo.
Observação |
---|
Para obter mais informações sobre como as fases de cálculo podem afetar os cálculos, consulte Entendendo a ordem de passagem e a ordem de resolução (MDX). |
Para controlar a fase 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 freqüê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 fase 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 utiliza a função This para aumentar o valor da medida Quantia, no grupo de medidas Finanças do cubo de exemplo Adventure Works DW, em 10% para os filhos do membro Redmond da dimensão Cliente:
/* 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 função This, 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 utiliza uma instrução SCOPE para definir o valor da medida Quantia, do grupo de medidas Finanças do cubo de exemplo Adventure Works DW, 10% mais alto para os filhos do membro Redmond da dimensão Cliente. 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