Страницы: 1
RSS
Логика работы итерационной ф-ции DAX с выражением и мерой во 2-м аргументе, Логика работы ф-ции SUMX с функцией ALL в первом аргументе и выражением/мерой во втором
 
Коллеги, привет!

Помогите, пожалуйста, разобраться с логикой работы итерационных функций.

Дана простейшая модель данных: менеджеры, суммы, затраты.

Задаю простейшую меру "Прибыль":
Код
Прибыль :=
SUMX(
    'Заявки',
    'Заявки'[Сумма] - 'Заявки'[Затраты])

Далее создаю меру с общей прибылью по всем менеджерам:
Код
Прибыль_ALL+Выражение = 
SUMX(
    ALL('Заявки'),
    'Заявки'[Сумма] - 'Заявки'[Затраты])

По этим мерам нет никаких вопросов.

Далее создаю меру также с таблицей ALL('Заявки') в первом аргументе, но с мерой (а не выражением) во втором:
Код
Прибыль_ALL+Мера = 
SUMX(
    ALL('Заявки'),
    [Прибыль])

И тут возникает вопрос: почему эта мера в разрезе менеджеров выдала тот же результат, что и и предыдущая?

Я размышляю так:
ф-ция SUMX принимает на вход полную таблицу "Заявки" и по каждой строке этой таблицы считает меру "Прибыль" и агрегирует (суммирует) её столько раз, сколько строк в исходной таблице "Заявки".

В случае с мерой "Прибыль_ALL+Выражение" вопросов нет. Тут во всей таблице "Заявке" выполняется построчно вычитание "затрат" из "суммы" и агрегирование (сложение) этих построчных вычислений.

В случае с мерой "Прибыль_ALL+Мера" логика должна быть как будто другая. Тут также на вход подаётся полная таблица "Заявки", но вторым аргументом - мера, а мера по умолчанию идёт с ф-цией CALCULATE. А раз так, значит мера автоматически принимает контекст фильтра.

Возьмём строку по менеджеру "Воснецова". Выражение ALL('Заявки') обнуляет фильтр по менеджеру "Воснецова", в итоге будет посчитано сумма по всей таблице "Заявки", но второй аргумент у нас мера "Прибыль", а "Прибыль" по менеджеру "Воснецова" = 141
Так не должно ли по идее суммироваться по строке "Воснецова" 10 раз (по количеству строк в таблице "Заявки") число 141 ?
Шлюхогон42
Страницы: 1
Наверх