Auto Refresh – SSRS KPIs

Dentro do Reporting Services 2016 foi adicionado um recurso herdado do Microsoft Datazen que é bastante útil e querido por todos que tenho visto usando a nova plataforma de relatórios: os KPIs.

Bom, um “problema” que recentemente descobri após o questionamento de um cliente em um projeto foi o fato de, diferente do Datazen, os KPIs do SSRS não estavam tendo os dados atualizados automaticamente quando o dado era alterado dentro da origem. Somente se o Data Set fosse atualizado que a alteração de dados era refletida na interface gráfica do Key Performance Indicator no painel do Reporting Services.

Ao realizar uma análise sobre o “Erro”, percebi que, na verdade, isso é algo By Default do recurso. Para que seja possível o auto update, é necessário que antes seja configurado ao Data Set um recurso denominado de Cache Refresh Plan. Abaixo você aprenderá como realizar a configuração.


Para os testes estou usando uma instancia de SQL Server 2016. O banco de dados será o AdventureWorksDW2014. Para que possamos iniciar os testes, crie primeiramente dois Data Sets usando as queryes abaixo (subentende-se que você tem o domínio para efetuar a criação desses objetos):

-- Para criação do Data Set denominado KPI 1
SELECT [Value],
 [Goal],
 CASE WHEN [Value] > [Goal]
 THEN 1 
 WHEN [Value] < [Goal]
 THEN -1
 ELSE 0 END [Status]
FROM (
 SELECT SUM(CASE WHEN dst.SalesTerritoryCountry = 'Germany' 
 THEN CONVERT(INT,f.UnitPrice) 
 ELSE 0 END) AS [Value],
 SUM(CASE WHEN dst.SalesTerritoryCountry = 'Canada' 
 THEN CONVERT(INT,f.UnitPrice) 
 ELSE 0 END) AS [Goal]
 FROM FactInternetSales f 
 JOIN DimProduct dp ON dp.ProductKey = f.ProductKey 
 JOIN DimCustomer dc ON dc.CustomerKey = f.CustomerKey 
 JOIN DimSalesTerritory dst ON dst.SalesTerritoryKey = f.SalesTerritoryKey 
 JOIN DimDate dod ON dod.DateKey = f.OrderDateKey
 AND dod.EnglishMonthName = 'January'
 AND dod.DayNumberOfMonth = 31
) AS Query_KPI

-- Para criação do Data Set denominado KPI 2
SELECT SUM(Germany) - SUM(Canada) [TrendSet]
FROM (
 SELECT TOP 1000000
 dod.DayNumberOfMonth AS Dia,
 CASE WHEN dst.SalesTerritoryCountry = 'Germany' 
 THEN SUM(CONVERT(INT,f.UnitPrice)) 
 ELSE 0 END AS Germany,
 CASE WHEN dst.SalesTerritoryCountry = 'Canada'
 THEN SUM(CONVERT(INT,f.UnitPrice)) 
 ELSE 0 END AS Canada
 FROM FactInternetSales f 
 JOIN DimProduct dp ON dp.ProductKey = f.ProductKey 
 JOIN DimCustomer dc ON dc.CustomerKey = f.CustomerKey 
 JOIN DimSalesTerritory dst ON dst.SalesTerritoryKey = f.SalesTerritoryKey 
 JOIN DimDate dod ON dod.DateKey = f.OrderDateKey
 WHERE dst.SalesTerritoryCountry IN ('Germany','Canada')
 AND dod.EnglishMonthName = 'January'
 GROUP BY dod.DayNumberOfMonth, 
 dst.SalesTerritoryCountry
 ORDER BY dod.DayNumberOfMonth
) TrendSet
GROUP BY Dia

Feito isso, crie um KPI usando os dados dos dois Data Sets criados no passo anterior, seguindo o preenchimento dos campos de acordo com a imagem abaixo:

Ok. Feito isso, é necessário agora que, através do script abaixo, você altere os dados da tabela de Fato de vendas na internet da base de dados do Adventure Works para que seja possível realizarmos a configuração de auto refresh do SSRS.

BEGIN TRANSACTION
GO

UPDATE f
SET UnitPrice = 1008.99
FROM FactInternetSales AS f
JOIN DimProduct dp ON dp.ProductKey = f.ProductKey 
 JOIN DimCustomer dc ON dc.CustomerKey = f.CustomerKey 
 JOIN DimSalesTerritory dst ON dst.SalesTerritoryKey = f.SalesTerritoryKey 
 JOIN DimDate dod ON dod.DateKey = f.OrderDateKey
 AND dod.EnglishMonthName = 'January'
 AND dod.DayNumberOfMonth = 31
WHERE dst.SalesTerritoryCountry = 'Canada'
 AND UnitPrice = 8.99
GO

COMMIT TRANSACTION
GO

Observe agora que mesmo realizando refreshs na pagina os dados do KPI criado não tem as informações alteradas na apresentação. Para que isso seja possível, será necessário realizar uma configuração de auto refresh nos Data Sets que foram criados.

Primeiramente, vá até a pasta de nome DATASETS (criada automaticamente no deploy de projeto através do SSDT) e selecione o primeiro objeto (KPI 1). Na janela de configuração que irá abrir selecione no canto esquerdo a aba Caching.

Feito isso, Selecione a opção Cache copies of this dataset and use them when available. Isso irá fazer com o que o Reporting Services armazene de tempos em tempos um cache dos dados na memória do server.

É possível configurar uma ou mais agendas no servidor do SSRS para ser usada em um ou mais Data Sets, porém, para efeitos de testes, você irá configurar 1 minuto na primeira opção conforme a imagem abaixo:

Uma nova opção abaixo é habilitada: Cache Refresh Plan. Clique em Manage refresh plan e, na nova nova janela de configuração, selecione a opção New cache refresh Plan.

Na nova janela, adicione uma descrição e após isso selecione a opção Edit schedule.

Agora você irá configurar a frequência de refresh. Selecione a opção Hour. Em Run the schedule every marque de 1 em 1 minuto e o início para a hora atual da configuração.

Agora, quando a página anterior for mostrada novamente, selecione Create cache refresh plan. Feito isso, Após um minuto da configuração, será possível realizar um refresh na pagina inicial e verificar um novo valor do KPI na pagina inicial do Reporting Services.

Um ponto importante sobre o auto refresh é que a instância em que o serviço do SSRS está funcionando precisa ter o Agent habilitado e em funcionamento pois, para realização do Auto Refresh, o SSRS usa um job do Agent.


Espero poder ajudar!

Anúncios

2 comentários sobre “Auto Refresh – SSRS KPIs

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s