разработать меру, отфильтрованную другой мерой с использованием контекстного перехода

Вопрос или проблема

Я использую 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. Создание необходимых мер

  1. Мера для подсчета активных сотрудников:
ActiveEmployeesCount = 
CALCULATE(
    DISTINCTCOUNT(EmployeeTable[EmployeeId]),
    EmployeeTable[IsActiveEmployee] = "Y"
)

Эта мера возвращает количество уникальных активных сотрудников.

  1. Мера для подсчета работ по сотрудникам:

Для этого создадим вспомогательную меру, которая будет подсчитывать количество работ для каждого активного сотрудника. Используем функцию CALCULATE вместе с COUNTROWS и FILTER.

JobCount = 
CALCULATE(
    COUNTROWS(EmployeeTable),
    ALLEXCEPT(EmployeeTable, EmployeeTable[EmployeeId]),
    EmployeeTable[IsActiveEmployee] = "Y"
)

Эта мера возвращает количество работ для каждого активного сотрудника.

  1. Основная мера для подсчета активных сотрудников с несколькими работами:

Теперь, когда у нас есть меры для подсчета активных сотрудников и их работ, мы можем создать окончательную меру, которая будет фильтровать сотрудников с несколькими работами и возвращать их количество.

ActiveEmployeesWithMultipleJobsCount = 
CALCULATE(
    DISTINCTCOUNT(EmployeeTable[EmployeeId]),
    EmployeeTable[IsActiveEmployee] = "Y",
    EmployeeTable[JobCount] > 1
)

3. Разъяснение

В этом подходе мы используем контекст фильтрации в DAX для:

  1. Отфильтровки только активных сотрудников, имеющих статус "Y".
  2. Выделения тех сотрудников, у которых количество работ больше одной.

Заключение

Окончательная мера ActiveEmployeesWithMultipleJobsCount теперь возвращает число активных сотрудников, которые имеют более одной работы. В вашем случае, результат должен быть равен 3 (Георгий, Ребекка и Жанна).

Пример в контексте

Если у вас есть таблица EmployeeTable, содержащая данные о сотрудниках с полями EmployeeId, IsActiveEmployee и Job, созданные меры позволят вам получить нужный результат через визуализацию, например, в виде карточки или таблицы.

В случае возникновения дополнительных вопросов или необходимости в уточнении, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...