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 mars 202611 min de lecture2.3k Mots|

Tableau de bord d'analyse RH dans Power BI : Workforce Insights

L’analyse des personnes est l’application de business intelligence qui connaît la croissance la plus rapide dans l’entreprise – et pour cause. Les organisations dotées de programmes d'analyse RH matures ont un bénéfice moyen sur trois ans 82 % plus élevé que les entreprises disposant de capacités minimales en matière de données personnelles (Deloitte Human Capital Trends). Pourtant, la plupart des équipes RH suivent toujours les effectifs dans des feuilles de calcul Excel et calculent le chiffre d'affaires manuellement dans Google Sheets.

Power BI offre aux responsables RH la même profondeur d'analyse dont disposent les équipes financières et commerciales depuis des années : visibilité des effectifs en temps réel, calculs automatisés du chiffre d'affaires, analyses de la diversité et suivi du cycle de vie des employés tout au long du parcours des employés, de l'embauche au départ.

Ce guide crée une plate-forme complète d'analyse RH dans Power BI, couvrant le modèle de données, chaque KPI RH critique avec sa formule DAX et les pages de tableau de bord qui pilotent les décisions réelles du personnel.

Points clés à retenir

  • L'analyse RH nécessite une approche de dimension à évolution lente (SCD) pour l'effectif historique
  • Le calcul du taux de turnover doit distinguer les départs volontaires des départs involontaires
  • Les tableaux de bord sur la diversité nécessitent une conception minutieuse en matière de confidentialité – agrégés, jamais au niveau individuel lorsque cela est inapproprié
  • L'analyse du cycle de vie des employés suit les courbes de temps d'embauche, de productivité et de rétention
  • L'analyse des absences (Bradford Factor, fréquence d'absence) s'intègre aux données de paie  - Les mesures DAX pour les effectifs sont ponctuelles (non additionnées) – nécessitent des modèles de calcul spéciaux
  • Les systèmes SIRH (Workday, SAP SuccessFactors, BambooHR) disposent tous de connecteurs Power BI
  • La sécurité au niveau des lignes doit limiter les données RH aux partenaires commerciaux et aux responsables RH autorisés.

Modèle de données pour l'analyse RH

Tableaux RH de base

Employee_Snapshot (changement lent, une ligne par employé et par mois) :

ColonneDescriptif
EmployeeIDIdentifiant de l'employé
SnapshotDateDate de fin de mois de l'instantané
StatusActif, en congé, licencié
DepartmentIDFK au département
JobLevelNiveau/bande (L1-L8)
JobTitleTitre du poste actuel
ManagerIDFK à employé (manager)
LocationIDFK à l'emplacement
HireDateDate d'embauche initiale
TerminationDateDate de résiliation (nul si actif)
TerminationReasonVolontaire, involontaire, retraite, etc.
BaseSalarySalaire de base mensuel
FullTimeEquivalent1,0 pour FT, 0,5 pour PT
GenderH/F/Non binaire (anonymisé pour petits groupes)
AgeGroupTranche d'âge agrégée (et non âge brut)
EthnicityGroupe ethnique autodéclaré
TenureMonthsMois d'emploi à la date de l'instantané

Hiring_Events (une ligne par embauche) :

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

Absence_Records (une ligne par événement d'absence) :

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

Performance_Reviews (une ligne par avis) :

  • ReviewID, EmployeeID, ReviewDate, PerformanceRating, ManagerID

Training_Completions (une ligne par formation) :

  • TrainingID, EmployeeID, CompletionDate, ProgramName, HoursCompleted

Analyse des effectifs

Calcul de l'effectif à un moment précis

L'effectif est une mesure instantanée (combien d'employés existent à un moment donné), et non une somme. Cela nécessite une gestion DAX spéciale :

// 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])
)

Analyse du taux de rotation

Le turnover est la mesure RH la plus suivie et la plus souvent mal calculée. La formule correcte utilise l'effectif moyen comme dénominateur (et non l'effectif de début ou de fin).

KPI de chiffre d'affaires

// 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
)

Indicateurs de diversité, d'équité et d'inclusion

Analyse DEI respectueuse de la confidentialité

Les analyses DEI doivent être mises en œuvre avec des garde-fous en matière de confidentialité : n'affichez jamais les données au niveau individuel par attributs sensibles et supprimez les données pour les groupes inférieurs à un minimum configurable (généralement 5 à 10 employés).

// 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 du tableau de bord DEI

KPIFormuleCible
Équilibre entre les sexes% de femmes dans l'effectif total50 % ± 5 %
Écart salarial entre hommes et femmesSalaire moyen femme / Salaire moyen homme> 97%
Diversité du leadershipGroupes sous-représentés dans les postes de direction> 30%
Taux d'embauche diversifiéEmbauches diverses / embauches totales> 40%
Promotion ÉquitéTaux de promotion par sexe/origine ethnique± 2% entre groupes

Analyse du cycle de vie des employés

Délai d'embauche

// 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
)

Répartition des mandats

// 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]
)

Analyse des absences

KPI d'absence

// 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"
)

Architecture du tableau de bord RH de 5 pages

