none
Valor da coluna anterior RRS feed

  • Pergunta

  • Estou tentando criar um relatório que mostre o total das venda em cada mês e o crescimento em relação ao mês anterior.

    O relatório é uma matrix, a coluna é agrupada por data.

    Relatório



    Tentei usar o previous ((Fields!SaldoValor.Value)/Previous(Fields!SaldoValor.Value)), porém, só funciona para linha.

    desenho do relatorio

    Alguém sabe como eu como eu pego o valor da coluna anterior? 


    Daniel Viana

    segunda-feira, 11 de maio de 2015 17:03

Respostas

Todas as Respostas

  • Olá Daniel Viana,

    Você pode trabalhar o resultado desejado através do T-SQL levando para o DataSet do Reporting Services os dados já preparados para exibir no relatório.

    Fiz um exemplo que retrata exatamento o que você está tentando fazer no reporting services através do comando LAG (Transact-SQL)

    Declare @table table (Product varchar(255),[Date] date,Quantity decimal(18,3),Value decimal(18,3))
    
    insert into @table (Product,[Date],Quantity,Value) values ('BOBINAS','2015-02-01',1648,5399.38)
    insert into @table (Product,[Date],Quantity,Value) values ('BOBINAS','2015-03-01',1997.3,6479.256)
    
    
    Select 
    	Product,
    	[Date],
    	Quantity,
    	Value,
    	(LAG(Value,1,0) Over (order by [Date])) as PreviousValue,
    	case when (LAG(Value,1,0) Over (order by [Date]))=0 then 0 else  (Value/(LAG(Value,1,0) Over (order by [Date]))-1)*100 end as growth
    from 
    	@table

    Fonte: https://msdn.microsoft.com/en-us/library/hh231256.aspx

    O recurso LAG Transact-SQL acessa os dados de uma linha anterior no mesmo conjunto de dados sem precisar de fazer Join entre tabelas. 

    O recurso LEAD Transact-SQL é o contrário do recurso LAG Transaction-SQL.  Ele acessa os dados de uma linha posterior no mesmo conjunto de dados.

    Fonte: https://msdn.microsoft.com/en-us/library/hh213125.aspx

    Abraços


    Ricardo Lacerda



    segunda-feira, 11 de maio de 2015 17:50
  • Interessante esta função, porém, não atende o meu caso, porque o relatório pode me trazer vários meses diferentes, e cada mês será uma coluna.

    Daniel Viana

    terça-feira, 12 de maio de 2015 20:22
  • Daniel Viana, Para eu te ajudar você tem que exemplicar melhor a sua questão. Eu atendi naquilo que você postou. Envia uma amostra para eu poder te ajudar efetivamente. Atenciosamente

    Ricardo Lacerda

    quarta-feira, 13 de maio de 2015 01:58
  • Ricardo Lacerda, O relatório é uma matrix, agrupada pela coluna data. E para cada mês, o relatório deve mostrar o percentual de crescimento em relação ao mês anterior. 

    Daniel Viana

    quarta-feira, 13 de maio de 2015 11:57
  • Ok Daniel Viana,

    Você pode trabalhar o resultado desejado através do T-SQL levando para o DataSet do Reporting Services os dados já preparados para exibir no relatório.

    Segue um outro exemplo utilizando o Recurso PIVOT (T-SQL) como solução da sua questão. Este commando transforma linhas em colunas. 

     
    Declare @table table (Product varchar(255),[Date] date,Quantity decimal(18,3),Value decimal(18,3));
    
    insert into @table (Product,[Date],Quantity,Value) values ('BOBINAS','2015-02-01',1648,5399.38);
    insert into @table (Product,[Date],Quantity,Value) values ('BOBINAS','2015-03-01',1997.3,6479.256);
    
    Select 
    	Product,
    	Quantity,
    	Value as Valor,
    	PreviousValue,[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12] 
    
    from 
    (
    	Select 
    		Product,
    		[Date],
    		Quantity,
    		Value,
    		month([Date]) as Mes,
    		(LAG(Value,1,0) Over (order by [Date])) as PreviousValue,
    		case when (LAG(Value,1,0) Over (order by [Date]))=0 then 0 else  (Value/(LAG(Value,1,0) Over (order by [Date]))-1)*100 end as growth
    	from 
    		@table
    	where 
    		year([Date])=2015
    
    ) as q1
    Pivot	(
    			avg(growth)
    			
    			for Mes in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])
    		) as PivotValue
    

    Fonte: https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

    Atenciosamente


    Ricardo Lacerda


    quarta-feira, 13 de maio de 2015 13:36
  • Daniel Viana,

    Com a primeira query você terá o mesmo resultado do recurso PIVOT (T-SQL).

    1) Como teste eu criei um dataset no Reporting Services com a seguinte consulta.

    Declare @table table (Product varchar(255),[Date] date,Quantity decimal(18,3),Value decimal(18,3)) insert into @table (Product,[Date],Quantity,Value) values ('BOBINAS','2015-02-01',1648,5399.38) insert into @table (Product,[Date],Quantity,Value) values ('BOBINAS','2015-03-01',1997.3,6479.256) Select Product, [Date], Quantity, Value, month([Date]) as mes, (LAG(Value,1,0) Over (order by [Date])) as PreviousValue, case when (LAG(Value,1,0) Over (order by [Date]))=0 then 0 else (Value/(LAG(Value,1,0) Over (order by [Date]))-1)*100 end as growth from @table

    where

    year([Date]) =2015

    2) Arraste a Matriz com a seguinte configuração:

    3) Resultado

     

    Ricardo Lacerda



    quarta-feira, 13 de maio de 2015 14:01
  • Creio que solucionará o meu caso. Obrigado. 

    Daniel Viana

    • Marcado como Resposta Daniel Viana quarta-feira, 13 de maio de 2015 19:01
    quarta-feira, 13 de maio de 2015 19:01
  • Daniel Viana,

    Peço por gentileza marcar a resposta que solucionou o seu problema para facilitar a pesquisa dos usuários na comunidade.

    Agradeço desde já.

    Atenciosamente


    Ricardo Lacerda

    quarta-feira, 13 de maio de 2015 20:39