Definindo atribuições no escopo usando comandos de script
No Analysis Services, um script MDX (Multidimensional Expressions) pode ser aplicado ao cubo inteiro ou a determinadas seções dele em pontos específicos da execução do script. Você já aprendeu o comando de script padrão, a instrução CALCULATE, que popula as células no cubo com dados agregados com base no escopo padrão.
O escopo padrão é o cubo inteiro, mas, como mencionado anteriormente nesse tópico, você pode usar a instrução SCOPE para definir um escopo mais limitado, conhecido como subcubo, e então aplicar um script MDX a apenas aquele espaço específico do cubo. A instrução SCOPE define o escopo de todas as expressões MDX subsequentes e instruções no script de cálculo até que o escopo atual seja finalizado ou escopado novamente. A instrução THIS é então usada para aplicar uma expressão MDX ao escopo atual. Você pode usar a instrução BACK_COLOR para especificar uma cor de fundo para as células no escopo atual para ajudá-lo durante a depuração.
Nas tarefas deste tópico, você usar as instruções SCOPE e THIS para definir cotas de vendas para cada trimestre fiscal do ano fiscal de 2005. Depois, você alocará cotas de vendas ao nível de mês para todos os anos fiscais no cubo. Você também aprenderá a usar pontos de interrupção para ajudá-lo a depurar o script de cálculo.
Revisando alocação de cotas do valor de vendas por Data e Funcionário
Para revisar a alocação de cotas do valor de vendas por data e funcionário
Abra o Designer de Cubo para o cubo do Tutorial do Analysis Services e depois clique na guia Navegador.
Remova todas as hierarquias e medidas do painel Dados e remova todos os membros de dimensão do painel Filtro.
Adicione a medida Cota do Valor de Vendas do grupo de medidas Cotas de Vendas à área de dados do painel Dados.
Adicione a hierarquia definida pelo usuário Data Fiscal da dimensão Data à área de coluna.
Adicione a hierarquia de atributo Nome do Funcionário da dimensão Funcionário à área de linha.
Observe que nenhum valor de cota de vendas foi definido para ano fiscal de 2005.
Na área de coluna, clique no botão de seta ao lado de Ano Fiscal, desmarque as caixas de seleção ao lado de FY 2002 e FY 2003 e, em seguida, clique em OK.
Na área de coluna, expanda FY2004, H2 FY 2004 e Q4 FY 2004.
Observe que a cota do valor de vendas para cada mês fiscal do trimestre fiscal é igual à cota do valor de vendas para o trimestre fiscal. Isso acontece porque a granulação da dimensão de tempo no grupo de medidas Cota de Vendas é o nível trimestral, como discutido na Lição 5.
A imagem a seguir mostra a cota de vendas para cada funcionário que possui uma cota de vendas para cada mês do quarto trimestre do ano fiscal de 2004:
Definindo o escopo para o cálculo da cota do valor de vendas do ano fiscal de 2005
Nesta tarefa, você revisará o escopo atual, modificará esse escopo e depois definirá um cálculo que determina os valores da cota do valor de vendas para o ano fiscal de 2005 com base nos valores do ano fiscal de 2004.
Para definir o escopo para o cálculo da cota do valor de vendas do ano fiscal de 2005
Selecione a guia Cálculos e então selecione Exibição de Formulário na barra de ferramentas.
No painel Organizador de Script, selecione Grandes Revendedores e depois clique no botão Novo Comando de Script na barra de ferramentas da guia Cálculos.
Observe que um script em branco aparece no painel Expressões de Cálculo e que este comando de script é exibido com um título em branco no painel Organizador de Script.
No painel Expressões de Cálculo, digite a seguinte instrução:
/* Changing Scope to All or Default Member */ SCOPE (ROOT())
Esta instrução SCOPE altera o escopo do cubo para o membro Todos, ou o padrão, em todos os atributos no cubo.
Clique em Novo Comando de Script na barra de ferramentas da guia Cálculos e depois digite a seguinte instrução no painel Expressões de Cálculo:
/* Defining the cube scope for the sales amount quotas for FY2005 */ SCOPE ()
Observe que uma linha curvada vermelha aparece abaixo do parêntese final para indicar que você definiu um conjunto de membros dentro do parêntese para a instrução SCOPE. A seguir, você adicionará a medida Cota do Valor de Vendas à instrução SCOPE para incluir esta medida dentro do escopo.
Na guia Metadados do painel Ferramentas de Cálculo, expanda Medidas e Cotas de Vendas e depois arraste a medida Cota do Valor de Vendas para o parênteses da instrução SCOPE no painel Expressão de Cálculo.
Observe que a linha curvada vermelha desaparece. A seguir, você adicionará o membro de dimensão FY 2005 à instrução SCOPE para incluir este membro de dimensão de tempo ao escopo atual.
Na guia Metadados do painel Ferramentas de Cálculo, expanda a dimensão Data, expanda Fiscal, Data Fiscal, Ano Fiscal e depois arraste o membro FY 2005 para a instrução SCOPE no painel Expressões de Cálculo imediatamente depois do membro [Cota do Valor de Vendas] do conjunto que você está definindo.
Observe a linha curvada vermelha abaixo de [Data] neste membro do conjunto. Essa linha indica que existe um erro de sintaxe imediatamente antes deste membro de dimensão, pois é necessário adicionar uma vírgula entre cada membro do conjunto dentro da instrução SCOPE.
Adicione a vírgula necessária antes da parte [Data] do membro FY 2005 da dimensão Data.
Observe que a linha curvada vermelha desaparece. A seguir, você adicionará os membros da hierarquia definida pelo usuário Funcionários na dimensão Funcionário à instrução SCOPE para incluir estes membros ao escopo atual.
Na guia Metadados do painel Ferramentas de Cálculo, expanda a dimensão Funcionário e depois arraste a hierarquia definida pelo usuário Funcionários para a instrução SCOPE no painel Expressões de Cálculo imediatamente depois do membro [Date].[Fiscal Date].[Fiscal Year].&[2005] do conjunto que você está definindo.
Observe a linha curvada vermelha abaixo da parte [Funcionário] deste novo membro do conjunto; ela indica a necessidade de uma vírgula entre cada membro do conjunto dentro da instrução SCOPE.
Adicione a vírgula necessária antes da parte [Funcionário] do novo membro.
Observe que a linha curvada vermelha desapareceu.
No final do membro [Funcionário].[Funcionários] deste conjunto dentro da instrução SCOPE, adicione a seguinte cláusula para completar a definição do terceiro membro do conjunto:
.Members
Esta cláusula especifica que todos os membros da hierarquia Funcionários dentro da dimensão Funcionário devem ser incluídos no escopo de cubo atual.
Observe que sua instrução SCOPE completada corresponde ao seguinte script:
SCOPE ([Measures].[Sales Amount Quota],[Date].[Fiscal Date].[Fiscal Year].&[2005], [Employee].[Employees].Members)
Você acabou de concluir sua definição de escopo que define o subcubo ao qual você aplicará uma expressão MDX para calcular o valor da cota de vendas do ano fiscal de 2005.
Na barra de ferramentas da guia Cálculos, clique em Exibição de Script e então revise os comandos de script recentemente adicionados.
Observe que cada comando de script aparece da forma que você digitou no painel Expressões de Cálculo, mas com um ponto-e-vírgula adicionado ao final de cada comando de script. Além disso, observe que o Analysis Services inseriu um comentário antes de cada comando de script para ajudá-lo a compreender cada comando separadamente:
Definindo e testando um novo cálculo da cota de vendas do ano fiscal de 2005
Nesta tarefa, você adicionará um novo comando de script ao script de cálculo que calcula o valor da cota de vendas do ano fiscal de 2005 para todos os membros da dimensão Funcionário. Entretanto, em vez de adicionar um comando de script à exibição Formulário, você adicionará o comando de script diretamente na exibição Script. Na exibição Script, você deve certificar-se de adicionar um ponto-e-vírgula entre cada comando de script.
Para definir e testar o novo cálculo da cota de vendas do ano fiscal de 2005
Na exibição Script, digite as instruções a seguir em uma nova linha no final do script de cálculo:
/* Applying a calculation to the subcube */ THIS = [Date].[Fiscal Date].[Fiscal Year].&[2004] * 1.25;
A instrução THIS aloca um novo valor para a medida Cota do Valor de Vendas na interseção dos membros Funcionário e FY 2005 do subcubo. O novo valor tem como base o valor que existe para a interseção do membro Funcionário e da medida Cota do Valor de Vendas no ano fiscal de 2004 multiplicado por 1,25.
No painel Expressões de Cálculo, clique na margem à esquerda da instrução THIS para definir um ponto de interrupção.
Observe que um ponto vermelho aparece nessa margem e que a instrução é realçada em vermelho: Ao executar este projeto no modo de depuração, as alterações no seu projeto são implantadas na sua instância do Analysis Services, o cubo é processado e o script de cálculo executa até que o ponto de interrupção seja encontrado. Com isso, você pode percorrer os demais scripts um a um. Caso você não defina um ponto de interrupção e execute o projeto no modo de depuração, o script de cálculo será interrompido na primeira instrução de script de cálculo, a instrução CALCULATE.
No menu Depurar, clique em Iniciar Depuração. Como alternativa, você pode pressionar F5 em seu teclado.
O projeto é implantado e processado, e o script de cálculo executa até que o ponto de interrupção seja encontrado.
Oculte todas as janelas ancoradas para obter uma área maior para exibir o painel Tabela Dinâmica que aparece na parte inferior da guia Cálculos.
O painel Tabela Dinâmica o ajudará na depuração:
No painel Tabela Dinâmica, adicione a medida Cota do Valor de Vendas à área de dados, adicione a hierarquia definida pelo usuário Data Fiscal à área de coluna e depois adicione a hierarquia de atributo Nome do Funcionário da dimensão Funcionário à área de linha. Vá até a parte inferior da tabela dinâmica e revise os funcionários que têm cotas de vendas atribuídas a eles.
Observe que o membro FY 2005 do nível Ano Fiscal da medida Cota do Valor de Vendas para cada funcionário não contém nenhum valor na área de dados para a medida Cota do Valor de Vendas. Por padrão, células vazias são exibidas no painel Tabela Dinâmica quando você está no modo de depuração.
Pressione F10 para executar a instrução THIS e calcular a cota de vendas do ano fiscal de 2005.
Observe que as células no painel Tabela Dinâmica na interseção da medida Cota do Valor de Vendas, do membro de dimensão FY 2005 e do membro Nome do Funcionário estão calculadas. Observe também que as células afetadas pela instrução THIS estão destacadas em amarelo. Há um ícone de barra de ferramentas para habilitar ou desabilitar a função que destaca as células alteradas. Por padrão, as células alteradas são destacadas.
No painel Tabela Dinâmica, desmarque as caixas de seleção para remover FY 2002, FY 2003 e FY 2004 da área de coluna.
Clique com o botão direito do mouse em qualquer lugar da área de dados e depois clique em Mostrar Células Vazias para remover a marca de seleção próxima a esta opção e ocultar todas as células vazias (esta opção também está disponível na barra de ferramentas da guia Cálculos). Isso facilitará a exibição de todos os funcionários que têm valores de cota de vendas:
No painel Tabela Dinâmica, tente expandir FY 2005 na área de coluna.
Observe que não é possível expandir FY 2005 porque os valores para o membro H1 FY 2005 na interseção da medida Cota do Valor de Vendas e da hierarquia do atributo Nome do Funcionário não foram calculados (pois estavam fora do escopo atual).
Para exibir as células vazias para os valores do membros H1 FY 2005, clique em qualquer lugar do painel Tabela Dinâmica e depois clique em Mostrar Células Vazias na barra de ferramentas da guia Cálculos para exibir todas as células vazias.
No menu Depurar, clique em Parar Depuração ou pressione Shift-F5 em seu teclado.
Remova o ponto de interrupção no script de cálculo clicando no ponto vermelho na margem esquerda.
Alocando cotas do valor de vendas para os semestres e trimestres do ano fiscal de 2005
Nesta tarefa, você modificará o escopo para incluir os membros do semestre fiscal do ano fiscal de 2005 em vez do membro Ano Fiscal de 2005. Depois, você alocará metade da cota do valor de vendas do ano fiscal de 2005 para cada semestre desse ano fiscal. Você ainda modificará o escopo para incluir os membros de trimestre fiscal do ano fiscal de 2005 em vez do membro Ano Fiscal de 2005 e alocará 1/4 da cota do valor de vendas do Ano Fiscal de 2005 para cada trimestre desse ano fiscal. Para completar a tarefa, você testará estas alocações.
Para alocar cotas do valor de vendas para os semestres e trimestres do ano fiscal de 2005
Na exibição Script do painel Expressões de Cálculo, digite a seguinte instrução em uma nova linha no final do script de cálculo:
/* Allocation of Sales Amount Quota to the 2005 Fiscal Semesters */ SCOPE ( [Date].[Fiscal Semester].[Fiscal Semester].Members );
Esta instrução SCOPE é uma instrução SCOPE aninhada porque nenhuma instrução END SCOPE é exibida entre esta instrução SCOPE e a instrução SCOPE anterior. Quando uma instrução SCOPE é aninhada, a instrução SCOPE aninhada herda o escopo pai para aqueles atributos que não foram escopados novamente. A instrução SCOPE anterior não modifica diretamente a medida Cota do Valor de Vendas ou as hierarquias definidas pelo usuário Funcionários ou Data Fiscal. Em vez disso, ela adiciona cada membro da hierarquia de atributo Semestre Fiscal à definição de subcubo usando a função Members. Para obter mais informações, consulte Members (Conjunto) (MDX). Como resultado da instrução SCOPE aninhada, o espaço do cubo agora inclui todos os membros que estão na interseção do membro Funcionário e da medida Cota do Valor de Vendas em qualquer semestre fiscal do ano fiscal de 2005. Observe que, atualmente, há apenas um semestre fiscal no ano fiscal de 2005 no cubo.
No painel Expressões de Cálculo, digite a seguinte instrução em uma nova linha no final do script de cálculo:
THIS = [Date].[Fiscal Date].CurrentMember.Parent / 2;
Esta instrução aloca o valor calculado para cada trimestre fiscal em cada semestre fiscal no espaço de cubo definido. A função CurrentMember.Parent é usada para alocar a cada membro a metade do valor de seu pai. Para obter mais informações, consulte Função CurrentMember (MDX) e Função Parent (MDX).
No painel Expressões de Cálculo, digite a seguinte instrução em uma nova linha no final do script de cálculo:
/* Allocation of Sales Amount Quota to the 2005 Fiscal Quarters */ SCOPE ( [Date].[Fiscal Quarter].[Fiscal Quarter].Members );
Esta instrução SCOPE também é uma instrução SCOPE aninhada porque nenhuma instrução END SCOPE é exibida entre esta instrução SCOPE e a instrução SCOPE anterior. A instrução SCOPE anterior não modifica diretamente a medida Cota do Valor de Vendas ou as hierarquias definidas pelo usuário Funcionários ou Data Fiscal. Em vez disso, ela adiciona cada membro da hierarquia de atributo Trimestre Fiscal à definição de subcubo usando a função Members. Como resultado, o espaço de cubo agora inclui todos os membros que estão na interseção do membro Funcionário e da medida Cota do Valor de Vendas em qualquer trimestre fiscal do ano fiscal de 2005. Observe que, atualmente, há apenas um trimestre fiscal no ano fiscal de 2005 no cubo.
No painel Expressões de Cálculo, digite a seguinte instrução em uma nova linha no final do script de cálculo:
THIS = [Date].[Fiscal Date].CurrentMember.Parent / 2;
Esta instrução aloca o valor calculado para cada trimestre fiscal em cada trimestre fiscal no espaço de cubo definido. A função CurrentMember.Parent é usada para alocar para cada membro a metade do valor de seu pai.
No painel Expressões de Cálculo, clique na margem ao lado da instrução SCOPE final para definir um ponto de interrupção. Depois, pressione F5 no seu teclado.
O script de cálculo executa até que o ponto de interrupção seja encontrado.
Clique em qualquer lugar na área de dados do painel Tabela Dinâmica e depois clique em Mostrar Células Vazias na barra de ferramentas da guia Cálculos para ocultar as células vazias.
Observe que o painel de dados está populado com as mesmas medidas e hierarquias usadas na última etapa do depurador, e que o valor do membro H1 FY 2005 foi calculado como metade do valor do pai, como mostra a imagem a seguir.
Finalmente, observe que o valor para cada membro FY 2005 é recalculado com base na agregação de seus membros, que nesse caso é o primeiro semestre fiscal do ano fiscal. O valor do membro Ano Fiscal de 2005 é afetado pelo cálculo do membro Semestre Fiscal de 2005, pois cada script executa como uma fase diferente. Para fixar um valor existente de forma que ele não seja afetado por instruções subsequentes no script de cálculo, use a instrução FREEZE. Para obter mais informações, consulte Instrução FREEZE (MDX).
Na área de coluna, expanda H1 FY 2005.
Observe que o valor para o membro Q1 FY 2005 ainda não foi calculado.
Clique em qualquer lugar na área de dados do painel Tabela Dinâmica e depois clique em Mostrar Células Vazias na barra de ferramentas da guia Cálculos.
Na área de coluna, expanda Q1 FY 2005.
Observe que nenhum valor está alocado para os dois meses do primeiro trimestre do ano fiscal de 2005 porque esses membros não estão no escopo do subcubo atual (até que as duas últimas instruções no script sejam executadas). A dimensão de tempo no cubo do Tutorial do Analysis Services contém apenas os primeiros dois meses do ano fiscal de 2005. Portanto, não há membros Q2 FY 2005.
Pressione F10 para executar a instrução SCOPE. Depois, pressione F10 novamente para executar a instrução final no script de cálculo, o que aplicará o cálculo ao subcubo atual.
Observe que o valor do membro Q1 FY 2005 está calculado e que o valor de H1 FY 2005 e os valores do membro FY2005 foram recalculados (como agregado de seus membros filho), como mostra a imagem a seguir. Observe também que o valor para cada mês fiscal no ano fiscal de 2005 (julho e agosto de 2005) não estão calculados. No próximo procedimento, você alocará valores apropriados para cada trimestre.
No menu Depuração, clique em Parar Depuração ou pressione Shift-F5 em seu teclado.
Remova o ponto de interrupção no script de cálculo.
Alocando cotas de vendas para meses
Neste procedimento, você modificará o escopo para incluir o nível mês fiscal em todos os anos fiscais (as instruções de escopo anteriores limitaram os cálculos somente ao ano fiscal de 2005). Depois, você alocará um terço do valor do trimestre fiscal da cota do valor de vendas de cada funcionário para cada mês fiscal.
Para alocar cotas de vendas aos meses
No painel Expressões de Cálculo, adicione as seguintes instruções em uma nova linha no final do script de cálculo:
/* Allocate Quotas to Months */ SCOPE ( [Date].[Fiscal Date].[Month Name].Members );
Esta instrução SCOPE é uma outra instrução de escopo aninhada que modifica o espaço de cubo ao qual você aplicará uma expressão MDX para alocar cotas do valor de vendas a cada mês fiscal com base no valor de cada trimestre fiscal. Esta instrução SCOPE é como a instrução SCOPE aninhada anterior, mas observe que a própria hierarquia definida pelo usuário Data Fiscal entrou no escopo novamente. Portanto, os membros do espaço de cubo incluirão agora todos os membros de mês fiscal da dimensão Data em vez de somente os membros de mês fiscal do ano fiscal de 2005.
Observação Compare esta modificação de escopo do cubo com a modificação de escopo do cubo do procedimento anterior para certificar-se de que você compreendeu a diferença entre as duas instruções de alteração de escopo.
No painel Expressões de Cálculo, adicione as seguintes instruções em uma nova linha no final do script de cálculo:
THIS = [Date].[Fiscal Date].CurrentMember.Parent / 3;
Esta instrução aloca 1/3 do valor de seu pai para cada membro de mês da hierarquia de data fiscal - o nível trimestral. Este cálculo se aplicará a todos os meses fiscais dentro do cubo.
No painel Expressões de Cálculo, clique na margem à esquerda da instrução THIS final para definir o ponto de interrupção. Depois, pressione F5 em seu teclado.
Revise os valores para julho e agosto de 2004.
Observe que nenhum valor está atualmente calculado para julho e agosto de 2004.
Clique com o botão direito do mouse em qualquer lugar no painel Dados e então clique em Mostrar Células Vazias para exibir somente células que têm valores.
Isso permitirá que você visualize facilmente como a instrução final é aplicada no script de cálculo.
Pressione F10 para executar a instrução final.
Observe que o valor Cota do Valor de Vendas de cada funcionário para cada mês fiscal é calculado para um valor que seja igual a 1/3 do valor pai.
Na área de coluna, remova FY 2005 e então adicione Q4 FY 2004.
Expanda FY 2004, H2 FY 2004 e Q4 FY 2004.
Observe que o valor de cada mês fiscal é igual ao valor total do trimestre fiscal.
No menu Depurar, clique em Parar Depuração.
Remova o ponto de interrupção no script de cálculo.
Na barra de ferramentas, clique em Salvar Tudo.