HR Analytics Dashboard in Power BI: Workforce Insights

Build a comprehensive HR analytics dashboard in Power BI covering headcount, turnover, diversity, absence, and employee lifecycle — with DAX formulas and KPI definitions.

E
ECOSIRE Research and Development Team
|19 de marzo de 202611 min de lectura2.3k Palabras|

Panel de análisis de recursos humanos en Power BI: Workforce Insights

El análisis de personas es la aplicación de inteligencia empresarial de más rápido crecimiento en la empresa, y por una buena razón. Las organizaciones con programas maduros de análisis de recursos humanos tienen un beneficio promedio de tres años un 82% mayor que las empresas con capacidades mínimas de datos de personas (Deloitte Human Capital Trends). Sin embargo, la mayoría de los equipos de recursos humanos todavía realizan un seguimiento de la plantilla en hojas de cálculo de Excel y calculan la rotación manualmente en Google Sheets.

Power BI brinda a los líderes de recursos humanos la misma profundidad analítica que los equipos de finanzas y ventas han tenido durante años: visibilidad de la plantilla en tiempo real, cálculos automatizados de rotación, análisis de diversidad y seguimiento del ciclo de vida de los empleados durante todo el recorrido del empleado, desde la contratación hasta la baja.

Esta guía crea una plataforma completa de análisis de recursos humanos en Power BI, que cubre el modelo de datos, cada KPI de recursos humanos crítico con su fórmula DAX y las páginas del panel que impulsan las decisiones reales de la fuerza laboral.

Conclusiones clave

  • El análisis de recursos humanos requiere un enfoque de dimensión que cambia lentamente (SCD) para el recuento histórico
  • El cálculo de la tasa de rotación debe distinguir entre separaciones voluntarias e involuntarias.
  • Los paneles de diversidad requieren un diseño de privacidad cuidadoso: agregado, nunca a nivel individual cuando sea inapropiado.
  • El análisis del ciclo de vida de los empleados rastrea el tiempo de contratación, el tiempo de productividad y las curvas de retención.
  • Los análisis de ausencias (factor Bradford, frecuencia de ausencias) se integran con los datos de nómina
  • Las medidas DAX para el recuento de personal son puntuales (no se suman): requiere patrones de cálculo especiales
  • Todos los sistemas HRIS (Workday, SAP SuccessFactors, BambooHR) tienen conectores Power BI
  • La seguridad a nivel de fila debe limitar los datos de recursos humanos a los socios comerciales y gerentes de recursos humanos autorizados.

Modelo de datos para análisis de recursos humanos

Tablas principales de recursos humanos

Employee_Snapshot (cambiando lentamente, una fila por empleado por mes):

ColumnaDescripción
CÓDIGO0Identificador de empleado
CÓDIGO0Fecha de fin de mes de la instantánea
CÓDIGO0Activo, de licencia, despedido
CÓDIGO0FK al Departamento
CÓDIGO0Grado/Banda (L1-L8)
CÓDIGO0Título del trabajo actual
CÓDIGO0FK a Empleado (gerente)
CÓDIGO0FK a la ubicación
CÓDIGO0Fecha de contratación original
CÓDIGO0Fecha de terminación (nula si está activa)
CÓDIGO0Voluntario, Involuntario, Jubilación, etc.
CÓDIGO0Salario base mensual
CÓDIGO01,0 para FT, 0,5 para PT
CÓDIGO0M/F/No binario (anonimizado para grupos pequeños)
CÓDIGO0Franja de edad agregada (no edad bruta)
CÓDIGO0Grupo étnico autodeclarado
CÓDIGO0Meses empleados en la fecha de la instantánea

Hiring_Events (una fila por contratación):

  • HireID, EmployeeID, ApplicationDate, OfferDate, AcceptDate, StartDate, DepartmentID, SourceChannel, HiringManagerID, JobRequisitionID

Absence_Records (una fila por evento de ausencia):

  • AbsenceID, EmployeeID, StartDate, EndDate, DaysAbsent, AbsenceType, Reason, ApprovalStatus

Performance_Reviews (una fila por revisión):

  • ReviewID, EmployeeID, ReviewDate, PerformanceRating, ManagerID

Training_Completions (una fila por entrenamiento):

  • TrainingID, EmployeeID, CompletionDate, ProgramName, HoursCompleted

Análisis de personal

Cálculo de personal en un momento dado

La plantilla es una medida instantánea (cuántos empleados existen en un momento dado), no una suma. Esto requiere un manejo DAX especial:

// Headcount at any selected date
Headcount =
CALCULATE(
    COUNTROWS(Employee_Snapshot),
    Employee_Snapshot[Status] = "Active",
    // Use the latest available snapshot for the selected period
    Employee_Snapshot[SnapshotDate] = MAX(Employee_Snapshot[SnapshotDate])
)