Page 1 : Aperçu de l'effectif

  • Carte KPI d'effectif (en cours par rapport à l'année précédente)
  • Effectif ETP (réel par rapport à l'objectif)
  • Effectif par département (graphique à barres)
  • Tendance des effectifs sur 12 mois (graphique linéaire)
  • Nouvelles embauches et licenciements (graphique à barres papillon/comparaison)
  • Carte géographique des effectifs

Page 2 : Analyse du CA

  • Taux de turnover annualisé (jauge vs référence du secteur)
  • Volontaire vs Involontaire (graphique en anneau)
  • Chiffre d'affaires par département (graphique à barres trié, le plus élevé en premier)
  • Chiffre d'affaires par Tenure Band (histogramme)
  • Tendance du CA sur 24 mois (graphique linéaire)
  • Répartition des motifs de sortie (treemap)

Page 3 : Acquisition de talents

  • Tendance du temps d'embauche (graphique linéaire par mois)
  • Taux d'acceptation des offres (carte KPI)
  • Embauches par canal source (graphique à barres)
  • Demandes ouvertes par département (tableau)
  • Entonnoir de recrutement (des candidatures aux démarrages)
  • Coût par location par département

Page 4 : Diversité et inclusion

  • Équilibre entre les sexes par niveau (graphique à barres empilées)
  • Écart salarial entre hommes et femmes par département (graphique à barres)
  • Tendance du taux d'embauche pour la diversité (graphique linéaire)
  • Taux de promotion par sexe (barre regroupée)
  • Indice de diversité des équipes par manager

Page 5 : Absence & Bien-être

  • Taux d'absence par département (heat map)
  • Distribution du facteur Bradford
  • Absence pour motif (camembert)
  • Tendance des absences (graphique linéaire sur 12 mois)
  • Nuage de points de corrélation entre l'absence et les performances

Questions fréquemment posées

Comment connecter Power BI à Workday ou SAP SuccessFactors ?

Workday fournit un module Prism Analytics et une API REST auxquels Power BI peut se connecter via le connecteur Web à l'aide de l'authentification OAuth. SAP SuccessFactors expose les API OData pour les données des employés. Pour les deux systèmes, l'architecture recommandée pour les grandes entreprises est : SIRH → Pipeline Fivetran ou Talend → Snowflake/Azure Synapse → Power BI. Cela dissocie la couche analytique du SIRH et évite les problèmes de limite de débit API.

Comment protéger les données sensibles des employés dans Power BI ?

Appliquez plusieurs niveaux de protection : la sécurité au niveau des lignes restreint les données des employés que chaque spectateur voit (par exemple, les responsables voient uniquement leurs subordonnés directs, les HRBP voient les unités commerciales qui leur sont attribuées). Appliquez des étiquettes de sensibilité Microsoft Information Protection aux ensembles de données contenant des données personnelles. N’affichez jamais les données salariales au niveau de chaque employé dans des tableaux de bord partagés. Pour l'analyse de la diversité, supprimez les mesures pour les groupes de moins de 10 employés. Assurez-vous que la politique de confidentialité des données de votre organisation autorise explicitement l’utilisation de People Analytics.

Quelle est la différence entre l'effectif et l'ETP ?

L'effectif compte les salariés quelle que soit leur durée de travail (un salarié à temps partiel compte pour 1). Pondérations ETP (équivalent temps plein) par heures de travail – un employé à 50 % à temps partiel compte pour 0,5 ETP. Utilisez l'effectif pour le nombre absolu d'employés (par exemple, « nous avons 500 employés »). Utilisez des ETP pour la planification des capacités et la modélisation des coûts (par exemple, « nous avons une capacité d'une valeur de 430 ETP »). Les deux mesures sont importantes et visent des objectifs différents.

Comment calculer correctement le taux de rotation ?

Taux de rotation = (Nombre de départs / Effectif moyen) × 100. La clé est le dénominateur : utilisez la moyenne des effectifs de début et de fin pour la période, pas seulement l'effectif de fin. Pour le chiffre d'affaires sur 12 mois glissants, additionnez les 12 derniers mois de départs et divisez par l'effectif moyen sur 12 mois. De nombreuses organisations utilisent à tort l’effectif final, ce qui gonfle le chiffre d’affaires dans les organisations en croissance.

Power BI peut-il prédire le risque d'attrition pour des employés individuels ?

Avec l’intégration d’Azure Machine Learning, oui. Créez un modèle de prédiction d'attrition dans Azure ML à l'aide de fonctionnalités historiques (ancienneté, évaluation des performances, score d'engagement, date de la dernière promotion, salaire par rapport au marché, note du manager) et générez un score de probabilité d'attrition pour chaque employé actuel. Connectez ce score à Power BI et affichez-le dans un tableau de bord du responsable indiquant le risque de fuite de son équipe, permettant ainsi des conversations proactives sur la rétention avant la démission des employés.


Prochaines étapes

L’analyse RH dans Power BI offre aux responsables du personnel la même prise de décision basée sur les données que celle dont disposent les équipes financières et commerciales depuis des années. Comprendre qui part, pourquoi, de quelles équipes et pour quel mandat donne aux RH la possibilité d'intervenir plus tôt et de retenir les talents qui comptent le plus.

L'équipe Power BI d'ECOSIRE crée des plateformes complètes d'analyse RH, depuis la conception de pipelines de données SIRH jusqu'aux tableaux de bord interactifs People Analytics avec des contrôles de confidentialité appropriés et un accès basé sur les rôles.

Découvrez nos services de développement de tableaux de bord Power BI pour comprendre notre approche d'analyse RH, ou contactez notre équipe pour discuter de vos besoins en matière d'analyse des effectifs et de vos sources de données.

E

Rédigé par

ECOSIRE Research and Development Team

Création de produits numériques de niveau entreprise chez ECOSIRE. Partage d'analyses sur les intégrations Odoo, l'automatisation e-commerce et les solutions d'entreprise propulsées par l'IA.

Discutez sur WhatsApp