Home > Artigo, SharePoint Technologies > Usando Named Sets no Analysis Services para entregar “Ranges” de datas pré-definidos para o usuário final

Usando Named Sets no Analysis Services para entregar “Ranges” de datas pré-definidos para o usuário final


Autor:

Thiago Silva

Publicação:

29/Out/10

Overview

Desenvolvendo soluções de BI, usando o SQL Server Analysis Services (SSAS), damos para o usuário final a possibilidade de navegar nos dados usando uma dimensão de tempo. Mas, quando o usuário começa a utilizar, ele sempre quer mais, por exemplo: Como faço para filtrar somente os dados do último mês, ou dos últimos três até a data atual?”.

Por padrão, este filtro não existe. O usuário teria que selecionar os meses que ele gostaria de ver, por exemplo, o mês anterior ao que vigente em que ele estava montando os filtros. Mas, e quando virar o próximo mês? Não será automático, ou seja, ele precisará fazer um novo filtro ou seu filtro inicial irá trazer dois meses anteiores, agora que ele está no próximo mês ao que ele estava antes.

Podemos então ajudar o usuário dando a possibilidade para que ele insira cálculos pré-configurados que farão o que ele precisa, de forma automática. Para isso, usamos Calculated Members e/ou Named Sets.

Solução

Para essa solução vou trabalhar com os seguintes produtos e tecnologias:

· Windows 7 Enterprise

· Microsoft SharePoint 2010 Server Enterprise (PerformancePoint Services);

· SQL Server 2008 Enterprise;

· Business Intelligence Development Studio;

· PerformancePoint Dashboard Designer.

O foco deste artigo não é a criação de um projeto no Analysis Services. Para ajuda neste assunto, consulte: http://msdn.microsoft.com/en-us/library/ms166552.aspx – Designing and Implementing: Tutorials (Analysis Services – Multidimensional Data)

1. Criando os Named Sets.

a. No seu projeto do Analysis Services, clique duas vezes sobre o seu cubo (.cube) no Solution Explorer.

b. Clique na tab Calculations, clique em Script View, para ver o script inteiro como na imagem abaixo.

image

c. Logo abaixo de “CALCULATE;”, insira o seguinte script.

/*

Dimensão Data

*/

CREATE HIDDEN DYNAMIC SET CURRENTCUBE.[TodaySet]

AS filter([Data].[Calendar Date].[Date].Members,

[Data].[Calendar Date].CurrentMember.Properties(“Data As Int”)

= Format(Now(), “yyyyMMdd”)) ;

CREATE HIDDEN DYNAMIC SET CURRENTCUBE.[CalendarTodaySet]

AS exists([Data].[Calendar Date].[Date].Members, [TodaySet]).ITEM(0).ITEM(0) ;

CREATE DYNAMIC SET CURRENTCUBE.[Current Year To Date]

AS [CalendarTodaySet].ITEM(0).ITEM(0).Parent.Parent.FirstChild.FirstChild :

[CalendarTodaySet].ITEM(0).ITEM(0);

CREATE DYNAMIC SET CURRENTCUBE.[Last Month]

AS [CalendarTodaySet].ITEM(0).ITEM(0).Parent.Lag(1).FirstChild :

[CalendarTodaySet].ITEM(0).ITEM(0).Parent.Lag(1).LastChild;

CREATE DYNAMIC SET CURRENTCUBE.[Last Three Month]

AS [CalendarTodaySet].ITEM(0).ITEM(0).Parent.Lag(3).FirstChild :

[CalendarTodaySet].ITEM(0).ITEM(0).Parent.Lag(1).LastChild;

CREATE DYNAMIC SET CURRENTCUBE.[Last Three Month To Date]

AS [CalendarTodaySet].ITEM(0).ITEM(0).Parent.Lag(3).FirstChild :

[CalendarTodaySet].ITEM(0).ITEM(0);

/*

[Data] = Dimensão de Tempo

[Calendar Date] = Hierarquia com os seguintes atributos (Year → Month → Date)

[Date] = Atributo relacionado ao dia 

*/

d. Na Solution Explorer, vá até o DataSourceView que possui a sua tabela de Tempo. Clique duas vezes nela para criarmos um campo calculado que terá a data atual como “int”, no formato yyyymmdd.

e. Clique com o botão direito na sua tabela que contém as datas, e selecione Add New Named Calculation.

image

f. Em Column Name, dê o nome de Data As Int.

g. Em Expression, insira a seguinte expressão para transformar a data em um número inteiro.

i. convert(varchar(8), PK_Date, 112)

PK_Date = coluna que contém a data na tabela de datas.

h. Clique OK, e depois clique com o botão direito na tabela e selecione Explore Data para verificar se a expressão funcionou. Navegue com as barras, se necessário, até encontrar a coluna que acamos de criar.

image

image

i. Na Solution Explorer, clique duas vezes sobre a sua dimensão de Datas.

j. Em Data Source View, na tabela de Datas, localize a coluna que acabamos de criar, clique com o botão direito e selecione New Attribute from Column.

image

NOTA: Repare na hierarquia Calendar Date, é nela que o script é baseado.

k. Pronto. Agora é só fazer Deploy e Processar o cubo. Na dimensão de Data teremos nossos filtros!

image

l. E onde entra o SharePoint nisso tudo? Podemos gerar gráficos dinâmicos usando o PerformancePoint e/ou Excel Services acessando informações do cubo criado no SQL Server com Analysis Services.

m. E estes Named Sets podem ser utilizados no PerformancePoint Dashboard Designer para filtrar os dados!

image

Conclusão

Nesse artigo mostrei como podemos criar filtros/membros calculados para automatizar ações do usuário final. Assim, ele não precisa ficar atualizando o mesmo relatório sempre que alguma variável já conhecia mude, como é o caso de um relatório que traz informações do mês anterior.

Sem estes filtros/membros calculados, o usuário precisaria atualizar o relatório sempre que o mês mudasse, selecionando então, o anterior vigente.

Advertisements
  1. Hércules
    September 5, 2011 at 19:33

    Fala Thiago, blz?

    Cara, preciso fazer exatamente o que você ensinou nesse post. Ele está bem explicado, mas estou tendo um erro quando tento usar a dimensão de tempo. A mensagem é “Error occurred retrieving named sets: MdxScript() O atributo de dimensão Data As Int não foi encontrado”. Tem ideia do que pode ser??

    Valeu.

    • September 5, 2011 at 20:01

      Olá Hércules,
      Tudo bem?

      Você criou a coluna “Date As Int” na sua tabela de tempo, no DataSource View? Qual o nome da sua tabela que contém todas as datas pra ser usada? É nela que você tem que criar uma NamedColumn.

      Passo 1.d, do artigo acima.

      O seu erro é por que ele tentou procurar essa coluna e não achou. É preciso cria-la.

      Abraço!
      Thiago.

  2. Hércules
    September 5, 2011 at 20:44

    Thiago,

    obrigado pela resposta rápida.

    criei a coluna na minha tabela de tempo. Até usei a opção “Explore Data” como sugeriu e os dados foram mostrados corretamente. A minha tabela que tem todas as datas se chama Tempo e na minha dimensão, que tem o mesmo nome, criei uma hierarquia como o nome Calendar Date. Eu criei o campo lá no DSV. Até fiz um teste comentando o script. Quando comento não dá erro e consigo utilizar a dimensão sem problemas.

    Estou achando que pode ser alguma coisa referente a ligação do atributo Date As Int com a dimensão.

    Mais alguma dica??
    Obrigado.

  3. December 2, 2014 at 16:18

    Thiago, pra mim também, acusou o mesmo erro…

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: