Подсчет дней отсутствия в Power BI, исключая выходные: несколько методов и примеры кода

В Power BI расчет количества дней отсутствия без учета выходных может быть общим требованием для различных бизнес-сценариев. В этой статье блога будут рассмотрены различные методы достижения этой цели, а также приведены примеры кода. Используя эти методы, вы сможете точно подсчитывать дни отсутствия, не включая выходные в отчеты или анализы Power BI.

Метод 1. Использование меры DAX
Первый метод предполагает создание меры DAX, которая подсчитывает количество дней отсутствия, исключая выходные. Вот пример того, как это реализовать:

AbsentDays = 
VAR StartDate = MIN('Table'[AbsentStartDate])
VAR EndDate = MAX('Table'[AbsentEndDate])
RETURN
    COUNTX(
        FILTER(
            CALENDAR(StartDate, EndDate),
            WEEKDAY([Date], 2) < 6 && [Date] >= StartDate && [Date] <= EndDate
        ),
        [Date]
    )

Метод 2: использование Power Query
Power Query предоставляет другой подход для расчета количества дней отсутствия, исключая выходные. Вот пример реализации этого метода:

  1. Загрузите данные в Power Query.
  2. Добавьте специальный столбец, выбрав вкладку «Добавить столбец» и выбрав «Пользовательский столбец».
  3. В поле ввода формулы введите следующий код:
= List.Count(
    List.Select(
        List.Dates([AbsentStartDate], Duration.Days([AbsentEndDate] - [AbsentStartDate]) + 1, #duration(1, 0, 0, 0)),
        each Date.DayOfWeek(_, Day.Monday) <= 4
    )
)

Метод 3: использование функций языка M
В качестве альтернативы вы можете использовать функции языка M в Power Query для достижения желаемого результата. Вот пример:

let
    StartDate = #date(2022, 1, 1),
    EndDate = #date(2022, 12, 31),
    AbsentDays = List.Difference(
        {StartDate..EndDate},
        List.Dates(StartDate, Duration.Days(EndDate - StartDate) + 1, #duration(1, 0, 0, 0))
            |> List.Select((x) => Date.DayOfWeek(x, Day.Monday) <= 4)
    ),
    CountAbsentDays = List.Count(AbsentDays)
in
    CountAbsentDays