Подскажите, пожалуйста, где у меня ошибка или недостаточно указано условий, я новичок в DAX Буду рада любой наводке "что почитать, где поискать"
Есть формула расчета средних продаж за 3 предыдущих месяца
ср.пр. за 3 мес. = var maxdate = CALCULATE( MAX('Календарь'[ДАТА]); DATEADD('Календарь'[ДАТА];-1;MONTH)) var mindate = CALCULATE(MIN('Календарь'[ДАТА]); DATEADD('Календарь'[ДАТА];-3;MONTH)) return (CALCULATE( SUM('статистика продаж'[Выручка]); FILTER(ALL('Календарь'); 'Календарь'[ДАТА]>=mindate&&'Календарь'[ДАТА]<=maxdate ))/3 )
Если выбирать 1 месяц на срезе - всё ок, Если 2 и более, числа неадекватными становятся. Не понимаю даже что он суммирует в таких случаях Множественный выбор нельзя убирать
нужно чтобы выбирал меньший месяц из указанных на срезе и от него шагал назад
Доброго времени суток! Ксения Зинченко, в срезе у вас только месяцы, дат нет? Если у вас выбраны два месяца в срезе, например июнь и июль, то от июля 1 месяц будет июнь, а от июня 3 месяца будет март, и в итоге у вас получается с марта по июнь 4 месяца.
Lari, добрый день. Можно добавлю комментарий к Вашей мере. Думаю, что функция EDATE не совсем удачна для переменной VAR _EndDate = EDATE ( LASTDATE ( 'Календарь'[ДАТА] ), -1 ), т.к. вернет не последний день месяца, а дату с отступом на месяц, например для 30.04.2024 вернется 30.03.2024. При этом исходя из
Цитата
написал: нужно чтобы выбирал меньший месяц из указанных на срезе и от него шагал назад
наверное, можно так VAR _EndDate = FIRSTDATE ( 'Календарь'[ДАТА] ) - 1 либо VAR _EndDate = EOMONTH( FIRSTDATE ( 'Календарь'[ДАТА] ), -1 )
Alex, да, вы правы, спасибо за замечание, исправил у себя в коде.
Цитата
VAR _EndDate = FIRSTDATE ( 'Календарь'[ДАТА] ) - 1 либо VAR _EndDate = EOMONTH( FIRSTDATE ( 'Календарь'[ДАТА] ), -1 )
только я не понял почему вы используете для определения последнего дня в периоде FIRSTDATE, т.к. если выбраны в срезе 2 месяца то нужен из ТЗ минус один месяц от последнего месяца.
Lari, не знаю какая логика у ТС, но так я понял из
Цитата
написал: нужно чтобы выбирал меньший месяц из указанных на срезе и от него шагал назад
Т.е. возьмем для примера период в срезе 01.04.2024-31.05.2024. Со стартовой датой все однозначно для 01.04.2024 - будет 01.01.2024. А вот с конечной: если взять VAR _EndDate = EOMONTH ( LASTDATE ( 'Календарь'[ДАТА] ), -1 ), то мы получим для 31.05.2024 дату 30.04.2024, соответственно период составит не 01.01.2024-31.03.2024, а 01.01.2024-30.04.2024. А если возьмем FIRSTDATE для периода, то мы получим как раз 31.03.2024. после EOMONTH ( FIRSTDATE ( 'Календарь'[ДАТА] ), -1 )