Manufacturing Analytics in Power BI: OEE, Quality, and Throughput

Build a Power BI manufacturing dashboard covering OEE calculation, quality metrics, production throughput, downtime analysis, and SPC charts — with complete DAX formulas.

E
ECOSIRE Research and Development Team
|19 de março de 202612 min de leitura2.7k Palavras|

Parte da nossa série Manufacturing in the AI Era

Leia o guia completo

Análise de manufatura no Power BI: OEE, qualidade e rendimento

Instalações de fabricação de classe mundial operam com 85%+ OEE. O fabricante médio funciona a 60%. Essa diferença de 25 pontos percentuais se traduz diretamente na capacidade – uma instalação que melhora de 60% para 85% OEE acrescenta 41% mais produção sem uma única máquina nova ou alugada. A diferença entre a classe mundial e a média quase sempre não é o equipamento – é a visibilidade para ver o desperdício e os dados para eliminá-lo.

O Power BI, conectado ao MES (Manufacturing Execution System) e aos dados do ERP, fornece essa visibilidade. Este guia cria uma plataforma completa de análise de manufatura que abrange cálculo de OEE, gráficos SPC de qualidade, análise de causa raiz de tempo de inatividade e gerenciamento de rendimento — com as fórmulas DAX precisas que os engenheiros de manufatura precisam.

Principais conclusões

  • OEE = Disponibilidade × Desempenho × Qualidade (classe mundial = 85%+)
  • Cada componente OEE requer fluxos de dados separados: registros de tempo de inatividade, contagens de produção, registros de sucata
  • Gráficos SPC (Controle Estatístico de Processo) no Power BI usam recursos visuais personalizados ou limites de controle calculados
  • A análise de Pareto do tempo de inatividade (os 20% principais motivos causam 80% do tempo de inatividade) impulsiona a melhoria priorizada
  • O rendimento na primeira passagem (FPY) e os defeitos por milhão de oportunidades (DPMO) são os principais KPIs de qualidade
  • A análise de rendimento compara a capacidade real versus a teórica usando a teoria do gargalo
  • Os conjuntos de dados de streaming do Power BI permitem a atualização de painéis OEE quase em tempo real a cada minuto
  • Integração ERP (Odoo Manufacturing, SAP PP, Dynamics 365 SCM) fornece contexto de ordem de serviço

Modelo de dados para análise de manufatura

Tabelas principais de fabricação

Production_Runs (uma linha por execução de produção/ordem de serviço):

ColunaDescrição
CÓDIGO0ID da ordem de serviço ou execução de produção
CÓDIGO0Dimensão FK para máquina
CÓDIGO0FK para Produto
CÓDIGO0FK para mudança
CÓDIGO0Execute data e hora de início
CÓDIGO0Execute data e hora de término
CÓDIGO0Início programado
CÓDIGO0Fim programado
CÓDIGO0Quantidade prevista de produção
CÓDIGO0Unidades reais produzidas
CÓDIGO0Unidades aprovadas na verificação de qualidade
CÓDIGO0Unidades defeituosas
CÓDIGO0Unidades que necessitam de retrabalho
CÓDIGO0Segundos por unidade na velocidade de projeto

Downtime_Events (uma linha por parada):

ColunaDescrição
CÓDIGO0ID exclusivo
CÓDIGO0FK para máquina
CÓDIGO0FK para produção (se aplicável)
CÓDIGO0Início do tempo de inatividade
CÓDIGO0Fim do tempo de inatividade
CÓDIGO0Duração total do tempo de inatividade
CÓDIGO0Planejado (PM, mudança) / Não planejado
CÓDIGO0Código de razão específico
CÓDIGO0Descrição
CÓDIGO0Sinalizador de manutenção planejada
CÓDIGO0Tempo até a resposta do técnico
CÓDIGO0Tempo de reparo ativo

Quality_Events (uma linha por defeito/inspeção):

ColunaDescrição
CÓDIGO0ID exclusivo
CÓDIGO0FK para execução de produção
CÓDIGO0FK para máquina
CÓDIGO0Data/hora da inspeção
CÓDIGO0FK para tipo de defeito
CÓDIGO0Número de defeitos encontrados
CÓDIGO0Unidades inspecionadas
CÓDIGO0Medição variável (para SPC)
CÓDIGO0Booleano — dentro da tolerância

