Страницы: 1
RSS
DAX: процентное сравнение данных от месяца к месяцу за определенные дни, например с 1 по 15 число каждого месяца
 
Добрый день!
Существует отдельный срез по годам и месяцам и отдельный срез для дней (прикладываю файл).
Составила меру для сравнение данных из месяца к месяцу за одинаковые промежутки дней, например, выбираю в срезе с днями с 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()

   ))

Изменено: Angelina_90 - 13.07.2025 20:38:32
Страницы: 1
Читают тему
Наверх