Существует отдельный срез по годам и месяцам и отдельный срез для дней (прикладываю файл).
Составила меру для сравнение данных из месяца к месяцу за одинаковые промежутки дней, например, выбираю в срезе с днями с 1-15 число и сравниваются только эти дни по продажам. и Все идет гладко, но, когда выбираю сравнение с 1-30 сравнение февраля к январю идет не корректно, сравнивает почему-то данных из января с 1-28, хотя надо с 1-30. ОЧЕНЬ прошу помощи:
Monthly Growth % =
VAR HasDaySelection = ISFILTERED('_Calendar_дата_стадии'[Дата].[День])
RETURN
// Если нет выбора конкретных дней, использую простой метод сравнения месяцев
IF(
NOT HasDaySelection,
VAR CurrentValue = [Сделки, шт без отказов]
VAR PreviousValue =
CALCULATE(
[Сделки, шт без отказов],
PREVIOUSMONTH('_Calendar_дата_стадии'[Дата])
)
RETURN
IF(
NOT ISBLANK(CurrentValue) && NOT ISBLANK(PreviousValue),
DIVIDE(CurrentValue - PreviousValue, PreviousValue, 0),
BLANK()
),
// Если выбраны конкретные дни, использую сложный метод сравнения
VAR SelectedDayStart = 1
VAR SelectedDayEnd = 30 // Максимальный день, который может быть выбран
// Находим реальные даты в выбранном периоде
VAR MinDate = MIN('_Calendar_дата_стадии'[Дата])
VAR MaxDate = MAX('_Calendar_дата_стадии'[Дата])
// Фильтр для текущего периода (учитываем только дни, которые существуют в месяце)
VAR CurrentValue =
CALCULATE(
[Сделки, шт без отказов],
FILTER(
ALL('_Calendar_дата_стадии'[Дата]),
'_Calendar_дата_стадии'[Дата] >= MinDate &&
'_Calendar_дата_стадии'[Дата] <= MaxDate &&
DAY('_Calendar_дата_стадии'[Дата]) >= SelectedDayStart &&
DAY('_Calendar_дата_стадии'[Дата]) <= SelectedDayEnd
)
)
// Для предыдущего месяца берем соответствующие дни (с учетом разной длины месяцев)
VAR PreviousMonthDates =
GENERATE(
FILTER(
SUMMARIZE(
CALCULATETABLE(
'_Calendar_дата_стадии',
FILTER(
ALL('_Calendar_дата_стадии'[Дата]),
'_Calendar_дата_стадии'[Дата] >= MinDate &&
'_Calendar_дата_стадии'[Дата] <= MaxDate &&
DAY('_Calendar_дата_стадии'[Дата]) >= SelectedDayStart &&
DAY('_Calendar_дата_стадии'[Дата]) <= SelectedDayEnd
)
),
'_Calendar_дата_стадии'[Дата]
),
TRUE
),
VAR CurrentDate = '_Calendar_дата_стадии'[Дата]
VAR PrevMonth = DATE(YEAR(CurrentDate), MONTH(CurrentDate)-1, 1)
VAR DaysInPrevMonth = DAY(EOMONTH(PrevMonth, 0))
VAR DayToTake = MIN(SelectedDayEnd, DaysInPrevMonth)
VAR PrevDate =
IF(
DAY(CurrentDate) <= DaysInPrevMonth,
DATE(YEAR(PrevMonth), MONTH(PrevMonth), DAY(CurrentDate)),
DATE(YEAR(PrevMonth), MONTH(PrevMonth), DaysInPrevMonth)
)
RETURN ROW("PrevDate", PrevDate)
)
VAR PreviousValue =
CALCULATE(
[Сделки, шт без отказов],
FILTER(
ALL('_Calendar_дата_стадии'[Дата]),
CONTAINS(PreviousMonthDates, [PrevDate], '_Calendar_дата_стадии'[Дата])
)
)
RETURN
IF(
NOT ISBLANK(CurrentValue) && NOT ISBLANK(PreviousValue) && PreviousValue <> 0,
DIVIDE(CurrentValue - PreviousValue, PreviousValue, 0),
BLANK()
))