En los talleres de impresión offset, digital, gran formato y packaging —así como en cualquier planta de fabricación bajo pedido—, la rentabilidad no suele perderse en el departamento comercial, sino en la diferencia silenciosa entre el escandallo presupuestado y lo que ocurre realmente a pie de máquina: cambios de plancha que duplican el tiempo previsto, bobinas de papel con exceso de maculatura o paradas microscópicas por falta de secado del TAC.
Haber trabajado tanto a pie de prensa y guillotina como en el diseño de arquitecturas de Business Intelligence me ha permitido comprobar qué indicadores transforman de verdad una cuenta de resultados. En este artículo técnico construiremos desde cero las consultas SQL para auditar desviaciones de Órdenes de Trabajo (OT) y las fórmulas DAX en Power BI para monitorizar el OEE (Overall Equipment Effectiveness) y la merma de materias primas.
1. El Problema del «Agujero Negro» entre el Presupuesto y el Taller
Cuando un presupuestador calcula una Orden de Trabajo (por ejemplo, 10.000 catálogos encuadernados en rústica PUR), el ERP estima un coste teórico basado en estándares ideales:
- Tiempo de preparación (Arreglo / Make-ready): 35 minutos para entintado, registro de planchas y ajuste de plegadora.
- Maculatura técnica asignada: 250 pliegos de prueba para alcanzar el color ISO/FOGRA objetivo.
- Velocidad de crucero: 12.000 pliegos/hora.
Si el archivo llega con problemas de preimpresión (por ejemplo, textos negros compuestos en 4 tintas o exceso de cobertura de tinta que obliga a bajar la velocidad a 7.000 pliegos/hora para evitar el repintado), el margen neto del trabajo se evapora. Sin una capa analítica en SQL y Power BI que cruce los fichajes de planta (MES) con el presupuesto, la empresa sigue presupuestando a pérdidas trabajos similares mes tras mes.
2. Consultas SQL para Detectar Desviaciones de Escandallo y Mermas
Supongamos dos tablas principales en nuestro servidor SQL: fact_ordenes_trabajo (con los valores presupuestados) y fact_partes_produccion (con los tiempos y consumos reales fichados por los operarios en máquina). Utilizando CTEs (Common Table Expressions) y funciones de ventana (SUM() OVER), podemos extraer una vista analítica lista para Power BI:
WITH ResumenPlanta AS (
SELECT
ot_id,
maquina_id,
SUM(minutos_arreglo_real) AS min_arreglo_real,
SUM(minutos_tirada_real) AS min_tirada_real,
SUM(minutos_parada_averia) AS min_parada_no_planificada,
SUM(pliegos_buenos) AS pliegos_conformes,
SUM(pliegos_merma_real) AS pliegos_maculatura_real
FROM fact_partes_produccion
GROUP BY ot_id, maquina_id
)
SELECT
ot.ot_id,
ot.cliente_id,
ot.familia_producto,
ot.fecha_cierre,
rp.maquina_id,
-- Comparativa de Mermas de Papel (Pliegos)
ot.pliegos_merma_presupuestada,
rp.pliegos_maculatura_real,
(rp.pliegos_maculatura_real - ot.pliegos_merma_presupuestada) AS desviacion_pliegos,
-- Impacto económico de la desviación de tiempo + papel
ROUND(
((rp.min_arreglo_real + rp.min_tirada_real - ot.min_totales_presupuestados) / 60.0) * m.coste_hora_maquina
+ ((rp.pliegos_maculatura_real - ot.pliegos_merma_presupuestada) * ot.coste_unitario_pliego),
2) AS sobrecoste_total_eur,
-- Peso acumulado del sobrecoste por máquina (Window Function)
SUM(rp.pliegos_maculatura_real - ot.pliegos_merma_presupuestada)
OVER (PARTITION BY rp.maquina_id ORDER BY ot.fecha_cierre) AS merma_acumulada_anual
FROM fact_ordenes_trabajo ot
INNER JOIN ResumenPlanta rp ON ot.ot_id = rp.ot_id
INNER JOIN dim_maquinas m ON rp.maquina_id = m.maquina_id
WHERE ot.estado = 'CERRADA'
AND ot.fecha_cierre >= '2026-01-01';
Orden de Trabajo + Máquina, reduciendo el tamaño del archivo .pbix hasta en un 80%.
3. Anatomía del OEE en Talleres Gráficos e Industriales
El indicador estándar mundial para medir la productividad real de una máquina (desde una prensa offset de 8 cuerpos hasta un plotter de corte digital o una grabadora láser) es el OEE (Overall Equipment Effectiveness). Se descompone en tres factores multiplicativos:
| Componente del OEE | Fórmula Conceptual | Pérdidas que Penalizan el Indicador en Imprenta | Benchmark Industrial |
|---|---|---|---|
| 1. Disponibilidad | Tiempo Operativo / Tiempo Planificado | Averías mecánicas, esperas por falta de aprobación de PDF, cambios de bobina o limpieza de mantillas. | > 88% |
| 2. Rendimiento | Velocidad Real / Velocidad Nominal | Bajada de velocidad por papel difícil, exceso de tinta (TAC alto) o microparadas en el marcador de pliegos. | > 92% |
| 3. Calidad | Pliegos Buenos / Pliegos Totales Impresos | Maculatura de arranque, fueras de registro, variaciones de Delta E o manchas de repintado. | > 97% |
| OEE Global | Disponibilidad × Rendimiento × Calidad | Combina todas las ineficiencias de tiempo, velocidad y desperdicio de material. | > 78% (Clase Mundial: 85%) |
4. Implementación de Medidas DAX para OEE y Mermas en Power BI
Un error grave en muchos cuadros de mando industriales es crear una columna calculada con el OEE de cada orden de trabajo y luego promediarla con AVERAGE(). Eso otorga el mismo peso a un trabajo de 15 minutos que a una campaña editorial de 40 horas. La forma matemáticamente rigurosa en DAX consiste en evaluar cada razón agregada en el contexto de filtro activo:
// 1. Medida de Disponibilidad
OEE_Disponibilidad =
VAR TiempoPlanificado = SUM(Fact_Produccion[Minutos_Turno_Planificado])
VAR TiempoParadas = SUM(Fact_Produccion[Minutos_Parada_No_Planificada])
VAR TiempoOperativo = TiempoPlanificado - TiempoParadas
RETURN
DIVIDE(TiempoOperativo, TiempoPlanificado, 0)
// 2. Medida de Rendimiento
OEE_Rendimiento =
VAR PliegosTotales = SUM(Fact_Produccion[Pliegos_Buenos]) + SUM(Fact_Produccion[Pliegos_Merma])
VAR TiempoOperativoHoras = DIVIDE(
SUM(Fact_Produccion[Minutos_Turno_Planificado]) - SUM(Fact_Produccion[Minutos_Parada_No_Planificada]),
60, 0
)
VAR CapacidadTeorica = SUMX(
Fact_Produccion,
DIVIDE(Fact_Produccion[Minutos_Operativos], 60, 0) * RELATED(Dim_Maquinas[Velocidad_Nominal_Pliegos_Hora])
)
RETURN
DIVIDE(PliegosTotales, CapacidadTeorica, 0)
// 3. Medida de Calidad (Inversa de la Tasa de Merma)
OEE_Calidad =
VAR PliegosBuenos = SUM(Fact_Produccion[Pliegos_Buenos])
VAR PliegosTotales = PliegosBuenos + SUM(Fact_Produccion[Pliegos_Merma])
RETURN
DIVIDE(PliegosBuenos, PliegosTotales, 0)
// 4. OEE Global Ponderado
OEE_Global_% =
[OEE_Disponibilidad] * [OEE_Rendimiento] * [OEE_Calidad]
5. Del Dato a la Acción en Preimpresión y Compras
Cuando desplegamos este modelo en Power BI y lo cruzamos con las dimensiones de Proveedor de Papel, Tipo de Acabado y Origen del Diseño, emergen patrones accionables inmediatos:
- Auditoría de Proveedores de Sustrato: A menudo un papel estucado un 4% más barato por tonelada provoca un 12% más de paradas en el marcador de entrada por electricidad estática o corte irregular. El dashboard revela el coste total real por pliego impreso vendible.
- Detección de Cuellos de Botella en Preimpresión: Si el código de parada «Espera por corrección de arte final / sangrado / troquel» supera las 10 horas mensuales, se justifica de inmediato implantar un pipeline automático de validación PDF o formar a los clientes con herramientas como nuestra Suite de Calculadoras de Preimpresión.
- Recalibración Automática de Tarifas: Las familias de producto cuya desviación media de escandallo sea sistemáticamente negativa ajustan sus curvas de arreglo en el ERP basadas en percentiles históricos reales (P75), protegiendo el margen comercial.
6. Preguntas Frecuentes sobre Control de Producción con SQL y Power BI
¿Cómo se calcula el OEE (Eficiencia General de los Equipos) en Power BI?
El OEE se obtiene multiplicando tres medidas DAX independientes: Disponibilidad × Rendimiento × Calidad. Cada uno de los tres componentes debe calcularse agregando primero los numeradores y denominadores mediante SUM() o SUMX() y dividiéndolos con DIVIDE() para mantener la ponderación correcta en cualquier vista temporal.
¿Qué es la desviación de escandallo en producción gráfica e industrial?
Es la diferencia entre el coste teórico presupuestado antes de fabricar (tiempos estándar de preparación, velocidad teórica y merma prevista) y el coste real imputado en taller al finalizar la orden de fabricación. Analizarla por cliente y máquina permite detectar presupuestos mal dimensionados.
¿Cómo diferenciar la merma técnica inevitable de la merma por fallo de calidad?
En la base de datos SQL debemos separar la maculatura de arranque estándar (los pliegos fijos necesarios para entintar y casar el registro, ej. 150 pliegos) de la merma extraordinaria (tiradas rechazadas por repintado, perfil ICC incorrecto o guillotina descalibrada). Solo la segunda representa una pérdida evitable de no-calidad.