Compartilhar via


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çãoObservaçã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çãoObservaçã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çãoObservaçã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).