Compartilhar via


Gerenciando escopo e contexto (MDX)

Aplica-se a: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

No Microsoft SQL Server SQL Server Analysis Services, um script MDX (Expressões Multidimensionais) 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 função This 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 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 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, para 10% maior para os filhos do membro Redmond na 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

MDX (Referência de Linguagem MDX)
O script básico de MDX (MDX)
Conceitos básicos de consulta MDX (Analysis Services)