Вопрос или проблема
Я использую Microsoft Power BI Desktop (.pbix) и язык DAX.
У меня есть следующий сценарий:
У меня есть таблица под названием EmployeeTable; в ней 9 различных сотрудников, но каждый сотрудник может иметь более одной записи в зависимости от количества работ, которые он выполнял; скажем, у Джорджа 2 работы (маляр, водитель), и поэтому для него есть две записи.
Столбец: EmployeeTable[IsActiveEmployee] определяет, является ли сотрудник активным?
Этот столбец может иметь только значения “Да” или “Нет”, сокращенные как “Y” и “N” соответственно.
Сотрудник всегда может иметь ТОЧНО одно значение для IsActiveEmployee, “Y” или “N”, даже если у него несколько работ; скажем, у Жанны две работы, обе записи ALWAYS будут “Y” или “N” (но не обе) для столбца IsActiveEmployee; в этом случае столбец будет показывать “Y” для обеих записей; он НИКОГДА не будет показывать “Y” в одной записи и “N” в другой.
Теперь основное требование:
Разработать меру для получения численности АКТИВНЫХ сотрудников с несколькими работами.
1) Сначала определить сотрудников, у которых значение “Y” для столбца EmployeeTable[IsActiveEmployee].
2) Затем дополнительно отфильтровать этот список, ограничив его только сотрудниками с более чем одной работой.
3) Затем получить DISTINCTCOUNT сотрудников.
В общей сложности 9 различных сотрудников; 5 из них активные; среди этих 5 активных сотрудников мне нужно получить численность людей с более чем одной работой.
Хотя Джордж (EmployeeId = 3), Адам (EmployeeId = 4), Ребекка (EmployeeId = 6) и Жанна (EmployeeId = 9) имеют несколько работ, Адам должен быть исключен, так как он НЕ активный сотрудник.
Мне нужен ответ 3, т.е. три человека (Джордж, Ребекка, Жанна) имеют более одной работы и все еще активны.
Как мне это сделать?
Я попробовал что-то вроде этого:
HeadCountOfEmployees_Measure
=
DISTINCTCOUNT(EmployeeTable[EmployeeId])
HeadCountOfActiveEmployees_Measure
=
CALCULATE (
[HeadCountOfEmployees_Measure],
KEEPFILTERS(EmployeeTable[IsActiveEmployee] = "Y")
)
DistinctCountOfJobs_Measure
=
DISTINCTCOUNT(EmployeeTable[Job])
HeadCountOfActiveEmployeesWithMultipleJobs_Measure
=
SUMX(
FILTER(
VALUES(EmployeeTable[IsActiveEmployee]),
EmployeeTable[IsActiveEmployee] = "Y"
),
IF(
[DistinctCountOfJobs_Measure] > 1,
1,
0
)
)
Это не работает. Может кто-то дать совет?
Я детализировал все это в .pbix файле и Excel файле.
Я начал с измерения сотрудников и факта занятости, и тогда стало легко:
DimEmployee ( EmployeeID, EmployeeName, IsActive)
Employment (EmployeeID, Job)
Active w Multiple Jobs =
FILTER('DimEmployee',
'DimEmployee'[IsActiveEmployee] = "Y" &&
COUNTROWS(RELATEDTABLE(JobsFact))>1)
Ответ или решение
Для решения задачи по подсчету активных сотрудников с несколькими работами в Power BI с использованием языка DAX, давайте последовательно выполним все необходимые шаги.
1. Определение меры
Мы начнем с создания меры, которая будет учитывать только тех сотрудников, которые являются активными, и у которых более одной работы.
2. Создание необходимых мер
- Мера для подсчета активных сотрудников:
ActiveEmployeesCount =
CALCULATE(
DISTINCTCOUNT(EmployeeTable[EmployeeId]),
EmployeeTable[IsActiveEmployee] = "Y"
)
Эта мера возвращает количество уникальных активных сотрудников.
- Мера для подсчета работ по сотрудникам:
Для этого создадим вспомогательную меру, которая будет подсчитывать количество работ для каждого активного сотрудника. Используем функцию CALCULATE
вместе с COUNTROWS
и FILTER
.
JobCount =
CALCULATE(
COUNTROWS(EmployeeTable),
ALLEXCEPT(EmployeeTable, EmployeeTable[EmployeeId]),
EmployeeTable[IsActiveEmployee] = "Y"
)
Эта мера возвращает количество работ для каждого активного сотрудника.
- Основная мера для подсчета активных сотрудников с несколькими работами:
Теперь, когда у нас есть меры для подсчета активных сотрудников и их работ, мы можем создать окончательную меру, которая будет фильтровать сотрудников с несколькими работами и возвращать их количество.
ActiveEmployeesWithMultipleJobsCount =
CALCULATE(
DISTINCTCOUNT(EmployeeTable[EmployeeId]),
EmployeeTable[IsActiveEmployee] = "Y",
EmployeeTable[JobCount] > 1
)
3. Разъяснение
В этом подходе мы используем контекст фильтрации в DAX для:
- Отфильтровки только активных сотрудников, имеющих статус "Y".
- Выделения тех сотрудников, у которых количество работ больше одной.
Заключение
Окончательная мера ActiveEmployeesWithMultipleJobsCount
теперь возвращает число активных сотрудников, которые имеют более одной работы. В вашем случае, результат должен быть равен 3 (Георгий, Ребекка и Жанна).
Пример в контексте
Если у вас есть таблица EmployeeTable
, содержащая данные о сотрудниках с полями EmployeeId
, IsActiveEmployee
и Job
, созданные меры позволят вам получить нужный результат через визуализацию, например, в виде карточки или таблицы.
В случае возникновения дополнительных вопросов или необходимости в уточнении, не стесняйтесь спрашивать!