Это не будет суперэффективно, если у вас слишком много сотрудников и дат, но вы можете взять декартово произведение списка сотрудников со списком всех возможных дней и отфильтровать его:
CalculatedTable =
VAR CartesianProduct =
CROSSJOIN (
VALUES ( Main[employee_number] ),
CALENDAR ( MIN ( Main[start] ), MAX ( Main[end] ) )
)
RETURN
FILTER (
CartesianProduct,
[Date] >= LOOKUPVALUE ( Main[start], Main[employee_number], [employee_number] ) &&
[Date] <= LOOKUPVALUE ( Main[end], Main[employee_number], [employee_number] )
)
Функция CALENDAR
генерирует таблицу со столбцом Date
, начиная с первого аргумента, и включает все дни до второго аргумента.
Я не уверен, как это сделать больше эффективно в DAX, но я могу придумать более чистое решение в M (язык редактора запросов).