// FTE-adjusted Headcount
FTE Headcount =
CALCULATE(
    SUMX(
        FILTER(Employee_Snapshot, Employee_Snapshot[Status] = "Active"),
        Employee_Snapshot[FullTimeEquivalent]
    ),
    Employee_Snapshot[SnapshotDate] = MAX(Employee_Snapshot[SnapshotDate])
)

// Headcount by Department (for matrix/bar chart)
Dept Headcount =
CALCULATE(
    [Headcount],
    ALLEXCEPT(Employee_Snapshot, Employee_Snapshot[DepartmentID])
)

// Headcount growth (vs prior month)
Headcount MoM Change =
[Headcount] -
CALCULATE(
    [Headcount],
    DATEADD(Date[Date], -1, MONTH)
)

// Headcount trend (for sparkline or line chart)
Headcount Trend =
CALCULATE(
    [Headcount],
    REMOVEFILTERS(Date[Month])
)

Análisis de la tasa de rotación

La rotación es la métrica de recursos humanos más seguida y la que más comúnmente se calcula mal. La fórmula correcta utiliza la plantilla promedio como denominador (ni la plantilla inicial ni final).

KPI de facturación

// Total Terminations in Period
Terminations =
CALCULATE(
    COUNTROWS(Employee_Snapshot),
    Employee_Snapshot[Status] = "Terminated",
    Employee_Snapshot[TerminationDate] >= MIN(Date[Date]),
    Employee_Snapshot[TerminationDate] <= MAX(Date[Date])
)

// Voluntary Terminations (resigned)
Voluntary Terminations =
CALCULATE(
    [Terminations],
    Employee_Snapshot[TerminationReason] = "Voluntary"
)

// Involuntary Terminations (laid off, fired)
Involuntary Terminations =
CALCULATE(
    [Terminations],
    Employee_Snapshot[TerminationReason] = "Involuntary"
)

// Average Headcount (for turnover denominator)
Avg Headcount =
AVERAGEX(
    VALUES(Date[Month]),
    [Headcount]
)

// Annualized Turnover Rate
Turnover Rate =
DIVIDE(
    [Terminations],
    [Avg Headcount],
    0
) * 12  -- Annualize if showing monthly data

// Voluntary Turnover Rate
Voluntary Turnover Rate =
DIVIDE([Voluntary Terminations], [Avg Headcount], 0) * 12

// Regrettable Turnover (voluntary + high performers)
Regrettable Turnover =
CALCULATE(
    [Voluntary Terminations],
    RELATED(Performance_Reviews[PerformanceRating]) >= 4  -- High performers
)

// Retention Rate
Retention Rate = 1 - [Turnover Rate]

// New Hire Survival Rate (% of new hires still employed after 90 days)
90 Day Survival Rate =
DIVIDE(
    CALCULATE(
        COUNTROWS(Hiring_Events),
        DATEDIFF(Hiring_Events[StartDate], TODAY(), DAY) >= 90,
        RELATED(Employee_Snapshot[Status]) = "Active"
    ),
    CALCULATE(
        COUNTROWS(Hiring_Events),
        DATEDIFF(Hiring_Events[StartDate], TODAY(), DAY) >= 90
    ),
    0
)

Métricas de diversidad, equidad e inclusión

Análisis DEI consciente de la privacidad

Los análisis de DEI deben implementarse con barreras de privacidad: nunca mostrar datos a nivel individual por atributos confidenciales y suprimir datos para grupos más pequeños que un mínimo configurable (normalmente de 5 a 10 empleados).

// Gender ratio (with suppression for small groups)
Gender Ratio Female =
VAR FemaleCount = CALCULATE([Headcount], Employee_Snapshot[Gender] = "Female")
VAR TotalCount = [Headcount]
RETURN
IF(TotalCount >= 10, DIVIDE(FemaleCount, TotalCount, 0), BLANK())

// Pay equity ratio (female to male)
Gender Pay Ratio =
VAR FemalePay = CALCULATE(
    AVERAGE(Employee_Snapshot[BaseSalary]),
    Employee_Snapshot[Gender] = "Female"
)
VAR MalePay = CALCULATE(
    AVERAGE(Employee_Snapshot[BaseSalary]),
    Employee_Snapshot[Gender] = "Male"
)
RETURN DIVIDE(FemalePay, MalePay, 0)

// Leadership diversity (% of senior roles filled by underrepresented groups)
Leadership Diversity % =
DIVIDE(
    CALCULATE(
        [Headcount],
        Employee_Snapshot[JobLevel] IN {"L6","L7","L8"},
        Employee_Snapshot[Gender] = "Female"
    ),
    CALCULATE(
        [Headcount],
        Employee_Snapshot[JobLevel] IN {"L6","L7","L8"}
    ),
    0
)

