Compartilhar via


Gerenciando escopo e contexto (MDX)

No Microsoft 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 para cálculos em um cubo por meio do uso de etapas de cálculo.

Observação

Para obter mais informações sobre como as aprovações de cálculo podem afetar 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 em um script MDX, use especificamente a instrução CALCULATE, a função This, e a instrução SCOPE.

Usando a declaração CALCULATE

A instrução CALCULATE popula cada célula no cubo com dados agregados. Por exemplo, o script MDX padrão tem 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 que contenha uma instrução CALCULATE, o MDX avaliará a instrução CALCULATE dentro do contexto do subcubo definido pela instrução SCOPE, não em relação ao cubo inteiro.

Usando a função This

A função This permite que você recupere o subcubo atual em um script MDX. Você pode usar a This função para definir rapidamente o valor das células dentro do subcubo atual para uma expressão MDX. Geralmente, você usa a This função 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 que contenha uma This função, o MDX avaliará a This função dentro do contexto do subcubo definido pela instrução SCOPE, não em relação ao cubo inteiro.

Este exemplo de função

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 Finanças do cubo de exemplo Multidimensional 2012 da Adventure Works DW, 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 This função, consulte This (MDX).

Usando a instrução "SCOPE"

A instrução SCOPE define o subcubo atual que contém e especifica o escopo de outras expressões e instruções MDX em um script MDX. O MDX avalia essas outras expressões e instruções MDX, incluindo a This função e a instrução CALCULATE, dentro do contexto do subcubo.

Uma instrução SCOPE é dinâmica, mas não iterativa por natureza. As instruções contidas em uma instrução SCOPE são executadas uma vez, mas o subcubo em si pode ser determinado dinamicamente. Por exemplo, você tem um cubo chamado SampleCube. No cubo SampleCube, você aplica a seguinte instrução SCOPE 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 dentro dessa instrução SCOPE são executadas uma vez.

Agora, um usuário de negócios executa a seguinte consulta MDX que contém uma medida, chamada ExistingMeasure, no cubo SampleCube:

WITH MEMBER [Measures].[NewMeasure] AS '1'

SELECT

[Measures].ALLMEMBERS ON COLUMNS,

[Customer].DEFAULTMEMBER ON ROWS

FROM

[SampleCube]

O conjunto de células retornado da consulta se assemelha à saída mostrada na tabela a seguir.

[ExistingMeasure] [NovaMedida]
[Cliente]. [Todos] 2 2

Examinando o conjunto de células retornado, observe como o valor ExistingMeasure, incluído na instrução SCOPE dentro do script MDX, é atualizado dinamicamente depois que a medida NewMeasure 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 para aninhar instruções SCOPE é subdividir ainda mais um subcubo para 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 Finanças 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 Amount para os filhos do ano civil de 2002. Por fim, a medida Valor é agregada somente para esse subcubo, deixando os valores agregados para a medida Valor inalterados em outros anos de calendário.

/* 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 a Instrução SCOPE (MDX).

Consulte Também

Referência de linguagem MDX (MDX)
O Script Básico de MDX (MDX)
Conceitos básicos da consulta MDX (Analysis Services)