Dim_Máquina:

  • MachineID, MachineName, Line, Cell, Department, MachineType, IdealRunRate, PlannedCapacity

Dim_Shift:

  • ShiftID, ShiftName, StartTime, EndTime, PlannedMinutes, PlannedBreakMinutes

Cálculo de OEE no Power BI

OEE = Disponibilidade × Desempenho × Qualidade

Disponibilidade

Disponibilidade = Tempo de Execução Real / Tempo de Produção Planejado

// Planned Production Time (from shift schedule minus planned downtime)
Planned Production Time =
SUMX(
    Production_Runs,
    DATEDIFF(Production_Runs[PlannedStartTime],
              Production_Runs[PlannedEndTime], MINUTE)
)

// Unplanned Downtime (excludes scheduled maintenance, changeovers)
Unplanned Downtime =
CALCULATE(
    SUM(Downtime_Events[DurationMinutes]),
    Downtime_Events[DowntimeCategory] = "Unplanned"
)

// Changeover Time (planned but reduces availability)
Changeover Time =
CALCULATE(
    SUM(Downtime_Events[DurationMinutes]),
    Downtime_Events[DowntimeReasonCode] = "CHANGEOVER"
)

// Actual Run Time
Actual Run Time = [Planned Production Time] - [Unplanned Downtime] - [Changeover Time]

// OEE Availability
Availability =
DIVIDE([Actual Run Time], [Planned Production Time], 0)

Desempenho

Desempenho = (Tempo de Ciclo Ideal × Contagem Total) / Tempo de Execução Real Ou equivalentemente: Produção Real / Produção Máxima Teórica

// Theoretical Maximum Output at ideal run rate
Theoretical Max Output =
SUMX(
    Production_Runs,
    [Actual Run Time Per Run] / Production_Runs[IdealCycleTime]
)

// Actual total output (good + scrap + rework)
Total Output =
SUM(Production_Runs[ActualQuantity])

// OEE Performance
Performance =
DIVIDE([Total Output], [Theoretical Max Output], 0)

// Performance per machine (for benchmarking)
Machine Performance =
DIVIDE(
    SUMX(Production_Runs, Production_Runs[ActualQuantity]),
    SUMX(Production_Runs,
        DATEDIFF(Production_Runs[StartTime], Production_Runs[EndTime], MINUTE) /
        RELATED(Dim_Machine[IdealCycleTime]) * 60
    ),
    0
)

Qualidade

Qualidade = Boa Produção / Produção Total (exclui todos os defeitos)

// Good Quantity (first pass, no rework)
Good Quantity = SUM(Production_Runs[GoodQuantity])

// Total Quantity Produced (good + scrap + rework)
Total Quantity = SUM(Production_Runs[ActualQuantity])

// OEE Quality
Quality Rate =
DIVIDE([Good Quantity], [Total Quantity], 0)

// First Pass Yield (no rework, no scrap)
First Pass Yield =
DIVIDE(
    SUM(Production_Runs[GoodQuantity]),
    SUM(Production_Runs[ActualQuantity]),
    0
)

OEE geral

// Overall Equipment Effectiveness
OEE =
[Availability] * [Performance] * [Quality Rate]

// OEE Status (for conditional formatting)
OEE Status =
SWITCH(TRUE(),
    [OEE] >= 0.85, "World Class",    -- 85%+
    [OEE] >= 0.75, "Good",           -- 75-85%
    [OEE] >= 0.60, "Acceptable",     -- 60-75%
    "Poor"                            -- <60%
)

// OEE Loss Analysis (what is the primary constraint)
Primary OEE Constraint =
SWITCH(TRUE(),
    [Availability] < [Performance] && [Availability] < [Quality Rate], "Availability",
    [Performance] < [Quality Rate], "Performance",
    "Quality"
)

// OEE trend (for sparkline visualization)
OEE Weekly Avg =
CALCULATE(
    [OEE],
    DATESINPERIOD(Date[Date], LASTDATE(Date[Date]), -7, DAY)
)

Análise de tempo de inatividade

KPIs de tempo de inatividade e Pareto

// Total Unplanned Downtime Hours
Unplanned Downtime Hours =
DIVIDE(
    CALCULATE(
        SUM(Downtime_Events[DurationMinutes]),
        Downtime_Events[DowntimeCategory] = "Unplanned"
    ),
    60,
    0
)