KPI del panel DEI

KPIFórmulaObjetivo
Equilibrio de género% femenino de la plantilla total50% ± 5%
Brecha salarial de géneroSalario medio femenino / Salario medio masculino> 97%
Diversidad de liderazgoGrupos subrepresentados en puestos de alto nivel> 30%
Tasa de contratación diversaContrataciones diversas / contrataciones totales> 40%
Promoción EquidadTasa de promoción por género/etnia± 2% entre grupos

Análisis del ciclo de vida de los empleados

Tiempo de contratación

// Average days from job posting to offer acceptance
Avg Time to Hire =
AVERAGEX(
    Hiring_Events,
    DATEDIFF(
        Hiring_Events[ApplicationDate],
        Hiring_Events[AcceptDate],
        DAY
    )
)

// Offer Acceptance Rate
Offer Acceptance Rate =
DIVIDE(
    CALCULATE(COUNTROWS(Hiring_Events), Hiring_Events[AcceptDate] <> BLANK()),
    CALCULATE(COUNTROWS(Hiring_Events), Hiring_Events[OfferDate] <> BLANK()),
    0
)

// Source Channel Effectiveness (hired employees by source)
Source Hire Rate =
DIVIDE(
    COUNTROWS(Hiring_Events),
    CALCULATE(
        COUNTROWS(Hiring_Events),
        REMOVEFILTERS(Hiring_Events[SourceChannel])
    ),
    0
)

Distribución de tenencia

// Tenure bucket (for histogram)
Tenure Bucket =
SWITCH(TRUE(),
    Employee_Snapshot[TenureMonths] < 3, "0-3 months",
    Employee_Snapshot[TenureMonths] < 12, "3-12 months",
    Employee_Snapshot[TenureMonths] < 24, "1-2 years",
    Employee_Snapshot[TenureMonths] < 60, "2-5 years",
    Employee_Snapshot[TenureMonths] < 120, "5-10 years",
    "10+ years"
)

// Average Tenure at Separation
Avg Tenure at Separation =
AVERAGEX(
    FILTER(Employee_Snapshot, Employee_Snapshot[Status] = "Terminated"),
    Employee_Snapshot[TenureMonths]
)

Análisis de ausencias

KPI de ausencia

// Absence Rate (% of working days lost)
Absence Rate =
DIVIDE(
    SUM(Absence_Records[DaysAbsent]),
    [Headcount] * NETWORKDAYS(MIN(Date[Date]), MAX(Date[Date])),
    0
)

// Bradford Factor (frequency-weighted absence score)
// B = S² × D (S = absence episodes, D = total days)
Bradford Factor =
VAR Spells = COUNTROWS(Absence_Records)
VAR Days = SUM(Absence_Records[DaysAbsent])
RETURN Spells * Spells * Days

// Average Absence Days per Employee
Avg Absence Days =
DIVIDE(SUM(Absence_Records[DaysAbsent]), [Headcount], 0)

// Absence by Type (breakdown)
Medical Absence Days =
CALCULATE(
    SUM(Absence_Records[DaysAbsent]),
    Absence_Records[AbsenceType] = "Medical"
)

Arquitectura del panel de recursos humanos de 5 páginas

Página 1: Descripción general de la fuerza laboral

  • Tarjeta KPI de plantilla (año actual vs año anterior)
  • Plantilla FTE (real frente a objetivo)
  • Plantilla por departamento (gráfico de barras)
  • Tendencia de plantilla 12 meses (gráfico de líneas)
  • Nuevas contrataciones frente a despidos (gráfico de barras de comparación/mariposa)
  • Mapa de plantilla geográfica

Página 2: Análisis de facturación

  • Tasa de rotación anualizada (medidor versus punto de referencia de la industria)
  • Voluntario vs Involuntario (gráfico de anillos)
  • Volumen de negocios por departamento (gráfico de barras ordenado, el más alto primero)
  • Facturación por banda de tenencia (histograma)
  • Tendencia de facturación 24 meses (gráfico de líneas)
  • Desglose del motivo de salida (mapa de árbol)

Página 3: Adquisición de talento

  • Tendencia de tiempo de contratación (gráfico de líneas por mes)
  • Tasa de aceptación de oferta (tarjeta KPI)
  • Contrataciones por canal de origen (gráfico de barras)
  • Solicitudes abiertas por departamento (tabla)
  • Embudo de contratación (desde solicitudes hasta inicios)
  • Costo por contratación por departamento

