Excel: Agrupando Datas

Pessoalmente considero o Excel a segunda melhor ferramentas para trabalhar com banco de dados (depois do conjunto de ferramentas do SQL Server – SSRS, SSAS, SSAS e Management Studio). O maior diferencial do Excel esta na facilidade de criar uma interface amigável e flexível para com o usuário final, uma atividade que é um pouco mais complexa com o Report Builder do SQL Server (SSRS).

Neste meu primeiro tópico trabalhando com o Excel, estarei demonstrando a flexibilidade da ferramenta para tratar dados de data por meio de uma tabela dinâmica. Mesmo que para DBAs e para alguns desenvolvedores familiarizados com SQL esta tarefa seja muito fácil, nem se pode auxiliar usuário final trabalhar com os dados direto do banco de dados, desta forma ferramentas como Excel e Report Builder se fazem necessárias.

Agrupar valores por Dia, Mês e Ano em SQL pode ser resolvido por queries simples como:

SELECT YEAR(dataPla) AS Ano
, MONTH(dataPla) AS Mes
, DAY(dataPla) AS Dia
, SUM(valorPla) AS Total
FROM Planilha
GROUP BY YEAR(dataPla)
, MONTH(dataPla)
, DAY(dataPla)

Ainda assim é um desafio ensinar o usuário final fazer suas próprias queries. Então vamos ao Excel! Tendo a massa de dados no Excel, que pode ser conseguida exportando os resultados de uma consulta SQL pelo Management Studio ou importada pelo próprio Excel ou gerada de alguma outra ferramenta, vamos analisar os dados.

No exemplo, tenho uma coluna Data e outra de Valor, uma estrutura bem simples para ser utilizada como modelo para outras situações.

Selecione algum campo de sua massa de dados, de preferência a primeira linha da primeira coluna.

Formate como uma tabela, utilizando a opção “Formatar como Tabela” do menu “Início”:

Informe a seleção e marque a opção “Minha tabela tem cabeçalhos” se for válida.

Pronto, o primeiro passo resultará numa tabela onde estão identificadas as colunas e linhas (estas colunas permitem filtros e ordenação dos dados de forma simples).

Como segundo passo, no menu Design, selecione a opção “Resumir com Tabela Dinâmica”.

Defina a tabela ou intervalo a ser analisado.

Após prosseguir, o segundo passo terá como resultado a estrutura para a manipulação da tabela dinâmica.

No terceiro passo, arraste o campo de data para a área “Rótulos de Linha” e o campo de valores para a área “Valores”, tendo o seguinte resultado.

Selecione a coluna de “Rotulo de Linha” da tabela dinâmica e verifique se os tipos de dados são do tipo Data.

Conforme o menu “Início”:

Neste quarto passo, selecione no menu Opções, a opção “Agrupar Seleção”:

Será exibida a seguinte janela, nela informe os agrupamentos que você deseja utilizar.

Pronto, o resultado deste tutorial é uma tabela dinâmica agrupando os valores por data (ano, trimestre, mês, dia).

Espero que as informações deste post venham a auxiliar em futuras necessidades.

Esqueci de um detalhe, para gerar os totais pelos grupos (ano, trimestre, mes), é possivel pela opção “Mostrar Todos os Subtotais no Início do Grupo” no menu “Design\Subtotais”.

 

E o resultado será a soma dos valores por Mês, Trimestre e Ano!

Se quiserem saber mais informações sobre trabalhar com Excel para tratamento de dados, me deixo à disposição a desenvolver novos temas que forem sugeridos e esclarecer dúvidas sobre este e outros assuntos.

Agradecimentos a Ísis Sayuri pelo desafio que me motivou a escrever este post.

7 pensamentos sobre “Excel: Agrupando Datas

  1. Sabia que eu já tinha vsto isso antes…..

    *.* Meu relatório mais desafiador, mais lindo, mais bem explicado, e de maior sucesso no sistema na época!!!!
    E minha estagiária fofa, que conseguiu…. E você que foi o mentor de todo o processo!!!
    Muito obrigada pela sua ajuda….sem você mta coisa no meu sistema não teria sido possível…hehehehe

    =)))

  2. Olá Paulo, primeiramente, o seu site me ajuda demais!
    Eu preciso fazer um relatório agrupado por mês, e com isso eu usei a sua imagem acima contendo o código sql e ajustei a minha necessidade, porém quando eu executo, ele me traz o resultado agrupado por mês porém em duas linhas, exemplo:

    [Mês] [Registros]
    1 9824
    2 6

    Quando o desejado seria
    [mês] [Registros]
    1 9830

    Segue meu código

    DECLARE @DT_INICIAL DATETIME = ‘2015-01-01 00:00:01’
    ,@DT_FINAL DATETIME = ‘2015-01-31 23:59:59’

    SELECT

    MONTH(DATEADD(ss, open_date, ‘19700101’)) [MÊS],
    COUNT(ref_num) [CHAMADOS ABERTOS]

    FROM mdb.dbo.call_req call_req

    WHERE
    DATEADD(hh,-3,DATEADD(ss, open_date, ‘19700101’)) >= @DT_INICIAL AND
    DATEADD(hh,-3,DATEADD(SS, open_date, ‘19700101’)) <= @DT_FINAL
    GROUP BY
    MONTH(DATEADD(ss, open_date, '19700101'))
    ORDER BY 1

    • Lucas, tente agrupar inicialmente por data (dia, mês, ano) ou pelo tipo com CAST para o tipo DATE, pois penso que existe algo errado na sua lógica para calcular suas datas.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s