// Mean Time Between Failures (MTBF)
MTBF =
DIVIDE(
    [Actual Run Time],
    CALCULATE(COUNTROWS(Downtime_Events),
              Downtime_Events[DowntimeCategory] = "Unplanned"),
    0
)

// Mean Time to Repair (MTTR)
MTTR =
AVERAGEX(
    FILTER(Downtime_Events, Downtime_Events[DowntimeCategory] = "Unplanned"),
    Downtime_Events[RepairTimeMinutes]
)

// Downtime % by reason (for Pareto chart)
Downtime Pareto % =
DIVIDE([Unplanned Downtime Hours],
    CALCULATE([Unplanned Downtime Hours], ALL(Downtime_Events[DowntimeReasonCode])),
    0
)

// Cumulative Downtime % (for Pareto 80/20 line)
Cumulative Downtime % =
DIVIDE(
    SUMX(
        FILTER(
            ALL(Downtime_Events[DowntimeReasonCode]),
            RANKX(ALL(Downtime_Events[DowntimeReasonCode]),
                  [Unplanned Downtime Hours], , DESC) <=
            RANKX(ALL(Downtime_Events[DowntimeReasonCode]),
                  [Unplanned Downtime Hours], , DESC)
        ),
        [Unplanned Downtime Hours]
    ),
    CALCULATE([Unplanned Downtime Hours], ALL(Downtime_Events[DowntimeReasonCode])),
    0
)

Mapa de calor do tempo de inatividade

Crie um mapa térmico de tempo de inatividade por máquina x hora do dia para identificar padrões relacionados aos turnos:

// Downtime by Hour of Day (for heatmap rows)
Downtime by Hour =
CALCULATE(
    SUM(Downtime_Events[DurationMinutes]),
    Downtime_Events[HourOfDay] = SELECTEDVALUE(HourDim[Hour])
)

Análise de qualidade: gráficos SPC

Os gráficos de controle estatístico de processo monitoram se um processo está sob controle. O Power BI cria gráficos SPC usando cálculos de limite de controle no DAX.

Limites de controle para gráfico de barras X

// Process Mean (X-bar)
Process Mean =
AVERAGE(Quality_Events[MeasuredValue])

// Standard Deviation of measurements
Process StdDev =
STDEV.P(Quality_Events[MeasuredValue])

// Upper Control Limit (UCL = mean + 3σ)
UCL = [Process Mean] + 3 * [Process StdDev]

// Lower Control Limit (LCL = mean - 3σ)
LCL = [Process Mean] - 3 * [Process StdDev]

// Upper Warning Limit (mean + 2σ)
UWL = [Process Mean] + 2 * [Process StdDev]

// Lower Warning Limit (mean - 2σ)
LWL = [Process Mean] - 2 * [Process StdDev]

// Out of Control flag (point outside 3σ limits)
Out of Control =
IF(
    Quality_Events[MeasuredValue] > [UCL] ||
    Quality_Events[MeasuredValue] < [LCL],
    "Out of Control",
    "In Control"
)

// Process Capability Index (Cpk)
Cpk =
MIN(
    DIVIDE([UCL] - [Process Mean], 3 * [Process StdDev], 0),
    DIVIDE([Process Mean] - [LCL], 3 * [Process StdDev], 0)
)

Principais KPIs de qualidade

// Defects per Million Opportunities (DPMO)
DPMO =
DIVIDE(
    SUM(Quality_Events[DefectCount]),
    SUM(Quality_Events[SampleSize]) * [Opportunities per Unit],
    0
) * 1000000

// Sigma Level (from DPMO)
Sigma Level =
SWITCH(TRUE(),
    [DPMO] < 3.4, 6,
    [DPMO] < 233, 5,
    [DPMO] < 6210, 4,
    [DPMO] < 66807, 3,
    [DPMO] < 308537, 2,
    1
)

// Defect Rate %
Defect Rate = DIVIDE(SUM(Quality_Events[DefectCount]), SUM(Quality_Events[SampleSize]), 0)

// Scrap Rate
Scrap Rate =
DIVIDE(
    SUM(Production_Runs[ScrapQuantity]),
    SUM(Production_Runs[ActualQuantity]),
    0
)

// Cost of Poor Quality (COPQ)
COPQ =
SUMX(
    Production_Runs,
    (Production_Runs[ScrapQuantity] + Production_Runs[ReworkQuantity]) *
    RELATED(Dim_Product[StandardCost])
)

