AGRUPAMENTO USANDO O REPORTING SERVICES E NÃO VIA QUERY

Resposta Proposta AGRUPAMENTO USANDO O REPORTING SERVICES E NÃO VIA QUERY

  • quarta-feira, 29 de fevereiro de 2012 14:51
     
     

    Amigos, boa tarde!

    Vejam a tabela abaixo:

    HORA     |PRODUTO      | QTD

    07:01    |BALA              | 12

    07:25    |BALA              | 20

    07:35    |PIRULITO       | 20

    08:15    |PIRULITO       | 15

    08:15    |PIRULITO       | 15

    Eu quero fazer o agrupamento pelo campo hora somando o campo QTD, porém quero fazer o agrupamento de hora em hora (quebrado por hora).

    Eu sei fazer isto via query mas não quero. Pretendo fazer isto via Reporting Services. É possível? Como?

    Para se ter uma noção melhor vou mostrar abaixo a query:

    Via Query é uma beleza!!! mas não quero passar tantos parametros na minha query, prefiro passar tudo via Reporting Services.

    CREATE TABLE #PRODUTOS (HORA DATETIME, PRODUTO VARCHAR(50), QTD MONEY)
    INSERT INTO #PRODUTOS VALUES
    ('07:01','BALA','12'),
    ('07:25','BALA','20'),
    ('07:35','PIRULITO','20'),
    ('08:15','PIRULITO','15')
    ('08:15','PIRULITO','15')


    SELECT * FROM #PRODUTOS


    SELECT 
    CONVERT(VARCHAR(2),HORA,108)+':00:00',
    PRODUTO,
    SUM(QTD)
    FROM #PRODUTOS
    GROUP BY CONVERT(VARCHAR(2),HORA,108), PRODUTO

    Obrigado!

Todas as Respostas

  • quarta-feira, 29 de fevereiro de 2012 17:56
     
     Resposta Proposta

    Boa tarde Francisco,

    Resumindo, o que você deseja é que o relatório seja gerado da seguinte forma:

    HORA            |Produto           |QTD

    07:00-08:00 |BALA               |32

    07:00-08:00 |PIRULITO        |20

    08:00-09:00 |PIRULITO         |30

    Na opção Rows Group, você pode criar funções para fazer o teste de hora em hora e assim realizar o agrupamento.

    Para isso você utilizará em Common Functions > Date & Time, a função Minute, que retorna em inteiro os minutos da hora. Ou seja, a hora cadastrada é 08:15, então irá mostrar apenas 15 minutos. Dessa forma você subtrai os minutos do menor valor de hora e soma 1 hora.

    Vai ficar mais ou menos assim:

    =FormatDateTime(Hour(Min(Fields!Hora.value) - Minutes(Min(Fields!Hora.value))+1,DateFormat.LongTime)

    Eu não tenho como testar aqui, se fosse em gráfico ficaria mais fácil de agrupar de hora em hora.


    Rodrigo Ataíde.

    • Sugerido como Resposta Boreki quarta-feira, 29 de fevereiro de 2012 22:03
    •  
  • quarta-feira, 29 de fevereiro de 2012 18:35
     
     

    Ficou show de bola!

    Já vi que o negócio do Reporting Services está nas expressões regulares... vou ter que estudar bem esse carinha... fujo dele desde o flash!

    Valeu!

  • quarta-feira, 29 de fevereiro de 2012 18:45
     
     

    As expressões regulares vieram para facilitar facilitar quem não tem conhecimento em query sql ou em code vb.

    O dificil é compreender cada função dessa. Mas vem explicado do lado direito da janela.


    Rodrigo Ataíde.