Archive for the 'Reporting Services' Category

SSRS – Utilizando calculo de variação em uma matriz

Olá pessoal,

Depois de alguns dias de jejum de posts por aqui, recentemente passei por uma situação que quero compartilhar com vocês. Estava ajundando alguns colegas na construção de alguns relatórios em Reporting Services quando surgiu a situação descrita neste post.

Tinhamos um relatório utilizando uma matriz contendo em seu conjunto de linhas uma lista de produtos, no eixo de coluna o período e o dado era a quantidade vendida (tudo funcionando como o esperado!).

Neste relatório era necessário termos uma coluna que demonstrasse a variação ou melhor evolução entre o período atual e o período anterior  (O usuário até enviou um excel de exemplo, isso no excel é muito simples, mas em um relatório do SSRS utilizando matriz não é tão trivial), sendo assim teriamos o seguinte layout:

image

A fórmula para a variação seria (AnoAnterior(2011)-AnoCorrente(2012))/ (AnoAnterior(2011)+(AnoCorrente(2012)).

Após algumas horas de reflexão e tentativas, olhando o artigo Advanced Matrix Reporting Techniques (que por sinal é mais complexo que o meu cenário) tive uma idéia que foi a criação de uma função em VB conforme a seguir:

Public Function GetGrowthValue(ByVal PreviousValue, ByVal CurrentValue)
As Object
    If IsNothing(PreviousValue) OR IsNothing(CurrentValue) Then
        Return Nothing
    Else if PreviousValue = 0 OR CurrentValue = 0 Then
        Return Nothing
    Else 
        Return (CurrentValue - PreviousValue) /
               (CurrentValue + PreviousValue) 
    End If
End Function

Criei esta função no corpo do relatório, em seguida adicionei dentro do grupo de colunas um novo campoa e inseri uma expressão chamando a função criada anteriormente:

=Code.GetGrowthValue(Previous(Sum(Fields!salesAmount.Value),
"CalendarYear"),Sum(Fields!salesAmount.Value))

Note que como estamos trabalhando com Matriz eu preciso passar o escopo, por isso utilizo o “CalendarYear” que é o nome do meu grupo de colunas.

Com isso, conseguimos gerar uma coluna de variação entre um ano e outro, e quando não há dado para comparação exibimos em branco. A imagem a seguir ilustra o resultado obtido utilizando a base de dados de exemplo AdventureWorks:

image

 Bom, não é algo de outro mundo, mas resolvi montar este post depois de procurar algumas coisas a respeito na internet e em alguns fóruns e não ter encontrado, espero que seja útil pra vocês!

Abraços e até o próximo post.

Ass: Giuliano B. Cardoso

Microsoft BI – Boas Práticas

É comum em projetos e até mesmo em sala de aula me perguntarem sobre o uso de Boas Práticas para ferramentas de BI Microsoft.  Diante disso, resolvi montar este post com algumas documentações disponíveis para cada ferramenta do portfólio de BI Microsoft.

Segue abaixo algumas referências que geralmente utilizo:

DataWarehouse

SSAS

SSIS

SSRS

 

É isso aí galera, tenho certeza de que estas referências serão úteis a vocês, assim como são pra mim. 

Fiquem a vontade para comentar e sugerir outras referências sobre este tópico.

Abraços e até o próximo post.

Giuliano B. Cardoso

Reporting Services – Montando alguns relatórios

Olá Pessoal,

Este é meu primeiro post sobre Reporting Services, seguindo a proposta inicial deste blog de documentar as minhas experiências do dia-a-dia, vou registrar neste post algumas etapas de um projeto que participei que tinha entre outras etapas a criação de alguns relatórios contendo a idéia de um Dashboard.

Este post é um pouco longo, mas muito útil para quem tem interesse na utilização do Reporting Services.

O ambiente utilizado foi baseado em um servidor contendo o SharePoint 2010 (utilizado como console central e administrativa dos relatórios) e o Reporting Services 2008 R2 integrado ao Sharepoint.

O SharePoint 2010 apresenta uma plataforma bem completa e robusta para portais, a integração com o Reporting Services apresenta algumas vantagens como:

  • Interface única e centralizada de acesso (o Sharepoint pode ser compartilhado como um portal para N aplicações)
  • Administração centralizada (via SharePoint é possível gerenciar permissões, Data Source, Modelos, Snapshot , entre outras coisas)
  • Armazenamento como biblioteca de documentos (via Sharepoint é possível fazer o controle de versão, utilizar workflows entre outras vantagens disponíveis através do uso de biblioteca de documentos)

Instalação do Ambiente

Primeiramente realizei a instalação do SQL Server 2008 R2 com a Feature de Reporting Services, em seguida realizei a configuração do reporting para trabalhar de modo integrado ao SharePoint, após isso, instalei o SharePoint 2010, para isso utilizei as seguintes referências:

Desenvolvimento dos relatórios

Após a instalação e configuração do ambiente iniciei o desenvolvimento dos relatórios, irei descrever resumidamente aqui alguns objetos e fórmulas que utilizei:

Data Bars

Em duas visões de status eu fiz o uso de Data Bars, este é um recurso novo disponível no R2 que é bastante útil, a figura abaixo apresenta o primeiro gráfico usando DataBars

image A idéia deste gráfico é com base em uma consulta que me traga os diferentes status eu apresentar o percentual de cada um sobre o total. Para isso, eu arrastei uma tabela realizei o calculo de percentual com base na soma dos diferentes tipos de status e gerei o campo % Availability. Feito isso eu arrastei o objeto DataBars e inseri na linha de detalhe na coluna a esquerda, como este objeto é um gráfico ele nos oferece a possibilidade de inserir mais de uma série, então inseri uma série para cada status em seguida configurei a cor de preenchimento de cada um (Verde, Branco,Cinza, Amarelo,etc)

Em outro relatório fiz o uso do Data Bar usando apenas uma série e exibindo o Label, conforme a figura a seguir:

image

O MSDN apresenta uma boa referência de introdução ao uso de Data Bars:   An Introduction to Data Bars in SQL Server Reporting Services 2008 R2

Same Size/Height

Ainda nesta tela tive um desafio interessante, pois uma coluna possuia valores de linha grandes que ultrapassavam o tamanho da coluna com isso o tamanho das linhas ficavam diferentes e o gráfico de Data Bars tinha a apresentação prejudicada, pois não ficava uniforme, procurei alguma solução para isso na internet, mas não existe uma propriedade equivalente ao Excel que configure as linhas para serem exibidas do mesmo tamanho (Embora você tenha uma propriedade para deixar a Matriz do mesmo tamanho de outra matriz), para contornar esta situação eu acabei colocando manualmente durante a criação da tabela um tamanho de linha maior e centralizei a exibição de altura ao centro, desta forma consegui que todas as linhas possuissem a mesma altura.

Indicadores

Também introduzido na versão 2008 R2 do Reporting Services oferece uma boa apresentação de KPIs, por exemplo, na figura a seguir temos a meta de disponibilidade por ítens.

image

Para a utilização dos indicadores após arrastar a tabela usada e e inserir o calculo do campo de disponibilidade conforme comentado anteriormente arrastei o objeto indicator e selecionei o tipo de indicador shape , logo após eu acessei as propriedades do indicador e configurei as regras de exibição conforme as figuras a seguir:

image image

Note que as regras são baseadas no valor da expressão utilizada para montar o campo SLA.  O Technet possui um artigo interessante para iniciar na utilização de indicadores no SSRS: Indicators (Report Builder 3.0 and SSRS)

Gráficos

Na versão 2008 a microsoft integrou componentes do Dundas melhorando a apresentação com novos padrões de cores. É muito comum quando incluimos um novo gráfico um padrão de cores já vir configurado com isso conforme as séries do nosso gráfico são exibidas as cores vão se alterando conforme o esquema escolhido, mas se quisermos alterar estas cores?  Muito simples podemos ir na propriedade da série e mudar o preenchimento ou podemos ainda alterar o esquema de cores, veja nas figuras a seguir:

image image

Mas e se eu quiser definir as cores de forma parametrizada conforme os dados? Podemos fazer isso usando as expressões, veja o exemplo a seguir:

image

No exemplo da figura acime eu insiro a cor conforme o valor do campo Type, com isso o gráfico exibe a cor que eu determinar para cada valor, veja o gráfico a seguir:

image

Outro sim, como exibir um valor inteiro em percentual no Label, para isso eu habilitei a exibição do label (Botão direito do mouse – Show Data Label) em seguida inseri na propriedade Label (dentro da seção Mis) o seguinte código: #PERCENT{P0}, ou seja este código parametriza o tipo de dado para exibição em percentual com 0 casas decimais.

Combinação de mais de um tipo de gráfico em um único objeto

Outra necessidade comum é a combinação de diferentes exibições em um único gráfico, ou seja no meu caso eu precisava exibir em um único gráfico a exibição de barras e linhas, em outras palavras eu tinha dois eixos de valores um contendo minha meta e o outro o dado atual, na versão 2005 tinhamos algo parecido com o Excel para “Plotar o gráfico”, mas no 2008 não temos esta opção, no entanto ficou muito mais simples, pois podemos clicar sobre o eixo de valor e definir o tipo de gráfico, veja a figura a seguir:

image

O MSDN oferece uma boa referência para você poder aproveitar melhor a utilização de gráficos no Reporting Services, acesse: Get More Out of SQL Server Reporting Services Charts

Gauges

Outro ótimo recurso presente na versão 2008 é a utilização de gauges, estes objetos fornece a possibilidade de apresentar KPIs, no meu caso eu utilizei um velocimetro para apresentar a medida de uma taxa de utilização, a utilização dos gauges também é bastante simples de ser implementada, basicamente basta arrastar o objeto e como nos gráficos inserir o valor a ser apresentado através do ponteiro do velocimetro, a sequencia de figuras a seguir apresenta a construção conforme acabei de citar e a apresentação final:

image

image

Além da configuração do ponteiro é possível configurar os valores da escala e cor do range, uma boa referência para o uso de gauges está disponivel no technet: Gauges (Report Builder 3.0 and SSRS)

Filtros

A utiliização de filtros em relatórios do Repoting services é relativamente simples, há opções de filtros de Dataset e de queryes este segundo oferece a interatividade com o usuário, em outras palavras fornece ao usuário a possibilidade de escolher os dados que ele quer exibir. Um requisito que é bastante comum é o filtro de todos os valores, por exemplo se fizermos um relatório que apresente dados de gastos por departamentos e inserirmos um filtro para departamento normalmente o usuário quer que seja exibido todos os gastos (filtro default) e a partir disso ele possa filtrar cada departamento, pois bem não irei apresentar aqui a solução para este problema para não ficar ainda mais longo este post, mas no artigo do Ryan Duclos Ten Common SQL Server Reporting Services Challenges and Solutions ele apresenta um caso bem parecido inclusive com o passo-a-passo da solução, aliás recomendo a leitura completa deste artigo para quem está iniciando em SSRS.

Performance

Ufa…estamos na ultima seção, espero que você tenha gostado da leitura até aqui.

Bom, tive em um dos relatórios uma query que executava lentamente (pouco mais de 1 minuto) e como se tratava de um produto eu teria que me virar em cima do T-SQL, pois não poderia alterar nada no banco (poxa um índice me ajudaria tanto…rs), como eu tinha esta limitação e já havia tentado diversos contornos em cima de T-SQL sem grandes sucessos resolvi utilizar a feature de cache do Reporting Services, pois 1 minuto em cima de uma consulta do ponto de vista de banco de dados não é tão ruim, mas do ponto de vista de relatórios um usuário esperando um minuto na frente da tela é tedioso, pois bem eu configurei o cache do relatório para ser renovado uma vez ao dia antes dos usuários iniciarem o consumo do relatório, ainda bem que os usuários não precisavam de dados atuais eu tinha a flexibilidade de d-1, para mais detalhes sobre o funcionamento do cache de relatórios acesse: Caching Reports (SSRS).

Bom, pessoal este foi meu primeiro post em Reporting Services espero e estou certo que será útil pra vocês.

Abraços e até a próxima!


Giuliano B. Cardoso,
Administrador de Empresas com Habilitação em Informática, atua em Tecnologia da Informação há mais de 10 anos, especialista em banco de dados SQL Server, atualmente atua como consultor em Business Intelligence e instrutor de cursos oficiais Microsoft.
Possuí as seguintes certificações: ITIL-F, MCP,MCDBA SQL 2000, MCTS SQL 2005/2008, MCITP SQL2005/2008 e MCT

Mais acessados