7th May 2025 12 minutos de leitura Análise de vendas reais com a folha de referência do analista Scott Davies análise de dados Projeto SQL Índice Visão geral Como preparar os dados Encontrando as tendências gerais Determinação de tendências de vendas Resumo Você já usou a Folha de dicas do analista de dados para analisar um conjunto de dados comerciais? Neste artigo, você poderá ver os comandos da folha de dicas em ação. Vou explorar um conjunto de dados de vendas do mundo real para responder a 10 perguntas comerciais importantes usando SQL. Seguindo as orientações da Folha de dicas de SQL para análise de dados, demonstrarei como as consultas SQL podem ajudar a analisar tendências, medir o desempenho e extrair insights significativos dos dados de vendas. Para isso, usaremos um conjunto de dados aberto do Tableau que contém dados de vendas de artigos para casa, como escrivaninhas e artigos de papelaria. Esse conjunto de dados oferece uma maneira prática de explorar questões de relatórios relacionados a negócios e ver como o SQL pode ser usado para descobrir tendências úteis. Em vez de um estudo de caso formal, este artigo se concentra no mapeamento de questões comerciais para consultas SQL gerais. Você verá como as técnicas de SQL se alinham aos desafios da análise de dados do mundo real e como surgem diferentes padrões de métricas nos relatórios. Ao final, você será capaz de reconhecer esses padrões e aplicá-los ao seu próprio trabalho de geração de relatórios SQL. Vamos mergulhar de cabeça! Visão geral Esta análise está estruturada em duas partes principais. Primeiro, examino as tendências gerais, como o total de vendas, o lucro e a quantidade vendida. Em seguida, concentro-me nas tendências de vendas, identificando padrões ao longo do tempo, por categoria e em diferentes segmentos de negócios. Para responder a essas perguntas, uso técnicas SQL como agregações, proporções, funções de janela e subconsultas. Padrões métricos comuns, como agrupamento de dados, rastreamento de tendências, cálculo de médias móveis e classificação de resultados, ajudam a estruturar a análise. A folha de dicas de SQL para análise de dados serve como referência para as principais funções, como GROUP BY, classificação, totais em execução e extrações de datas. Acrescentei tags nos exemplos abaixo para categorizá-los: colchetes para técnicas de SQL [SQL], parênteses para padrões métricos (METRIC) e colchetes para referências da folha de consulta {SHEET}. Essas tags ajudam a organizar a análise de cada exemplo abaixo. Os exemplos são organizados por nível de dificuldade, começando com consultas simples e incorporando gradualmente técnicas mais avançadas. Isso facilita o acompanhamento e a aplicação de abordagens semelhantes a outros conjuntos de dados comerciais. Como preparar os dados Para iniciar a análise, precisamos preparar o conjunto de dados. Eu uso um conjunto de dados aberto do Tableau Public, que contém dados de vendas de artigos para o lar, como escrivaninhas e artigos de papelaria. Como ele é amplamente usado em relatórios comerciais, é um ótimo recurso para praticar consultas SQL. Veja abaixo as instruções passo a passo para baixar o conjunto de dados, importá-lo para um ambiente SQL e fazer pequenos ajustes para limpar os dados. Baixe o conjunto de dados do Tableau Public. Navegue até Learn → Dados de amostra → Negócios → Superstore Sales. Baixe o conjunto de dados Superstore Sales. Abra o conjunto de dados no Excel. Os dados relevantes estão na guia "Orders" (Pedidos). Abrir o arquivo .xls Vá para a guia "Orders" (Pedidos) em sua planilha Download do SQL IDE - opcional para quem quiser acompanhar e recriar as métricas. Estou usando o MySQL Workbench e o MySQL Community Server. Se você quiser usar o mesmo, os downloads estão disponíveis abaixo. Mostrarei as etapas para importar o conjunto de dados para o MySQL Workbench. Links para download: MySQL Workbench: https://dev.mysql.com/downloads/workbench/ MySQL Community Server: https://dev.mysql.com/downloads/mysql/ Prefiro usar o MySQL Workbench com o Community Server, portanto, as etapas a seguir são para configurá-lo: Primeiro, confirmo que a conexão da instância local está estabelecida. Em seguida, crio um novo esquema seguindo estas instruções: Clique na conexão da instância local. Selecione Schemas no menu superior. Clique com o botão direito do mouse e selecione Criar esquema. Nomeie o esquema como Tableau Superstore. Importe o arquivo .xls como um .csv em Tabelas usando o Assistente de importação de tabelas de dados (converta .xls em .csv primeiro). Um método alternativo é importá-lo como um JSON usando um conversor de JSON (link para instruções, que é o método que usei). Defina as configurações de importação e escolha o tipo de campo padrão para diferentes colunas de origem. Não inclua a última linha em branco! Antes da etapa final, faça alterações manuais no site Alter Table: remova os espaços dos nomes das colunas e substitua-os por sublinhados (_). A última etapa é clicar com o botão direito do mouse e selecionar Create Schema (Criar esquema). Pronto! Parabéns, a parte mais complicada já passou. Dê um nome ao seu esquema: Tableau Superstore deve ser suficiente. Use o Assistente de importação de dados de tabela para adicionar o arquivo, conforme mostrado na captura de tela. Carregue o arquivo .csv. Ou, se estiver convertendo para JSON, carregue o arquivo JSON. Para isso, é necessário usar um conversor de .csv para .json, conforme mostrado na imagem. Mantenha todos os campos selecionados, mas exclua o campo "blank" e defina todos os outros como campos de "texto". Depois disso, a única coisa que resta a fazer é clicar com o botão direito do mouse na tabela orders e selecionar Alter Table. A preparação dos dados está concluída e estamos prontos para passar à análise. Bônus agradável: você sempre pode encontrar todas as solicitações e partes de código do artigo na página dedicada do GitHub. Encontrando as tendências gerais Vamos nos aquecer no nível mais fácil! Para iniciar a análise, começaremos com alguns indicadores-chave de desempenho (KPIs) para obter uma visão de alto nível das vendas, do lucro e da quantidade vendida. Essas consultas ajudam a resumir o conjunto de dados e fornecem um instantâneo rápido do desempenho geral dos negócios. Métricas de KPI: Total de vendas, lucro e quantidade vendida. Perguntas: Qual é o total de vendas, o lucro e a quantidade vendida? [AGREGAÇÃO] (GERAL) {FUNÇÕES DE AGREGAÇÃO} SELECT ROUND(SUM(Sales), 0) AS sales_total, ROUND(SUM(Profit), 0) AS profit_total, ROUND(SUM(Quantity), 0) AS quantity_total FROM `Tableau Superstore`.orders; Resultado: Essa consulta calcula o total de vendas, o lucro e a quantidade vendida em todo o conjunto de dados. Ela fornece uma visão geral do desempenho geral dos negócios. Métricas de KPI: Tendências mensais e anuais Pergunta: Quais foram as vendas, o lucro e a quantidade vendida mensal/anualmente? [AGREGAÇÃO] (TENDÊNCIA) {FUNÇÕES DE AGREGAÇÃO | EXTRAÇÃO DE PARTES DA DATA} SELECT EXTRACT(YEAR FROM DATE(STR_TO_DATE(order_date, '%m/%d/%Y'))) AS order_Year, EXTRACT(MONTH FROM DATE(STR_TO_DATE(order_date, '%m/%d/%Y'))) AS order_Month, ROUND(SUM(Sales), 0) AS sales_month, ROUND(SUM(Profit), 0) AS profit_month, ROUND(SUM(Quantity), 0) AS quantity_month FROM `Tableau Superstore`.orders GROUP BY 1, 2 ORDER BY 1, 2; Resultado: Essa consulta divide as vendas, o lucro e a quantidade por ano e mês, o que nos ajuda a identificar tendências ao longo do tempo. É útil para detectar padrões sazonais ou crescimento ano a ano. Métricas de KPI: Vendas médias, lucro e quantidade vendida Perguntas: Qual foi a média de vendas, lucro e quantidade vendida? [AGREGAÇÃO] (GERAL) {FUNÇÕES DE AGREGAÇÃO} SELECT ROUND(AVG(Sales), 0) AS sales_average, ROUND(AVG(Profit), 0) AS profit_average, ROUND(AVG(Quantity), 0) AS quantity_average FROM `Tableau Superstore`.orders; Resultado: Em vez de valores totais, essa consulta calcula a média de vendas, o lucro e a quantidade vendida por pedido. Ela é útil para entender o tamanho típico da transação e compará-lo com diferentes períodos de tempo ou segmentos de negócios. Espero que você tenha conseguido passar pelo primeiro nível de análise! Agora, vamos dar um passo adiante com consultas mais avançadas. O nível médio é o próximo, começando com um cálculo de média móvel, que ajuda a suavizar as flutuações de curto prazo e a identificar as tendências de vendas ao longo do tempo. Essa abordagem nos permite prever vendas futuras analisando os padrões dos meses anteriores. Pergunta: Como podemos prever as vendas por mês? [WINDOW FUNCTION] (TREND | MOVING AVERAGE) {AGGREGATE FUNCTIONS | EXTRACTING PARTS OF DATE | MOVING AVERAGE} SELECT EXTRACT(YEAR FROM DATE(STR_TO_DATE(order_date, '%m/%d/%Y'))) AS order_Year, EXTRACT(MONTH FROM DATE(STR_TO_DATE(order_date, '%m/%d/%Y'))) AS order_Month, ROUND(SUM(Sales), 0) AS sales_total, ROUND(AVG(SUM(sales)) OVER(ORDER BY EXTRACT(MONTH FROM DATE(STR_TO_DATE(order_date, '%m/%d/%Y'))) ROWS BETWEEN 2 PRECEDING AND CURRENT ROW), 0) AS moving_average FROM `Tableau Superstore`.orders GROUP BY 1, 2 ORDER BY 1, 2; Resultado: Essa consulta calcula os totais de vendas mensais e aplica uma média móvel nos últimos três meses (incluindo o atual). Isso ajuda a identificar tendências de vendas ao longo do tempo, suavizando as flutuações de curto prazo, facilitando a previsão do desempenho futuro. Espero que esteja acompanhando! Agora, vamos abordar uma consulta mais avançada. O nível difícil é o próximo, no qual calculamos uma soma cumulativa de vendas para 2017. Esse total acumulado ajuda a acompanhar a progressão das vendas mês a mês, fornecendo uma imagem clara do desempenho geral ao longo do ano. Perguntas: Qual é a soma acumulada das vendas de 2017? Mostrar por mês. [WINDOW FUNCTION | CTE] (TREND | CUMULATIVE) {AGGREGATE FUNCTIONS | EXTRACTING PARTS OF DATE | RUNNING TOTAL | CTE} WITH monthly_report AS ( SELECT EXTRACT(YEAR FROM DATE(STR_TO_DATE(order_date, '%m/%d/%Y'))) AS order_Year, EXTRACT(MONTH FROM DATE(STR_TO_DATE(order_date, '%m/%d/%Y'))) AS order_Month, ROUND(SUM(Sales), 0) AS monthly_sales_total FROM `Tableau Superstore`.orders WHERE EXTRACT(YEAR FROM DATE(STR_TO_DATE(order_date, '%m/%d/%Y'))) = 2017 GROUP BY 1, 2 ) SELECT order_month, yearly_sales_total, SUM(yearly_sales_total) OVER(ORDER BY order_Year) AS running_sales_total FROM monthly_report ORDER BY 1, 3 DESC; Resultado: Essa consulta primeiro calcula os totais de vendas mensais para 2017 usando uma expressão de tabela comum (CTE). Em seguida, ela aplica um total em execução usando uma função de janela para somar as vendas progressivamente ao longo dos meses. Isso ajuda a analisar o crescimento cumulativo e a detectar tendências de vendas dentro do ano. Determinação de tendências de vendas Vamos começar com o nível fácil novamente, mas desta vez com foco em insights regionais e baseados em categorias. Essas consultas ajudarão a detalhar as principais métricas por diferentes segmentos da empresa, oferecendo um quadro mais claro do que apenas a análise dos totais gerais. Perguntas: Qual é o total de vendas, lucro e quantidade para cada região? [AGREGAÇÃO] (GRUPO) {FUNÇÕES DE AGREGAÇÃO} SELECT Region, ROUND(SUM(Sales), 0) AS sales_total, ROUND(SUM(Profit), 0) AS profit_total, ROUND(SUM(Quantity), 0) AS quantity_total FROM `Tableau Superstore`.orders GROUP BY 1 ORDER BY 2 DESC; Resultado: Essa consulta agrupa as vendas, o lucro e a quantidade por região, o que nos permite comparar o desempenho em diferentes áreas geográficas. Ela ajuda a identificar as regiões com melhor desempenho e aquelas que talvez precisem de mais análises. Pergunta: Qual é a margem de lucro de cada categoria de produto? [AGREGAÇÃO | PROPORÇÃO] (GRUPO) {FUNÇÕES DE AGREGAÇÃO | DIVISÃO DE NÚMEROS INTEIROS} SELECT Category, ROUND(SUM(Sales), 0) AS sales_total, ROUND(SUM(Profit), 0) AS profit_total, ROUND(SUM(Profit)/SUM(Sales), 2) AS profit_margin FROM `Tableau Superstore`.orders GROUP BY 1 ORDER BY 4 DESC; Resultado: Essa consulta calcula as vendas, o lucro e a margem de lucro de cada categoria de produto. Ao dividir o lucro pelas vendas, obtemos um índice de lucratividade, que ajuda a determinar quais categorias geram os maiores retornos. Vamos passar para o nível médio, onde analisaremos as alterações nas vendas ano a ano e calcularemos a porcentagem do total de vendas de cada categoria. Pergunta: Crie um relatório que mostre as vendas, a média de vendas e a alteração (delta) ano a ano (YoY) por ano. [WINDOW FUNCTION] (TREND | DELTA) {AGGREGATE FUNCTIONS | EXTRACTING PARTS OF DATE | DIFFERENCE BETWEEN TWO ROWS (DELTA)} SELECT DISTINCT EXTRACT(YEAR FROM DATE(STR_TO_DATE(order_date, '%m/%d/%Y'))) AS order_Year, ROUND(SUM(sales), 0) AS sales_total, ROUND(LAG(SUM(SALES)) OVER(ORDER BY EXTRACT(YEAR FROM DATE(STR_TO_DATE(order_date, '%m/%d/%Y')))), 0) AS sales_prev_year, (ROUND(SUM(sales), 0)) - (ROUND(LAG(SUM(SALES)) OVER(ORDER BY EXTRACT(YEAR FROM DATE(STR_TO_DATE(order_date, '%m/%d/%Y')))), 0)) AS sales_yoy_difference FROM `Tableau Superstore`.orders GROUP BY 1 ORDER BY 1; Resultado: Essa consulta calcula o total de vendas por ano e o compara com o ano anterior usando a função de janela LAG(). O resultado é uma diferença anual, que ajuda a rastrear o crescimento ou o declínio das vendas anuais em um relance. Pergunta: Qual é a porcentagem do total de vendas de cada categoria? [SUBQUERY] (GROUP | RATIO) {AGGREGATE FUNCTIONS | COMPUTING THE PERCENT OF TOTAL WITHIN A GROUP} SELECT DISTINCT category, ROUND(SUM(sales), 0) AS sales_total, ROUND((SUM(sales) / (SELECT SUM(sales) FROM `Tableau Superstore`.orders)) * 100, 0) AS percent_oftotal FROM `Tableau Superstore`.orders GROUP BY 1; Resultado: Essa consulta calcula as vendas de cada categoria como uma porcentagem das vendas totais. A subconsulta garante que o denominador permaneça fixo, permitindo uma comparação precisa do desempenho da categoria em relação a todo o conjunto de dados. Chegamos à parte final da análise, o nível difícil, portanto, vamos enfrentar um último desafio. Desta vez, identificaremos as duas subcategorias mais vendidas em cada categoria de produto para ver quais itens geram mais receita. Pergunta: Quais são as duas subcategorias mais vendidas em cada grupo? [WINDOW FUNCTION | CTE] (RANK) {AGGREGATE FUNCTIONS | RANK | CTE} WITH category_ranking AS ( SELECT Category, Sub_Category, ROUND(SUM(Sales), 0) AS sales_total, DENSE_RANK() OVER(PARTITION BY Category ORDER BY SUM(SALES) DESC) AS sub_category_rank FROM `Tableau Superstore`.orders GROUP BY 1, 2 ) SELECT Category, Sub_Category, sales_total FROM category_ranking WHERE sub_category_rank <= 2 ORDER BY 1, 3 DESC; Resultado: Essa consulta classifica as subcategorias dentro de cada categoria com base no total de vendas usando a função de janela DENSE_RANK(). Como estamos agrupando por categoria, não podemos usar uma função agregada simples para classificação. Em vez disso, a expressão de tabela comum (CTE) primeiro calcula as classificações e a seleção final filtra apenas as duas principais subcategorias por categoria. Resumo Neste artigo, exploramos 10 consultas SQL importantes que ajudam a responder a perguntas comerciais relacionadas a relatórios. Começamos com métricas básicas de KPI, passamos para a análise de tendências e previsões e terminamos com classificações mais avançadas e cálculos cumulativos. Ao trabalhar com essas consultas, você viu padrões comuns de SQL usados em relatórios de negócios, incluindo agregações, funções de janela e subconsultas. Quer você tenha acompanhado passo a passo ou simplesmente revisado os exemplos, essas técnicas podem servir como referência prática para analisar dados de vendas em SQL. Espero que esta análise tenha ajudado a esclarecer como aplicar a Folha de dicas para analistas de dados na prática. Se algo não estiver claro, se você identificar algum erro ou se tiver dúvidas sobre o artigo ou qualquer parte do código, vamos discutir e melhorar juntos! Terei prazer em me conectar no LinkedIne você pode encontrar mais exemplos e informações em meu perfil do Tableau Public ou em meu blog. Aguardamos sua opinião! Tags: análise de dados Projeto SQL