Вероятно, есть много способов сделать это, но вот один из способов, который объединяет несколько различных концепций:
Table =
VAR Starting = DATE(2018, 1, 5)
VAR Ending = DATE(2019, 1, 5)
VAR MonthTable =
SUMMARIZE(
ADDCOLUMNS(
CALENDAR(Starting, Ending),
"StartDate", EOMONTH([Date], 0) + 1),
[StartDate],
"EndDate", EOMONTH([StartDate], 0) + 1)
RETURN UNION(
ROW("StartDate", Starting, "EndDate", EOMONTH(Starting, 0) + 1),
FILTER(MonthTable, [EndDate] < Ending && [StartDate] > Starting),
ROW("StartDate", EOMONTH(Ending, -1) + 1, "EndDate", Ending)
)
Обычно вы начинаете с функции CALENDAR
, чтобы получить все дни, помечаете каждую дату соответствующим месяцем, а затем суммируете эту таблицу, чтобы просто вернуть одну строку для каждого месяца.
Поскольку первая и последняя строки немного нерегулярны, я добавил их в фильтрованную версию таблицы месяцев и добавил их к полученной таблице.