Análise de rendimento

KPIs de rendimento de produção

// Actual Throughput (units per hour)
Throughput =
DIVIDE(
    SUM(Production_Runs[ActualQuantity]),
    SUMX(Production_Runs,
        DATEDIFF(Production_Runs[StartTime], Production_Runs[EndTime], HOUR)
    ),
    0
)

// Theoretical Maximum Throughput
Max Throughput =
SUMX(
    Dim_Machine,
    60 / Dim_Machine[IdealCycleTime]  -- Units per minute × 60
) * 60  -- Per hour

// Capacity Utilization
Capacity Utilization =
DIVIDE([Throughput], [Max Throughput], 0)

// Schedule Attainment (actual vs planned quantity)
Schedule Attainment =
DIVIDE(
    SUM(Production_Runs[ActualQuantity]),
    SUM(Production_Runs[PlannedQuantity]),
    0
)

// Changeover Time (as % of planned time)
Changeover % =
DIVIDE(
    [Changeover Time],
    [Planned Production Time],
    0
)

Análise de balanceamento de linha

Identifique máquinas gargalos usando comparação de rendimento:

// Machine Throughput Rate (for bottleneck identification)
Machine Throughput Rate =
DIVIDE(
    CALCULATE(SUM(Production_Runs[GoodQuantity])),
    CALCULATE(
        DATEDIFF(MIN(Production_Runs[StartTime]),
                 MAX(Production_Runs[EndTime]), HOUR)
    ),
    0
)

// Bottleneck indicator (lowest throughput machine in a line)
Is Bottleneck =
IF(
    [Machine Throughput Rate] = MINX(
        FILTER(ALL(Dim_Machine), Dim_Machine[Line] = SELECTEDVALUE(Dim_Machine[Line])),
        [Machine Throughput Rate]
    ),
    "Bottleneck",
    "OK"
)

Arquitetura do painel de fabricação

Página 1: Resumo do OEE

  • Medidor OEE (meta atual vs classe mundial de 85%)
  • Disponibilidade, Desempenho, Qualidade — três cartões KPI
  • Tendência OEE 30 dias (gráfico de linhas)
  • OEE por máquina (gráfico de barras, classificado de baixo para alto)
  • OEE por turno (gráfico de barras — identifique diferenças de desempenho nos turnos)
  • Mapa de calor OEE (Máquina × Dia da semana)

Página 2: Análise do tempo de inatividade

  • Total de horas de inatividade não planejadas (cartão KPI)
  • MTBF e MTTR (dois cartões KPI)
  • Downtime Pareto (combinação barra + linha com percentual cumulativo)
  • Tempo de inatividade por máquina (gráfico de barras horizontais)
  • Tempo de inatividade por turno (barra agrupada)
  • Tendência de tempo de inatividade de 90 dias (gráfico de linhas)
  • Eventos de tempo de inatividade ativos (tabela em tempo real se estiver transmitindo)

Página 3: Painel de qualidade

  • Rendimento na primeira passagem (medidor vs alvo)
  • Nível DPMO e Sigma (cartões KPI)
  • Taxa de sucata por produto (gráfico de barras)
  • Tendência COPQ (gráfico de linhas mostrando custos de questões de qualidade)
  • Defeito Pareto por código de defeito
  • Gráfico SPC (gráfico de linhas com linhas de referência UCL, LCL, UWL, LWL)

Página 4: Taxa de transferência e capacidade

-% de cumprimento do cronograma (medidor)

  • Produção real vs planejada (barra agrupada por dia)
  • Utilização da capacidade por máquina (mapa de calor)
  • Análise do tempo de troca (gráfico de barras por produto/máquina)
  • Tendência de produção (gráfico de área, real versus meta)
  • Tabela de destaque da máquina gargalo

Perguntas frequentes

O que é OEE e por que ele é importante para a fabricação?

OEE (Eficácia Geral do Equipamento) é a métrica padrão ouro para produtividade de fabricação. Combina três fatores: Disponibilidade (equipamento funcionando quando deveria), Desempenho (funcionando na velocidade certa) e Qualidade (produzindo boas peças). Um OEE de 60% significa que você está realizando apenas 60% de sua capacidade teórica – os outros 40% são desperdício. Melhorar o OEE aumenta diretamente a produção sem investimento de capital em novos equipamentos.

