Bicycle.LLCSchedule a call

← Dashboard collection

Choose dashboard — Succession and Talent Ops

people analytics dashboard

Succession and Talent Ops

Succession, readiness, skills, training, and absence measures.

6 pages · Power BI

These dashboards use synthetic workforce data. Values illustrate the report design.

Choose page — 5 Training and absence

Selected page

5 Training and absence

DAX definitions

Exact source expressions and direct measure dependencies for the selected page.

Absence Days Total

TalentEmployee · Absence


VAR __roleKeys = VALUES(SuccessionRole[roleId])
VAR __skillPeople = VALUES(SkillGap[employeeId])
VAR __people = FILTER(TalentEmployee,
  (NOT ISFILTERED(SuccessionRole) || TalentEmployee[roleId] IN __roleKeys) &&
  (NOT ISFILTERED(SkillGap) || TalentEmployee[employeeId] IN __skillPeople))
VAR __ids = SELECTCOLUMNS(__people, "__id", TalentEmployee[employeeId])
VAR __poolKeys = SELECTCOLUMNS(__people, "__role", TalentEmployee[roleId])
VAR __roleScope = FILTER(SuccessionRole, SuccessionRole[roleId] IN __poolKeys)
VAR __roles = ADDCOLUMNS(__roleScope,
  "__successors", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes")) + 0,
  "__ready", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes" && TalentEmployee[promotionReadiness] = "1 Ready now")) + 0)
VAR __skills = FILTER(SkillGap, SkillGap[employeeId] IN __ids)
VAR __n = COUNTROWS(__people) + 0
RETURN IF(__n < 10 || ISEMPTY(AsOf), BLANK(), SUMX(__people, TalentEmployee[absenceDays]) + 0)

Direct dependencies: None

Absence Rate

TalentEmployee · Absence


VAR __roleKeys = VALUES(SuccessionRole[roleId])
VAR __skillPeople = VALUES(SkillGap[employeeId])
VAR __people = FILTER(TalentEmployee,
  (NOT ISFILTERED(SuccessionRole) || TalentEmployee[roleId] IN __roleKeys) &&
  (NOT ISFILTERED(SkillGap) || TalentEmployee[employeeId] IN __skillPeople))
VAR __ids = SELECTCOLUMNS(__people, "__id", TalentEmployee[employeeId])
VAR __poolKeys = SELECTCOLUMNS(__people, "__role", TalentEmployee[roleId])
VAR __roleScope = FILTER(SuccessionRole, SuccessionRole[roleId] IN __poolKeys)
VAR __roles = ADDCOLUMNS(__roleScope,
  "__successors", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes")) + 0,
  "__ready", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes" && TalentEmployee[promotionReadiness] = "1 Ready now")) + 0)
VAR __skills = FILTER(SkillGap, SkillGap[employeeId] IN __ids)
VAR __n = COUNTROWS(__people) + 0
RETURN IF(__n < 10 || ISEMPTY(AsOf), BLANK(), DIVIDE(SUMX(__people, TalentEmployee[absenceDays]) + 0, SUMX(__people, TalentEmployee[scheduledDays])))

Direct dependencies: None

Bradford-Style Mean

TalentEmployee · Absence


VAR __roleKeys = VALUES(SuccessionRole[roleId])
VAR __skillPeople = VALUES(SkillGap[employeeId])
VAR __people = FILTER(TalentEmployee,
  (NOT ISFILTERED(SuccessionRole) || TalentEmployee[roleId] IN __roleKeys) &&
  (NOT ISFILTERED(SkillGap) || TalentEmployee[employeeId] IN __skillPeople))
VAR __ids = SELECTCOLUMNS(__people, "__id", TalentEmployee[employeeId])
VAR __poolKeys = SELECTCOLUMNS(__people, "__role", TalentEmployee[roleId])
VAR __roleScope = FILTER(SuccessionRole, SuccessionRole[roleId] IN __poolKeys)
VAR __roles = ADDCOLUMNS(__roleScope,
  "__successors", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes")) + 0,
  "__ready", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes" && TalentEmployee[promotionReadiness] = "1 Ready now")) + 0)
VAR __skills = FILTER(SkillGap, SkillGap[employeeId] IN __ids)
VAR __n = COUNTROWS(__people) + 0
RETURN IF(__n < 10 || ISEMPTY(AsOf), BLANK(), AVERAGEX(__people, POWER(TalentEmployee[absenceEpisodes], 2) * TalentEmployee[absenceDays]))

Direct dependencies: None

Talent Governance Text

TalentEmployee · Report Views


VAR __roleKeys = VALUES(SuccessionRole[roleId])
VAR __skillPeople = VALUES(SkillGap[employeeId])
VAR __people = FILTER(TalentEmployee,
  (NOT ISFILTERED(SuccessionRole) || TalentEmployee[roleId] IN __roleKeys) &&
  (NOT ISFILTERED(SkillGap) || TalentEmployee[employeeId] IN __skillPeople))
VAR __ids = SELECTCOLUMNS(__people, "__id", TalentEmployee[employeeId])
VAR __poolKeys = SELECTCOLUMNS(__people, "__role", TalentEmployee[roleId])
VAR __roleScope = FILTER(SuccessionRole, SuccessionRole[roleId] IN __poolKeys)
VAR __roles = ADDCOLUMNS(__roleScope,
  "__successors", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes")) + 0,
  "__ready", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes" && TalentEmployee[promotionReadiness] = "1 Ready now")) + 0)
VAR __skills = FILTER(SkillGap, SkillGap[employeeId] IN __ids)
VAR __n = COUNTROWS(__people) + 0
RETURN IF(__n < 10 || ISEMPTY(AsOf), BLANK(), "ILLUSTRATIVE synthetic data. Screening, not a verdict. Groups under 10 are suppressed. Protected attributes are never used to rank individuals. Absence frequency is not a disciplinary recommendation.")

Direct dependencies: None

Talent Population

TalentEmployee · Population


VAR __roleKeys = VALUES(SuccessionRole[roleId])
VAR __skillPeople = VALUES(SkillGap[employeeId])
VAR __people = FILTER(TalentEmployee,
  (NOT ISFILTERED(SuccessionRole) || TalentEmployee[roleId] IN __roleKeys) &&
  (NOT ISFILTERED(SkillGap) || TalentEmployee[employeeId] IN __skillPeople))
VAR __ids = SELECTCOLUMNS(__people, "__id", TalentEmployee[employeeId])
VAR __poolKeys = SELECTCOLUMNS(__people, "__role", TalentEmployee[roleId])
VAR __roleScope = FILTER(SuccessionRole, SuccessionRole[roleId] IN __poolKeys)
VAR __roles = ADDCOLUMNS(__roleScope,
  "__successors", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes")) + 0,
  "__ready", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes" && TalentEmployee[promotionReadiness] = "1 Ready now")) + 0)
VAR __skills = FILTER(SkillGap, SkillGap[employeeId] IN __ids)
VAR __n = COUNTROWS(__people) + 0
RETURN IF(__n < 10 || ISEMPTY(AsOf), BLANK(), __n)

Direct dependencies: None

Training Coverage %

TalentEmployee · Development


VAR __roleKeys = VALUES(SuccessionRole[roleId])
VAR __skillPeople = VALUES(SkillGap[employeeId])
VAR __people = FILTER(TalentEmployee,
  (NOT ISFILTERED(SuccessionRole) || TalentEmployee[roleId] IN __roleKeys) &&
  (NOT ISFILTERED(SkillGap) || TalentEmployee[employeeId] IN __skillPeople))
VAR __ids = SELECTCOLUMNS(__people, "__id", TalentEmployee[employeeId])
VAR __poolKeys = SELECTCOLUMNS(__people, "__role", TalentEmployee[roleId])
VAR __roleScope = FILTER(SuccessionRole, SuccessionRole[roleId] IN __poolKeys)
VAR __roles = ADDCOLUMNS(__roleScope,
  "__successors", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes")) + 0,
  "__ready", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes" && TalentEmployee[promotionReadiness] = "1 Ready now")) + 0)
VAR __skills = FILTER(SkillGap, SkillGap[employeeId] IN __ids)
VAR __n = COUNTROWS(__people) + 0
RETURN IF(__n < 10 || ISEMPTY(AsOf), BLANK(), VAR __g = COUNTROWS(FILTER(__people, TalentEmployee[trainingHours] > 0)) + 0 RETURN IF(__g > 0 && __g < 10, BLANK(), DIVIDE(__g, __n)))

Direct dependencies: None

Training Hours Total

TalentEmployee · Development


VAR __roleKeys = VALUES(SuccessionRole[roleId])
VAR __skillPeople = VALUES(SkillGap[employeeId])
VAR __people = FILTER(TalentEmployee,
  (NOT ISFILTERED(SuccessionRole) || TalentEmployee[roleId] IN __roleKeys) &&
  (NOT ISFILTERED(SkillGap) || TalentEmployee[employeeId] IN __skillPeople))
VAR __ids = SELECTCOLUMNS(__people, "__id", TalentEmployee[employeeId])
VAR __poolKeys = SELECTCOLUMNS(__people, "__role", TalentEmployee[roleId])
VAR __roleScope = FILTER(SuccessionRole, SuccessionRole[roleId] IN __poolKeys)
VAR __roles = ADDCOLUMNS(__roleScope,
  "__successors", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes")) + 0,
  "__ready", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes" && TalentEmployee[promotionReadiness] = "1 Ready now")) + 0)
VAR __skills = FILTER(SkillGap, SkillGap[employeeId] IN __ids)
VAR __n = COUNTROWS(__people) + 0
RETURN IF(__n < 10 || ISEMPTY(AsOf), BLANK(), SUMX(__people, TalentEmployee[trainingHours]) + 0)

Direct dependencies: None

Training Hours per Employee

TalentEmployee · Development


VAR __roleKeys = VALUES(SuccessionRole[roleId])
VAR __skillPeople = VALUES(SkillGap[employeeId])
VAR __people = FILTER(TalentEmployee,
  (NOT ISFILTERED(SuccessionRole) || TalentEmployee[roleId] IN __roleKeys) &&
  (NOT ISFILTERED(SkillGap) || TalentEmployee[employeeId] IN __skillPeople))
VAR __ids = SELECTCOLUMNS(__people, "__id", TalentEmployee[employeeId])
VAR __poolKeys = SELECTCOLUMNS(__people, "__role", TalentEmployee[roleId])
VAR __roleScope = FILTER(SuccessionRole, SuccessionRole[roleId] IN __poolKeys)
VAR __roles = ADDCOLUMNS(__roleScope,
  "__successors", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes")) + 0,
  "__ready", VAR __key = SuccessionRole[roleId] RETURN COUNTROWS(FILTER(__people, TalentEmployee[roleId] = __key && TalentEmployee[successorFlag] = "Yes" && TalentEmployee[promotionReadiness] = "1 Ready now")) + 0)
VAR __skills = FILTER(SkillGap, SkillGap[employeeId] IN __ids)
VAR __n = COUNTROWS(__people) + 0
RETURN IF(__n < 10 || ISEMPTY(AsOf), BLANK(), DIVIDE(SUMX(__people, TalentEmployee[trainingHours]) + 0, __n))

Direct dependencies: None