Acabou as férias, e a rotina de trabalho começou pegando
fogo neste início de ano, e como sempre, devemos estar sempre preparados para
qualquer problema. A alguns dias, uma
amiga me perguntou se ela poderia parametrizar um relatório que trazia informações
do mês corrente, mas ela gostaria que o usuário pudesse selecionar outros
meses. Dei uma rápida explicação de como ela poderia proceder neste caso, mas
ainda assim, para ajudá-la, resolvi fazer um post mostrando como ela poderia
adicionar um filtro no relatório dela.
Há duas formas de criar filtros, uma alterando a consulta
SQL e adicionando parâmetros (@param) nas consultas nos datasets, isso irá
gerar automaticamente os parâmetros, e ai temos que definir como será feita a
entrada de informações para esses parâmetros, seja por digitação, uma lista com
um único valor ou múltiplos valores.
A outra forma é criarmos os filtros na propriedade do
dataset, sem precisar alterar consultas, e se formos pensar no caso da minha
amiga, provavelmente ela está consultando informações de uma lista do
SharePoint, sendo a opção mais viável para ela.
Vou utilizar o AdventureWorksDW2012 para o exemplo, e não
faremos nada muito complicado, então segue uma consulta da base relacional.
Lembre-se que nestes exemplos, ainda não estou me preocupando com performance
de consultas, isso ainda será assunto para vários posts durante o ano.
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
GROUP
BY
E.EnglishProductCategoryName,
B.CalendarYear,
B.MonthNumberOfYear
ORDER
BY
B.CalendarYear,
B.MonthNumberOfYear
O primeiro exemplo, irei criar um shared dataset, onde a
informação não poderão ser alterada na
consulta do relatório, simulando o filtro direto na informação recebida para o
relatório.
Utilizando o SQL Server Data Tools, vamos abrir um projeto
para o Reporting Services. Você pode ver como criar um projeto e relatório no
Reporting Services aqui.
Defina um nome e tipo para a conexão (no nosso caso, SQL Server), e clique em Edit para configurar a conexão.
Entre com o Servidor de Banco de Dados e selecione o banco AdventureWorksDW2012. Teste a conexão e clique em OK.
Agora vamos criar a camada de dados, criando um Shared Dataset. Depois de criado, esta consulta pode ser utilizada em diversos relatórios.
Entre com um nome para o dataset, selecione o data source
criado a pouco, e entre com a consulta SQL a ser utilizada para os dados
necessários para o relatório. Clique em OK.
Selecione a opção Report, entre com um nome para o relatório
e clique em Add.
Abra a aba Report Data (Crtl + Alt + D) e vamos adicionar o dataset criado a pouco. Clique com o botão direito em Datasets e clique Add Dataset.
Como podemos ver, podemos selecionar a opção para usar um
dataset incorporado ao relatório, não podendo ser utilizado por nenhuma outra camada,
ou podemos utiliza o shared dataset que criamos. Como podem ver, aqui, não
temos acesso a nenhum código de consulta para os dados. Somente acesso a eles.
Vamos criar os parâmetros, e depois vamos configurar os filtros.
Ainda na aba Report Data, clique com o botão direito em Parameters e clique em Add Parameter...
Entre com um nome para o parâmetro, a forma como o usuário
ira ver o nome do parâmetro no relatório, o tipo dele, como sabemos que na
consulta a coluna ano retorna um valor inteiro, se não especificarmos o tipo
certo e deixarmos como Text, o relatório irá gerar um erro no tipo de dados na hora
da comparação.
Em Available Values, vamos definir os valores do ano
manualmente. Poderiamos utilizar uma consulta para popular este parâmetro, e
vamos fazer isso no próximo exemplo. Por enquanto, vamos entrar com os valores
manualmente.
Na aba Default Values, vamos colocar manualmente o valor
2008, mas se isso estivesse que ser preenchido com informações do sistema, você
poderia utiliza a expressão =Year(Now) para
pegar o ano corrente das configurações de tempo do servidor. Clique em OK.
Seguindo a mesma linha de raciocínio do exemplo anterior,
vamos configurar o parâmetro de meses, onde podemos ver que podemos selecionar múltiplos
valores.
Vamos preencher os labels com os nomes dos meses e definir
seus valores como inteiros, assim, assim não teremos problemas na hora de
validação de tipo de dados nos filtros.
Da mesma forma que o ano, podemos utilizar a expressão =Month(Now) para
pegar o mês corrente do sistema. No exemplo estou utilizando o ano 2008 e o mês
de julho como valores default, porque sei que são os últimos dados registrados no banco, simulando como se hoje fosse julho de
2008.
Agora vamos configurar o dataset para que os parâmetros
passem seus valores como filtros no relatório. Clique no dataset do relatório
criado e selecione a opção Dataset Properties.
Na aba Filters, é só configurar conforme a imagem,
associando os parâmetros aos filtros desejados. Note que na opção Year só
podemos utilizar um valor, na opção Month, podemos selecionar múltiplos
valores, tendo operadores diferentes.
Vamos adicionar um gráfico de barras no corpo do relatório. Na aba Toolbox (Crtl + Alt + X), selecione a opção Chart, selecione a aba Column e selecione o primeiro gráfico da lista.
Para as configurações do gráfico, defina o campo Profit em Values, Month em Category Groups e CategoryName em Series Group. Com isso, temos os eixos e valores do relatório configurados.
Vamos customizar o título do relatório, clique sobre a área
ChartTitle, cique com o botão direito do mouse e clique em Title Properties.
Para customizar o título do relatório, podemos concatenar o nome do relatório com o ano de exibição das informações. Para isso é só colocar a expressão ="Internet Sales Profit by Category in " & CStr(Parameters!Year_Param.Value) no campo Title text.
Podemos também alterar a forma como os valores serão apresentados na opção Vertical Axix Properties. Aqui, só alterei a forma de apresentação dos valores para Currency e defini o símbolo para a moeda americana. Também configurei para que os valores sejam apresentados em Milhares, então, para melhor visualizar, alterei o text box Axis Title para Thousands. Alterei também o Horizontal Axis Title para Month.
Clicando sobre as colunas com o botão direito do mouse e clicando em Series Properties, podemos editar para que quando passemos o mouse sobre uma coluna, ele apresente o valor da mesma.
No campo ToolTip, entre com a seguinte expressão: =FormatCurrency(Fields!Profit.Value)
Pronto, já temos o relatório pronto para uso. Clique em
Preview para ver como ficou, deixe a seta do mouse sobre uma das colunas, e
verifique o valor. Como podemos ver, temos os valores para o que deveria ser o
ano e mês corrente, mas e se quiser ver todos os meses de 2008?
Agora vamos testar os parâmetros que criamos, selecione
todos os meses no para Month e clique em View Report.
Pronto, podemos ver que os meses foram plotados no gráfico, agora só para finalizar, o cliente quer ver as informações do ano passado (no nosso caso, 2007), é só alterar o parâmetro de ano e executar o relatório novamente.
Pronto, conforme podemos ver no título do relatório, temos
todos os meses de 2007. Agora é só fazer o deploy no SharePoint e deixar o
usuário desfrutar do relatório parametrizado.
Até lá pessoal!
Oi bom dia!Vi seu post e achei muito interessante,
ResponderExcluire muito bom.
não sei se poderia me ajudar,
criei um parametro e nesse parametro tem uma label que estou tentando colocar varios valores nela e esta dando erro, qual procedimento que posso usar?
se puder me ajudar desde já grato
Olá, como faço para colocar a lista de parâmetros na vertical ao lado do relatório?
ResponderExcluirObrigado.