Página 4: Diversidad e inclusión

  • Equilibrio de género por nivel (gráfico de barras apiladas)
  • Brecha salarial de género por departamento (gráfico de barras)
  • Tendencia de la tasa de contratación por diversidad (gráfico de líneas)
  • Tasa de promoción por género (barra agrupada)
  • Índice de diversidad del equipo por gerente.

Página 5: Ausencia y Bienestar

  • Tasa de ausentismo por departamento (mapa de calor)
  • Distribución del factor Bradford
  • Ausencia por motivo (gráfico circular)
  • Tendencia de ausencia (gráfico de líneas de 12 meses)
  • Diagrama de dispersión de correlación entre ausencia y rendimiento

Preguntas frecuentes

¿Cómo conecto Power BI a Workday o SAP SuccessFactors?

Workday proporciona un módulo Prism Analytics y una API REST a la que Power BI puede conectarse a través del conector web mediante autenticación OAuth. SAP SuccessFactors expone las API de OData para los datos de los empleados. Para ambos sistemas, la arquitectura recomendada para grandes empresas es: HRIS → Fivetran o Talend pipeline → Snowflake/Azure Synapse → Power BI. Esto desacopla la capa analítica del HRIS y evita problemas de límite de tasa API.

¿Cómo protejo los datos confidenciales de los empleados en Power BI?

Aplique múltiples capas de protección: la seguridad a nivel de fila restringe qué datos de los empleados ve cada espectador (por ejemplo, los gerentes ven solo a sus subordinados directos, HRBP ve sus unidades de negocios asignadas). Aplique etiquetas de confidencialidad de Microsoft Information Protection a conjuntos de datos que contengan datos personales. Nunca muestre datos salariales a nivel de empleado individual en paneles compartidos. Para análisis de diversidad, suprima las métricas para grupos de menos de 10 empleados. Asegúrese de que la política de privacidad de datos de su organización permita explícitamente el uso de People Analytics.

¿Cuál es la diferencia entre plantilla y FTE?

La plantilla cuenta a los empleados independientemente de su horario laboral (un empleado a tiempo parcial cuenta como 1). Ponderaciones FTE (equivalente a tiempo completo) por horas de trabajo: un empleado a tiempo parcial del 50 % cuenta como 0,5 FTE. Utilice la plantilla para el recuento absoluto de empleados (por ejemplo, "tenemos 500 empleados"). Utilice FTE para la planificación de capacidad y el modelado de costos (por ejemplo, "tenemos 430 FTE de capacidad"). Ambas medidas son importantes y tienen propósitos diferentes.

¿Cómo calculo correctamente la tasa de rotación?

Tasa de rotación = (Número de separaciones / Plantilla promedio) × 100. La clave es el denominador: utilice el promedio de la plantilla inicial y final del período, no solo la plantilla final. Para la rotación de 12 meses consecutivos, sume los últimos 12 meses de separaciones y divídalos por la plantilla promedio de 12 meses. Muchas organizaciones utilizan incorrectamente la plantilla final, lo que infla la rotación en organizaciones en crecimiento.

¿Puede Power BI mostrar un riesgo de deserción predictivo para empleados individuales?

Con la integración de Azure Machine Learning, sí. Cree un modelo de predicción de deserción en Azure ML utilizando características históricas (permanencia, calificación de desempeño, puntaje de participación, fecha del último ascenso, salario versus mercado, calificación del gerente) y genere una puntuación de probabilidad de deserción para cada empleado actual. Conecte esta puntuación a Power BI y muéstrela en un panel de administrador que muestre el riesgo de fuga de su equipo, lo que permite conversaciones de retención proactivas antes de que los empleados renuncien.


Próximos pasos

El análisis de recursos humanos en Power BI brinda a los líderes la misma toma de decisiones basada en datos que los equipos de finanzas y ventas han tenido durante años. Comprender quién se va, por qué, de qué equipos y durante qué período le da a RR.HH. la información necesaria para intervenir antes y retener el talento más importante.

El equipo de Power BI de ECOSIRE crea plataformas completas de análisis de recursos humanos, desde el diseño de canalización de datos HRIS hasta paneles interactivos de People Analytics con controles de privacidad adecuados y acceso basado en roles.

Explore nuestros servicios de desarrollo de paneles de Power BI para comprender nuestro enfoque de análisis de recursos humanos, o póngase en contacto con nuestro equipo para analizar los requisitos de análisis de su fuerza laboral y las fuentes de datos.

E

Escrito por

ECOSIRE Research and Development Team

Construyendo productos digitales de nivel empresarial en ECOSIRE. Compartiendo perspectivas sobre integraciones Odoo, automatización de eCommerce y soluciones empresariales impulsadas por IA.

Chatea en whatsapp