Bom tarde pessoal, hoje vou mostrar outra forma de inserir
um filtro em um relatório do Reporting Services, mas só que desta vez,
estaremos criando o filtro direto na consulta T-SQL.
Essa forma de filtro pode
melhorar a performance de alguns relatórios, porque ao contrário do primeiro
exemplo, onde a consulta carrega todos os dados e a aplicação realiza o filtro,
neste caso, o banco é quem realiza o filtro, então, os dados trafegados são controlados,
e se o relatório for atualizado 5 vezes por exemplo com filtros diferentes,
somente os dados necessários serão consultados. Já no exemplo anterior, sempre
é carregado todos os dados, então, se tivermos 5 atualizações, teremos 5 vezes
todos os dados da consulta sem filtros solicitado ao banco.
Veja o plano de
execução estimado da consulta:
Já na consulta filtrada, esse número cai para 4. Se temos
menos linhas, com certeza, teremos menos trabalho para trafegar esses dados, o que será mais eficiente para o relatório.
Voltando ao Reporting, vamos utilizar a seguinte consulta
T-SQL para o dataset:
SELECT
E.EnglishProductCategoryName
"CategoryName",
B.CalendarYear "Year",
B.MonthNumberOfYear "Month",
SUM(A.SalesAmount - A.TotalProductCost) AS "Profit"
FROM
FactInternetSales
A
INNER JOIN
DimDate B
ON
A.OrderDateKey = b.DateKey
INNER JOIN
DimProduct
C
ON
A.ProductKey = C.ProductKey
INNER JOIN
DimProductSubcategory
D
ON
C.ProductSubcategoryKey =
d.ProductSubcategoryKey
INNER JOIN
DimProductCategory
E
ON
D.ProductCategoryKey = E.ProductCategoryKey
WHERE
B.CalendarYear = @Year
AND
B.MonthNumberOfYear IN (@Month)
GROUP
BY
E.EnglishProductCategoryName,
B.CalendarYear,
B.MonthNumberOfYear,
B.EnglishMonthName
ORDER
BY
B.CalendarYear,
B.MonthNumberOfYear
Neste exemplo, estarei utilizando um dataset incorporado no relatório, mas se quiser, você pode criar os shared datasets, e simplesmente adiciona-los ao relatório.
Na aba Report Data (Ctrl + Alt + D) do relatório, vamos adicionar o data source para conexão com o banco. Neste caso, estou adicionando o Shared Data Source criado no post anterior.
Entre com a consulta T-SQL com
os filtros de ano e mês.
Olhando a aba Parameters, você vai notar que os parâmetros
foram criados, clique em OK.
Olhando a pasta Parameters, você vai notar que os parâmetros foram criados automaticamente.
SELECT
DISTINCT
B.CalendarYear "Year"
FROM
FactInternetSales
A
INNER JOIN
DimDate B
ON
A.OrderDateKey = b.DateKey
ORDER
BY
B.CalendarYear
O mesmo vamos fazer para trazer dados dos meses, veja que neste caso, estamos filtrando o ano. Utilize o seguinte código T-SQL:
SELECT
DISTINCT
B.MonthNumberOfYear "Month"
FROM
FactInternetSales
A
INNER JOIN
DimDate B
ON
A.OrderDateKey = b.DateKey
WHERE
B.CalendarYear = @Year
ORDER
BY
B.MonthNumberOfYear
Na aba Fields, vamos criar o campo MonthName, clique em Add,
selecione Calculate Field, coloque o nome do campo e use a seguinte expressão
para trazer o nome do mês: =MonthName(Fields!Month.Value).
Repita este passo no dataset da consulta principal, com isso, podemos deixar o relatório
com uma interação mais amigável com o usuário final.
No parâmetro Year, altere o tipo para Integer.
Na aba Available Values, selecione a opção Get values from a
query, e configure os campos utilizando o dataset Year_data. Neste exemplo, não
irei configurar valores default para o parâmetro, você pode ver como realizar
esta configuração no post anterior.
No parâmetro
Month, altere o tipo para integer e marque a opção Allow multiple values na aba
General , e na aba Available Values, vamos fazer igual a configuração do parâmetro
ano, configure para pegar valores do dataset Month_data, conforme a imagem.
Agora, seguindo o exemplo de criação do post
anterior, o relatório será o mesmo, então qualquer dúvida clique
aqui para ver o passo a passo para configurar o relatório, vamos configurar o gráfico de barras, só que em Category Groups, ao invés do campo Month,
utilize o campo MonthName.
Para o título do gráfico, utilize a seguinte expressão: ="Internet Sales Profit by Category in " &
CStr(Parameters!Year.Value).
Na janela Series Properties , utilize a seguinte expressão
para o Tooltip: =FormatCurrency(Fields!Profit.Value).
Em Category Group Properties, na aba Sorting, altere a opção
MonthName para Month. Assim, os meses no gráfico apareceram ordenados
corretamente, e não por ordem alfabética.
Com o relatório configurado, é só dar o Preview. Como você
pode ver, os parâmetros estão encadeados, então só vou ter o Month habilitado
quando o parâmetro Year for selecionado.
Como podemos ver, só tenho disponível para seleção no parâmetro
Month os meses com informação disponível para o ano de 2008.
Pronto, o relatório exatamente igual ao do post anterior, só
que agora com os parâmetros configurados para serem preenchidos automaticamente
e encadeados.
Com isso, terminamos aqui com as configurações de
parametrização no Reporting Services.
Em breve, como parametrizar relatórios que consomem
informações de um cubo do Analysis Services.
Qualquer dúvida,
estamos ai para ajudar. Se quiserem, sugestões sobre assuntos para novos posts
são bem vindas.
Abraços!
Olá, como faço para mudar a disposição dos parâmetros de Horizontal (acima do relatório) para vertical (ao lado do relatório). Obrigado
ResponderExcluirAlex, infelizmente, se você estiver a opção nativa do Reporting Services, você não consegue alterar a posição da caixa de parâmetros. A disposição fica na parte superior para o Nativo, e do lado direito para o integrado ao Sharepoint. Eu já vi aplicações desenvolvidas para consumir relatórios via web services, onde a mesma tem a disposição customizada para os parâmetros, e quando é confirmado, a passagem de parâmetros é feita internamente pela aplicação na chamada de url.
Excluir