1. Faro

Nivel 7 · La trampa del mes parcial

La solicitud

De Megan Collins, Directora de Ventas

“Es 15 de diciembre de 2025 y el panel dice que los ingresos de diciembre son $164,124.86 frente a $292,364.40 de noviembre: un 43.9% menos. Mi equipo está en pánico. ¿Qué deberíamos comparar en su lugar?”

Tu objetivo

Elige la comparación que da una lectura justa de lo que va de diciembre de 2025.

En la mañana del 15 de diciembre de 2025, los ingresos completados del 1 al 14 de diciembre son $164,124.86. Todo noviembre de 2025 fue $292,364.40. ¿Qué comparación debería reemplazar el -43.9% del panel?

Elige una respuesta y luego compruébala.

La lección

Las cifras de periodo contra periodo solo son justas cuando ambos periodos están completos y son comparables. Un panel que se actualiza a mitad de mes rompe la primera regla todos los días.

Qué hizo el panel

La consulta detrás del recuadro era una suma mensual simple, y luego un cálculo de crecimiento:

-- monthly revenue, then (this month - last month) / last month
SELECT CAST(DATE_TRUNC('month', o.order_date) AS DATE) AS month,
       SUM(i.quantity * i.unit_price * (1 - i.discount_pct / 100.0)) AS net_revenue
FROM orders AS o
JOIN order_items AS i ON i.order_id = o.order_id
WHERE o.status = 'completed' AND i.quantity > 0
GROUP BY 1;

El 15 de diciembre la fila de diciembre contiene 14 días y la de noviembre 30. El -43.9% es el calendario hablando, no el negocio.

El mes hasta la fecha, bien hecho

Compara los mismos días del mismo mes de un año antes:

SELECT
  SUM(r) FILTER (WHERE d >= '2025-12-01' AND d < '2025-12-15') AS mtd_2025,
  SUM(r) FILTER (WHERE d >= '2024-12-01' AND d < '2024-12-15') AS mtd_2024
FROM (
  SELECT o.order_date AS d,
         i.quantity * i.unit_price * (1 - i.discount_pct / 100.0) AS r
  FROM orders AS o
  JOIN order_items AS i ON i.order_id = o.order_id
  WHERE o.status = 'completed' AND i.quantity > 0
) AS lines;

Eso devuelve $164,124.86 y $151,464.25: diciembre sube un 8.4% hasta ahora. Las ventanas usan >= start AND < end para que una marca de tiempo tarde el día 14 quede incluida y nada del día 15 se cuele.

¿Por qué no la primera mitad de noviembre?

Del 1 al 14 de noviembre de 2025 es el mismo número de días ($112,031.17), pero está antes del Black Friday, mientras que principios de diciembre es plena temporada de regalos. La comparación dice +46.5%, que es en gran parte la temporada otra vez. El año a año sobre los mismos días elimina el patrón estacional porque el año pasado tuvo el mismo calendario.

Una trampa más de periodo parcial

Los ingresos completados de los últimos días también están incompletos de otra manera: casi todos los pedidos pendientes de Harbor & Pine están en los últimos días de 2025, y todavía no están “completed”. Los periodos recientes filtrados con status = 'completed' siguen creciendo un tiempo después de terminar. Cuando reportes el periodo más reciente, dilo.

Errores comunes

  • Comparar un periodo parcial con uno completo. Toda actualización a mitad de mes muestra una “caída”.
  • Arreglar el número de días pero ignorar la temporada. Principios de noviembre no es comparable con principios de diciembre.
  • Usar promedios diarios en un mes sin terminar sin dividir entre los días transcurridos.

En SQL Server

Los límites del mes hasta la fecha salen de DATEFROMPARTS(YEAR(@d), MONTH(@d), 1) y los mismos días del año pasado de DATEADD(year, -1, ...). No hay FILTER, así que usa SUM(CASE WHEN ... THEN r END). EOMONTH(@d) da el último día de un mes cuando necesitas un límite de mes completo.

Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.