8th May 2025 Lectura de 12 minutos Análisis de ventas reales con la hoja de trucos del analista Scott Davies análisis de datos Proyecto SQL Índice Resumen Cómo preparar los datos Encontrar las tendencias generales Determinación de tendencias de ventas Recapitulación ¿Ha utilizado alguna vez la hoja de trucos del analista de datos para analizar un conjunto de datos empresariales? En este artículo, podrá ver los comandos de la hoja de trucos en acción. Exploraré un conjunto de datos de ventas del mundo real para responder a 10 preguntas empresariales clave utilizando SQL. Siguiendo la guía de la hoja de referencia SQL para el análisis de datos, demostraré cómo las consultas SQL pueden ayudar a analizar tendencias, medir el rendimiento y extraer información significativa de los datos de ventas. Para ello, utilizaremos un conjunto de datos abierto de Tableau que contiene datos de ventas de artículos para el hogar, como escritorios y artículos de papelería. Este conjunto de datos ofrece una forma práctica de explorar cuestiones relacionadas con la elaboración de informes empresariales y ver cómo se puede utilizar SQL para descubrir tendencias útiles. En lugar de un estudio de caso formal, este artículo se centra en la asignación de preguntas empresariales a consultas SQL generales. Verá cómo las técnicas SQL se alinean con los retos de análisis de datos del mundo real y cómo surgen diferentes patrones métricos en los informes. Al final, podrá reconocer estos patrones y aplicarlos a su propio trabajo de elaboración de informes SQL. ¡A trabajar! Resumen Este análisis está estructurado en dos partes principales. En primer lugar, examino las tendencias generales, como las ventas totales, los beneficios y la cantidad vendida. A continuación, me centro en las tendencias de ventas, identificando patrones a lo largo del tiempo, por categoría y en diferentes segmentos empresariales. Para responder a estas preguntas, utilizo técnicas SQL como agregaciones, ratios, funciones de ventana y subconsultas. Los patrones métricos comunes, como la agrupación de datos, el seguimiento de tendencias, el cálculo de medias móviles y la clasificación de resultados, ayudan a estructurar el análisis. La hoja de trucos SQL para el análisis de datos sirve de referencia para funciones clave como GROUP BY, clasificación, totales y extracciones de fechas. He añadido etiquetas en los ejemplos siguientes para clasificarlos: corchetes para las técnicas SQL [SQL], paréntesis para los patrones métricos (METRIC) y llaves para las referencias de la hoja de trucos {SHEET}. Estas etiquetas ayudan a organizar el análisis de cada ejemplo. Los ejemplos están organizados por nivel de dificultad, empezando por consultas sencillas e incorporando gradualmente técnicas más avanzadas. Esto facilita el seguimiento y la aplicación de enfoques similares a otros conjuntos de datos empresariales. Cómo preparar los datos Para empezar el análisis, necesitamos preparar el conjunto de datos. Yo utilizo un conjunto de datos abierto de Tableau Public, que contiene datos de ventas de artículos para el hogar, como escritorios y artículos de papelería. Dado que se utiliza ampliamente en la elaboración de informes empresariales, es un gran recurso para practicar las consultas SQL. A continuación encontrará instrucciones paso a paso para descargar el conjunto de datos, importarlo a un entorno SQL y realizar pequeños ajustes para limpiar los datos. Descargue el conjunto de datos de Tableau Público. Vaya a Learn → Sample Data → Business → Superstore Sales. Descargue el conjunto de datos Superstore Sales. Abra el conjunto de datos en Excel. Los datos relevantes se encuentran en la pestaña "Pedidos". Abra el archivo .xls Vaya a la pestaña "Pedidos" de la hoja de cálculo Descarga de SQL IDE - opcional para quien quiera seguir y recrear las métricas. Estoy utilizando MySQL Workbench y MySQL Community Server. Si desea utilizar el mismo, las descargas están disponibles a continuación. Mostraré los pasos para importar el conjunto de datos a MySQL Workbench. Enlaces de descarga: MySQL Workbench: https://dev.mysql.com/downloads/workbench/ Servidor de la Comunidad MySQL: https://dev.mysql.com/downloads/mysql/ Prefiero usar MySQL Workbench con el Community Server, así que los siguientes pasos son para configurarlo: Primero, confirmo que la conexión a la instancia local está establecida. A continuación, creo un nuevo esquema siguiendo estas instrucciones: Haga clic en la conexión de instancia local. Seleccione Esquemas en el menú superior. Haga clic con el botón derecho y seleccione Crear esquema. Nombre el esquema Tableau Superstore. Importe el archivo .xls como .csv en Tablas utilizando el Asistente de Importación de Tablas de Datos (convierta primero .xls a .csv). Un método alternativo es importarlo como JSON utilizando un conversor JSON (enlace a las instrucciones, que es el método que yo utilicé). Configure los ajustes de importación y elija el tipo de campo por defecto para las diferentes columnas de origen. No incluya la última fila en blanco. Antes del último paso, realice cambios manuales en Alter Table: elimine los espacios de los nombres de las columnas y sustitúyalos por guiones bajos (_). El último paso es hacer clic con el botón derecho y seleccionar Crear esquema. Ya está. Enhorabuena, la parte más complicada ya ha pasado. Nombre su esquema: Tableau Superstore debería estar bien. Usa el Asistente de Importación de Datos de Tabla para añadir el archivo, como se muestra en la captura de pantalla. Cargue el archivo .csv. O, si está convirtiendo a JSON, cargue el archivo JSON en su lugar. Para ello, utilice un conversor de .csv a .json, como se muestra en la imagen. Mantenga todos los campos seleccionados, pero excluya el campo "en blanco" y establezca todos los demás como campos de "texto". Después de esto, lo único que queda por hacer es hacer clic con el botón derecho del ratón en la tabla orders y seleccionar Alter Table. La preparación de los datos ha finalizado y estamos listos para pasar al análisis. Bonus agradable: siempre puedes encontrar todas las peticiones y piezas de código del artículo en la página dedicada de GitHub. Encontrar las tendencias generales ¡Vamos a calentar en el nivel fácil! Para comenzar el análisis, empezaremos con algunos indicadores clave de rendimiento (KPI) para obtener una visión de alto nivel de las ventas, los beneficios y la cantidad vendida. Estas consultas ayudan a resumir el conjunto de datos y proporcionan una instantánea rápida del rendimiento general de la empresa. Indicadores clave de rendimiento: Ventas totales, Beneficios y Cantidad vendida. Pregunta: ¿Cuál es el total de ventas, beneficios y cantidad vendida? [AGREGACIÓN] (GLOBAL) {FUNCIONES DE AGREGACIÓN} 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: Esta consulta calcula las ventas totales, el beneficio y la cantidad vendida en todo el conjunto de datos. Proporciona una visión general del rendimiento global de la empresa. Métricas KPI: Tendencias mensuales y anuales Pregunta: ¿Cuáles fueron las ventas, los beneficios y la cantidad vendida mensual/año? [AGREGACIÓN] (TENDENCIA) {FUNCIONES DE AGREGACIÓN | EXTRACCIÓN DE PARTES DE LA FECHA} 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: Esta consulta desglosa las ventas, los beneficios y la cantidad por año y mes, lo que nos ayuda a identificar tendencias a lo largo del tiempo. Es útil para detectar patrones estacionales o crecimiento interanual. Indicadores clave de rendimiento: Ventas medias, beneficios y cantidad vendida Pregunta: ¿Cuál fue la media de ventas, beneficios y cantidad vendida? [AGREGACIÓN] (GLOBAL) {FUNCIONES DE AGREGACIÓN} 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: En lugar de los valores totales, esta consulta calcula la media de ventas, beneficios y cantidad vendida por pedido. Es útil para entender el tamaño típico de las transacciones y compararlo con diferentes periodos de tiempo o segmentos de negocio. Espero que haya conseguido superar el primer nivel de análisis. Ahora, demos un paso más con consultas más avanzadas. El nivel medio es el siguiente, empezando por un cálculo de medias móviles, que ayuda a suavizar las fluctuaciones a corto plazo y a identificar las tendencias de ventas a lo largo del tiempo. Este enfoque nos permite prever las ventas futuras analizando los patrones de los meses anteriores. Pregunta: ¿Cómo podemos prever las ventas por mes? [FUNCIÓN DE VENTANA] (TENDENCIA | MEDIA MOVIL) {FUNCIONES AGREGADAS | EXTRACCIÓN DE PARTES DE LA FECHA | MEDIA MOVIL} 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: Esta consulta calcula los totales de ventas mensuales y aplica una media móvil sobre los últimos tres meses (incluyendo el actual). Esto ayuda a identificar las tendencias de ventas a lo largo del tiempo suavizando las fluctuaciones a corto plazo, lo que facilita la previsión del rendimiento futuro. Espero que estés al día. Ahora, abordemos una consulta más avanzada. El nivel duro es el siguiente, en el que calculamos una suma acumulada de las ventas de 2017. Este total acumulado ayuda a seguir la progresión de las ventas mes a mes, ofreciendo una imagen clara del rendimiento general a lo largo del año. Pregunta: ¿Cuál es la suma acumulada de ventas para 2017? Mostrar por mes. [FUNCIÓN DE VENTANA | CTE] (TENDENCIA | CUMULATIVA) {FUNCIONES AGREGADAS | EXTRACCIÓN DE PARTES DE FECHA | TOTAL CORRIDO | 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: Esta consulta primero calcula los totales de ventas mensuales para 2017 utilizando una Expresión de tabla común (CTE). A continuación, aplica un total acumulado utilizando una función de ventana para sumar las ventas progresivamente a lo largo de los meses. Esto ayuda a analizar el crecimiento acumulado y a detectar tendencias de ventas dentro del año. Determinación de tendencias de ventas Empecemos de nuevo por el nivel fácil, pero esta vez centrándonos en la información regional y por categorías. Estas consultas ayudarán a desglosar las métricas clave por diferentes segmentos de la empresa, ofreciendo una imagen más clara que si nos limitamos a mirar los totales globales. Pregunta: ¿Cuáles son las ventas totales, los beneficios y las cantidades de cada región? [AGREGACIÓN] (GRUPO) {FUNCIONES DE AGREGACIÓN} 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: Esta consulta agrupa las ventas, los beneficios y las cantidades por región, lo que nos permite comparar el rendimiento de las distintas zonas geográficas. Ayuda a identificar las regiones con mejores resultados y las que necesitan un análisis más profundo. Pregunta: ¿Cuál es el margen de beneficio de cada categoría de productos? [AGREGACIÓN | RATIO] (GRUPO) {FUNCIONES DE AGREGACIÓN | DIVISIÓN ENTERA} 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: Esta consulta calcula las ventas, el beneficio y el margen de beneficio de cada categoría de productos. Al dividir el beneficio entre las ventas, obtenemos un ratio de rentabilidad, que ayuda a determinar qué categorías generan los mayores beneficios. Pasemos al nivel medio, donde analizaremos los cambios en las ventas interanuales (YoY) y calcularemos el porcentaje de ventas totales de cada categoría. Pregunta: Cree un informe que muestre las ventas, las ventas medias y el cambio interanual (delta) por año. [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: Esta consulta calcula las ventas totales por año y las compara con el año anterior utilizando la función de ventana LAG(). El resultado es una diferencia interanual, que ayuda a realizar un seguimiento del crecimiento o descenso de las ventas anuales de un vistazo. Pregunta: ¿Cuál es el porcentaje de ventas totales de cada categoría? [SUBQUERY] (GROUP | RATIO) {FUNCIONES DE AGRUPACIÓN | CÁLCULO DEL PORCENTAJE DEL TOTAL DENTRO DE UN GRUPO} 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: Esta consulta calcula las ventas de cada categoría como porcentaje de las ventas totales. La subconsulta garantiza que el denominador permanece fijo, lo que permite una comparación precisa del rendimiento de la categoría en relación con todo el conjunto de datos. Hemos llegado a la parte final del análisis, el nivel difícil, así que vamos a afrontar un último reto. Esta vez, identificaremos las dos subcategorías más vendidas dentro de cada categoría de productos para ver qué artículos generan más ingresos. Pregunta: ¿Cuáles son las dos subcategorías más vendidas dentro de cada grupo? [FUNCIÓN DE VENTANA | CTE] (RANGO) {FUNCIONES AGREGADAS | RANGO | 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: Esta consulta clasifica las subcategorías dentro de cada categoría basándose en las ventas totales utilizando la función de ventana DENSE_RANK(). Como estamos agrupando por categoría, no podemos utilizar una simple función agregada para la clasificación. En su lugar, la Expresión de tabla común (CTE) calcula primero las clasificaciones y la selección final filtra sólo las dos subcategorías principales por categoría. Recapitulación En este artículo, hemos explorado 10 consultas SQL clave que ayudan a responder preguntas empresariales relacionadas con los informes. Empezamos con métricas básicas de KPI, pasamos a análisis de tendencias y previsiones, y terminamos con cálculos acumulativos y de clasificación más avanzados. Al trabajar con estas consultas, usted ha visto patrones SQL comunes utilizados en los informes de negocios, incluyendo agregaciones, funciones de ventana y subconsultas. Tanto si ha seguido paso a paso como si simplemente ha revisado los ejemplos, estas técnicas pueden servirle de referencia práctica para analizar datos de ventas en SQL. Espero que este análisis le haya ayudado a aclarar cómo aplicar la Hoja de trucos del analista de datos en la práctica. Si hay algo que no te ha quedado claro, si detectas algún error o si tienes alguna pregunta sobre el artículo o sobre algún fragmento de código, ¡discutimos y mejoramos juntos! Estaré encantado de conectar contigo en LinkedIny puede encontrar más ejemplos y opiniones en mi perfil público de perfil público de Tableau o en mi blog. Espero sus comentarios. Tags: análisis de datos Proyecto SQL