Страницы: 1
RSS
Работа функции CALCULATE. Расчёт доли продаж месяца относительно года, Вопрос по языку DAX в Power BI
 
Уважаемые знатоки DAX!

Снова прошу помочь объяснить, как под капотом считает функция CALCULATE.

Задачка та же, что и в предыдущем вопросе. Хочу посчитать доли продаж, но уже в разрезе месяцев по каждому году.

По-прежнему таблицы: фактЗаявки и 3 справочные: по курсам, по сотрудникам и календарь

В таблице календарь столбцы: даты, месяцы, годы.

Создаю меру "Сумма оплат"

Код
SUM('фактЗаявки'[СуммаСчета])


Затем считаю сумму продаж по каждому году - "Сумма по годам"

Код
 CALCULATE(
             [Сумма оплат],
             ALL('спрКалендарь'[Месяц])) 


И вот по этой мере значения те же, что и в "Сумме оплат". Почему?

Причём конструкция

Код
 ALLEXCEPT('фактЗаявки','спрКалендарь'[Год]) 


решила проблему, но что не так с ALL('спрКалендарь'[Месяц]) ?
Изменено: Дмитрий Никитин - 20.04.2024 00:43:35
Шлюхогон42
 
Дмитрий Никитин, добрый день. Ваш случай: https://blog.crossjoin.co.uk/2015/12/15/power-bi-desktop-sort-by-column-and-dax-calculations-that-us...
 
Цитата
Alex написал:
Ваш случай:

Спасибо! С аглицким у меня плохо, поэтому в понимании почему так происходит гугл-переводчик мне не сильно помог, но действительно, если подтянуть в функцию ALL ещё и столбец с номерами месяцев:

Код
 ALL('спрКалендарь'[Месяц], 'спрКалендарь'[Номер месяца]) 


всё корректно считается.
Шлюхогон42
 
Дмитрий Никитин,
Цитата
написал:
происходит гугл-переводчик мне не сильно помог,
Вроде бы в статье было понятно, что данное поведения происходит из-за сортировки одного столбца по другому (в Вашем случае 'спрКалендарь'[Месяц] сортируется по 'спрКалендарь'[Номер месяца]) и приведен даже код запроса DAX, который генерируется "под капотом", где видно, что запрос помимо основного столбца ('спрКалендарь'[Месяц]) ссылается на дополнительный('спрКалендарь'[Номер месяца]), который и держит фильтр, поэтому и нужно ALL('спрКалендарь'[Месяц], 'спрКалендарь'[Номер месяца])
 
Цитата
Alex написал:
данное поведения происходит из-за сортировки одного столбца по другому
тут понимаете какая вещь... даже если я буду использовать для расчётов ТОЛЬКО столбец "Даты", то есть вот так:

Код
 CALCULATE(
                 [Сумма оплат],
                 ALL('спрКалендарь'[Date].[Месяц])) 


то всё равно будет выдавать неправильный результат. Так что я не понимаю, какое отношение сортировка одного столбца по другому имеет к данной проблеме
Шлюхогон42
 
Дмитрий Никитин, а вы думаете автоматические группировки не сортируются "под капотом"?
Код
Сумма по годам = CALCULATE(
                    [Сумма оплат],
                    ALL('спрКалендарь'[Date].[Месяц],'спрКалендарь'[Date].[№Месяца]))

Кстати, а Вы пробовали убирать сортировку столбца месяц по столбцу Номер месяца в Вашем первоначальном примере? Какой результат мера выводит?
Изменено: Alex - 20.04.2024 17:35:44
 
Цитата
Alex написал:
Какой результат мера выводит?
Да, в этом случае правильный - сумму продаж по годам без учёта месяца
Шлюхогон42
 
Коллеги, я вмешаюсь :)
Очевидно, что лучше (почти всегда, кроме сложных случаев с приоритетом производительности) написать шаблонную меру.
Не важно, что будет влиять на контекст фильтра: даты, недели, месяцы, кварталы, .. . В любом случае мера должна вычислять значение за весь год.
В таком случае идеально подходит ALLEXCEPT('фактЗаявки','спрКалендарь'[Год]) .

Дмитрий Никитин, а Вам посоветую купить книги Феррари/Руссо
Подробное руководство по DAX
Анализ данных…

Ощущение, что Вы пока даже очевидных подсказок не понимаете (без подсказки, это может быть действительно не так просто) и мыслите не “функциональным языком bi”. Тут и теорию изучить нужно, и мыслить образно что ли.
Изменено: surkenny - 20.04.2024 22:33:41
Страницы: 1
Наверх