O Power BI pode se conectar a sistemas MES para obter OEE em tempo real?

Sim — a maioria dos sistemas MES (Ignition SCADA, GE Proficy, Siemens MES, Rockwell FactoryTalk) oferece suporte à conectividade de banco de dados (SQL Server, Oracle) ou acesso à API REST. O Power BI se conecta a esses bancos de dados e pode usar conjuntos de dados de streaming para atualizações quase em tempo real (a cada 30 segundos a 1 minuto). Para obter OEE em tempo real (menos de um segundo), use o Azure IoT Hub ou o Event Hub com conjuntos de dados do Power BI Streaming enviados diretamente dos sensores do chão de fábrica.

Quais dados uma fábrica precisa para começar a monitorar o OEE?

Requisitos mínimos de dados para OEE básico: (1) Dados de contagem de produção — quando a máquina funcionou e quantas unidades foram produzidas, (2) Eventos de tempo de inatividade — quando a máquina parou e por quê, (3) Contagens de qualidade — quantas unidades boas e defeituosas. Isso pode vir da entrada manual do operador (Excel/papel → Power BI), MES básico ou dados do contador do PLC. Não são necessários dados perfeitos para iniciar — mesmo a visibilidade imperfeita do OEE gera melhorias.

Como faço para construir um gráfico SPC no Power BI?

Crie um gráfico de linhas com os valores de medição como a série principal. Adicione quatro medidas adicionais (UCL, LCL, UWL, LWL) como séries de linhas separadas no gráfico. Formate UCL/LCL como linhas tracejadas vermelhas e UWL/LWL como linhas tracejadas laranja. A formatação condicional em pontos de dados destaca os pontos fora de controle em vermelho. O visual personalizado SPC integrado do AppSource fornece detecção de regras da Western Electric (execuções acima/abaixo do centro, tendências, etc.) além da abordagem de limite de controle básico.

Qual ​​é um cronograma realista para implementar um painel de manufatura do Power BI?

Um painel OEE básico (máquina única, entrada manual de dados via lista do SharePoint ou Excel) pode ser criado em 1 a 2 semanas. Uma plataforma completa de análise de manufatura conectada a MES e ERP (multimáquinas, multilinhas, com SPC de qualidade, Pareto de tempo de inatividade e análise de rendimento) normalmente leva de 6 a 12 semanas. A fase mais longa é sempre a integração e a qualidade dos dados: carimbos de data/hora da máquina, códigos de motivo de tempo de inatividade e trocas de produtos precisam ser capturados de forma consistente antes que a análise agregue valor.

Como o ECOSIRE conecta o Power BI ao Odoo Manufacturing?

Odoo Manufacturing armazena ordens de serviço de produção, consumo de materiais, verificações de qualidade e solicitações de manutenção no PostgreSQL. ECOSIRE conecta o Power BI diretamente ao banco de dados PostgreSQL do Odoo (em uma réplica de leitura) e modela as tabelas de fabricação (mrp.production, mrp.workcenter, quality.check, Maintenance.request) no modelo de dados OEE descrito neste guia. Lidamos com o planejamento de capacidade em nível de centro de trabalho e a integração de qualidade como parte de nossa prática de integração Odoo ERP.


Próximas etapas

A análise de manufatura no Power BI — quando conectada aos dados da área de produção — fornece a visibilidade em tempo real que separa os fabricantes de classe mundial dos de desempenho médio. OEE, análise da causa raiz do tempo de inatividade e gráficos SPC de qualidade fornecem às equipes de operações as informações para melhorar antes que os problemas se agravem.

ECOSIRE constrói painéis de manufatura conectados a sistemas MES, plataformas ERP (Odoo, SAP, Dynamics 365) e fluxos de dados IoT. Nossos serviços de desenvolvimento de painéis do Power BI abrangem toda a pilha de análise de manufatura, desde o design do modelo de dados até os painéis prontos para produção.

Entre em contato com nossa equipe de análise de manufatura para discutir as fontes de dados do chão de fábrica e projetar uma plataforma de análise do Power BI que impulsione melhorias mensuráveis ​​de OEE.

E

Escrito por

ECOSIRE Research and Development Team

Construindo produtos digitais de nível empresarial na ECOSIRE. Compartilhando insights sobre integrações Odoo, automação de e-commerce e soluções de negócios com IA.

Converse no WhatsApp