Usuário com melhor resposta
Criar Relatório dinamicamente

Pergunta
-
Boa tarde, comunidade msdnUltimamente, estive com um problema para criar uma consulta utilizando a cláusula PIVOT do SQL Server 2005, depois de algum tempo tentando, obtive ajuda do Gustavo Maia aqui no fórum, e consegui resolver meu problema graças ao exemplo que ele passou.Transformei essa consulta em uma procedure para atender minhas necessidades, já que, vou utiliza-la em um relatório gerado no VB.NET 2005.Meu problema agora é, como a consulta é dinâmica, os campos do relatório também necessitam de ser dinâmicos, por exemplo:Minha consulta traz uma relação de 6 meses, eu preciso lançar 6 campos no relatório, assim como essa consulta poderia resultar em 7 meses.....tendo que gerar 7 campos e etc.É possível ter essa dinâmica para criar relatórios?
Estou utilizando o ReportViewer.Desde já,ObrigadoPaulo Eduardo Bueno
Respostas
-
E ai Paulo tudo bem?
Neste caso basta fazer o designer do relatório utilizando o controle Matrix existente no Editor do Reportview (Toolbar)
Como fazer:
http://www.gotreportviewer.com/matrices/index.html
Além disso, o SQL pode ser uma listagem simples (sem utilizar o PIVOT do SQL Server), o controle Matrix já possui essa "funcionalidade".
Ajude a melhorar o nosso Fórum!
Não esqueça de marca a mensagem como "útil", caso tenha ajudado.
Todas as Respostas
-
E ai Paulo tudo bem?
Neste caso basta fazer o designer do relatório utilizando o controle Matrix existente no Editor do Reportview (Toolbar)
Como fazer:
http://www.gotreportviewer.com/matrices/index.html
Além disso, o SQL pode ser uma listagem simples (sem utilizar o PIVOT do SQL Server), o controle Matrix já possui essa "funcionalidade".
Ajude a melhorar o nosso Fórum!
Não esqueça de marca a mensagem como "útil", caso tenha ajudado. -
Cara, estou tentando usar o Matrix aqui mas não estou conseguindo, não faço idéia do que preciso fazer para a Coluna dos meses ser dinâmica...eu tenho a seguinte View e a seguinte Procedure abaixo:
Code SnippetCreate
procedure P_REPORT_INS_8@DataMenor
SMALLDATETIME,@DataMaior
SMALLDATETIMEas
DECLARE
@menorPeriodo SMALLDATETIME, @maiorPeriodo SMALLDATETIME,@Periodos
VARCHAR(500), @cmdSQL VARCHAR(1000)SELECT
@menorPeriodo = @DATAMENOR, @maiorPeriodo = @DATAMAIOR,@Periodos
= '' FROM movimentoSET
@cmdSQL = 'SELECT juncao AS Juncao, ?FROM
(SELECT juncao, insumo, Periodo, quantidade
FROM vReports where insumo = 8 )
AS TBO
PIVOT
(sum(quantidade) FOR Periodo IN (?)) AS TPVT
ORDER BY juncao '
SET
@menorPeriodo = DATEADD(D,-DAY(@menorPeriodo)+1,@menorPeriodo)SET
@maiorPeriodo = DATEADD(D,-DAY(@maiorPeriodo)+1,@maiorPeriodo)WHILE
@menorPeriodo <= @maiorPeriodoBEGIN
SET @Periodos = @Periodos + '[' + RIGHT(CONVERT(CHAR(10),@menorPeriodo,103),7) + '],' SET @menorPeriodo = DATEADD(M,1,@menorPeriodo)END
SET
@Periodos = LEFT(@Periodos,LEN(@Periodos)-1)SET
@cmdSQL = REPLACE(@cmdSQL,'?',@Periodos)EXEC
(@cmdSQL)####################### VIEW ##################################
CREATE
VIEW vReports (juncao, insumo, periodo, quantidade)AS
SELECT
juncao
, insumo, RIGHT(CONVERT(CHAR(10),data,103),7), quantidade/500FROM
MOVIMENTOOs Tipos dados na tabela Movimento são
Junção - Inteiro
Insumo - Inteiro - FK
Data - SmallDateTime
Quantidade - Inteiro
Quando eu executo minha procedure, obtenho o seguinte resultado por exemplo
exec
P_REPORT_INS_8 '2008-01-01', '2008-01-05'As colunas dos respectivos meses são geradas dinâmicamente pelo operador PIVOT, quando ele faz o loop para gera-las e substituir o caracter "?" pela nova coluna
Não consegui implementar isso no ReportViewer. Eu gostaria de colocar essa procedure como DataSource do Relatório...ou, se for mais simples, como poderia especificar esse tipo de coluna no ReportViewer? Teria algum exemplo básico, não consegui utilizar os do link passado
Desde já,
Obrigado!!
-
Paulo,
Eu terminei o 3 webcast sobre relatórios com Crystal Reports e ReportView e tenho um exemplo usando o controle Matrix no ReportView.
O Vídeo será publicado no Media Center para Download. Enguanto isso, envia um e-mail para laercio.freitas@yahoo.com.br, Que eu mando apenas a parte do vídeo que mostra como criar um reportview com utilizando o controle Matrix (O exemplo é com os dados da Bolsa de Valores, ficou bem legal).
Fico no aguardo!
[]'s
Laércio.
-
Opa Laércio, Bom diaDesculpe a demora para dar o feedback, tive que resolver uns problemas urgentes por aqui e ontem fui participar do S2B, então não tive nem tempo de te postar aqui,Então cara, já enviei o e-mail pra você. qualquer coisa se não achar ele na sua caixa, fico grato se puder enviar o exemplo pra mim:duda_hiei@hotmail.comDesde já,GratoPaulo Eduardo Bueno
-
Laercio da Silva Freitas wrote: Paulo,
Eu terminei o 3 webcast sobre relatórios com Crystal Reports e ReportView e tenho um exemplo usando o controle Matrix no ReportView.
O Vídeo será publicado no Media Center para Download. Enguanto isso, envia um e-mail para laercio.freitas@yahoo.com.br, Que eu mando apenas a parte do vídeo que mostra como criar um reportview com utilizando o controle Matrix (O exemplo é com os dados da Bolsa de Valores, ficou bem legal).
Fico no aguardo!
[]'s
Laércio.
Fala Laércio, boa tardeVou enviar outro e-mail pra você, qualquer coisa se não chegar, quanto você tiver um tempo, fico extremamente grato se puder me enviar o WebCast, estou muito curioso.duda_hiei@hotmail.comAinda não consegui resolver o meu problema, fiz um "select *" na table, depois tentei usar o Matrix mas não consegui, você teria algum outro exemplo para mostrar?Desde já,Obrigado !! -
Paulo,
Desculpe, acabei de ver o seu post! hoje a noite eu mando a parte do vídeo onde eu mostro como utilizar o controle Matrix no ReportView.
Essa semana tem o evento Tech.ed 2008 em São Paulo e por isso ainda não foi publicado pela equipe do MSDN no Media Center.
[ ]'s
Laércio.
-
Opaentão cara, tentei aqui de diversas formas criar o relatório mas não consegui mesmo...como por enquanto o vídeo não está disponível, eu gostaria de saber se é possivel fazer algo do similar ao Matrix, porém utilizando minha procedue criada.Desde já,Obrigado!Paulo Eduardo Bueno
-
Consegui criar um relatório meio absurdo pelo Matrix, mas ainda assim não consegui chegar no que eu quero, mas, uma coisa que pude reparar, não sei se é porque esse relatório que eu estou fazendo é pesado, mas, o Report demora MUITO para sair, além de deixar a máquina travada, travada mesmo...O ReportVIewer é mais lento que o Crystal ?O Matrix, por ser dinâmico é um componente muito lento ou é a minha consulta gerada nele que está assim? Lembrando que está uma consulta muito mal elaborada mesmo, não consegui criar um range de 6 meses, então ele esta trazendo todos os meses (acho que do mês 06/07 ao mês 08/08)é melhor utilizar o Matrix ou tentar fazer de alguma forma o relatório dinâmico através da procedure? Qual o método mais rápido?
Desde já,Obrigado! -
Laércio,Gostaria de saber se já está disponível o seu WebCast que estava sendo planejado para lançar no site do msdn, procurei ele por lá e nada.Ainda estou tendo problemas com o Matrix, gostaria de saber quando será disponibilizado o WebCast para ver se com ele consigo resolver mais essa tarefa !Não existe nenhuma outra forma de criar as colunas do ReportViewer dinâmicas sem utilizar o componente Matrix?Desde já,Obrigado
-
Olá Paulo,
O vídeo foi publicado ontem no site do MSDN Media Center. Ainda está faltando a publicação das demos utilizadas no vídeo.
http://www.msdnbrasil.com.br/microsoft.mediacenter/default.aspx
Estou aguardando a publicação desse item para fazer a divulgação no fórum MSDN.
[ ] 's
Laércio.
-
Fala Laércio? Beleza cara?
Gostei muito do WebCast! Ta muito bem explicado, ficou muito legalporém, ainda não consegui usar o Matrix aqui comigo...a minha diferença deste seu relatório apresentado é que eu preciso formatar primeiro o mês e agrupa-loVou mostrar as imagens e explicando:Primeiramente essa é uma consulta select * da minha tabela de movimento, a mesma que eu preciso "pivotear" ou montar a consulta pelo Matrix. Repare que eu tenho um registro para cada movimento, ou seja, a mesma junção se repete varias vezes, porém com datas, insumos e quantidades diferentes.Para a minha necessidade, eu precisaria exibir estes dados da seguinte forma:Então criei minha procedura com a ajuda do Gustavo Maia aqui do fórum, ela soma a coluna quantidade para cada mês e para cada junção. Ela também formata a data para só o mês e ano.Quando eu tento jogar o Select no Table Adapter, ele acusa o seguinte erro:
Certo, porém eu acredito que posso usar um select * simples, e adaptar na hora de gerar o relatório Matrix, afinal é esse controle que irá fazer esses agrupamentos.Porém, não consigo fazer a mesma coisa com o Matrix, que seria, mostrar a junção, o total da quantidade por mês (este último sendo o maior problema, não consigo fazer a mesma conversão e agrupamento).Eu acredito também que preciso ter alguma forma de relacionar o campo "=Sum(Fields!quantidade.Value)" com a data formatada.Você saberia como eu posso construir a expressão da data para fazer essa conversão e se for necessário, fazer esse agrupamento?Acredito que resolvendo isso, o meu problema termineMais uma vez,Obrigado pela ajuda que já tem me dado, e desde já agradeço novamente !!!Paulo Eduardo Bueno -
Olá Paulo,
Pelo que eu vi no seu relatório, falta apenas formatar a data para o formato MM/yyyy.
Neste caso, basta clicar com o botão direito no mouse no campo data e selecionar a opção expression.
informe a expressão para o campo
Code Snippet=format(Fields!data.Value, "MM/yyyy")[ ]'s
Laércio.
Ajude a melhorar o nosso Fórum!
Não esqueça de marca a mensagem como "útil", caso tenha ajudado. -
Laércio
Então cara, eu já tinha tentado dessa forma mas não resolveu, porém eu acho que é por aí
o que eu preciso agora é fazer com que ele agrupe os mêses e não haja repetição dos mesmos
exemplo:
Se eu tivesse
11/07/2008 15/07/2008 26/08/20085 6 7
teria que ficar:
07/2008 08/2008
11 7
ele está trazendo da seguinte forma:
Como eu poderia fazer para corrigir isso?
Desde já,
Obrigado
Paulo Eduardo Bueno
-
Quando Laercio falou de formatar os dados para MM\yyyy, acho que você mudou somente o valor que está sendo mostrado, e não a expressão do agrupamento na coluna. Clique com o botao direito/ Edit Group. E na expressão do grupo use a mesma que você está mostrando na textbox.
Att
Boreki
-
Perfeito !!Era exatamente isso Boreki, esqueci de colocar a formatação no Group. Funcionou perfeitamente !!! Muito obrigado pela ajuda de vocês! Finalmente consegui utilizar esse Matrix heheSó mais uma coisa pra fechar de uma vez essa thread. Estou tentando agora fazer com que as linhas apareçam uma de cada cor, assim como o exemplo do WebCast. Porém, o ReportViewer acusa o seguinte erro:Error 1 The BackgroundColor expression for the textbox ‘quantidade’ has a scope parameter that is not valid for RunningValue, RowNumber or Previous. The scope parameter must be set to a string constant that is equal to the name of a containing group within the matrix ‘matrix1’. \Outsourcing\Relatorios\rptInsumo8.rdlc OutsourcingComo posso consertar isso?Desde já,Obrigado novamentePaulo Eduardo Bueno
-
-
-
Essa questão da linha colorida foi respondido aquiCom isso, fechou esse tópico também !!!
Muito obrigado mais uma vez Laércio, muito obrigado mais uma vez também Boreki!!!Abraço