Коллеги, привет!
Помогите, пожалуйста, разобраться с логикой работы итерационных функций.
Дана простейшая модель данных: менеджеры, суммы, затраты.
Задаю простейшую меру "Прибыль":
Далее создаю меру с общей прибылью по всем менеджерам:
По этим мерам нет никаких вопросов.
Далее создаю меру также с таблицей ALL('Заявки') в первом аргументе, но с мерой (а не выражением) во втором:
И тут возникает вопрос: почему эта мера в разрезе менеджеров выдала тот же результат, что и и предыдущая?
Я размышляю так:
ф-ция SUMX принимает на вход полную таблицу "Заявки" и по каждой строке этой таблицы считает меру "Прибыль" и агрегирует (суммирует) её столько раз, сколько строк в исходной таблице "Заявки".
В случае с мерой "Прибыль_ALL+Выражение" вопросов нет. Тут во всей таблице "Заявке" выполняется построчно вычитание "затрат" из "суммы" и агрегирование (сложение) этих построчных вычислений.
В случае с мерой "Прибыль_ALL+Мера" логика должна быть как будто другая. Тут также на вход подаётся полная таблица "Заявки", но вторым аргументом - мера, а мера по умолчанию идёт с ф-цией CALCULATE. А раз так, значит мера автоматически принимает контекст фильтра.
Возьмём строку по менеджеру "Воснецова". Выражение ALL('Заявки') обнуляет фильтр по менеджеру "Воснецова", в итоге будет посчитано сумма по всей таблице "Заявки", но второй аргумент у нас мера "Прибыль", а "Прибыль" по менеджеру "Воснецова" = 141
Так не должно ли по идее суммироваться по строке "Воснецова" 10 раз (по количеству строк в таблице "Заявки") число 141 ?
Помогите, пожалуйста, разобраться с логикой работы итерационных функций.
Дана простейшая модель данных: менеджеры, суммы, затраты.
Задаю простейшую меру "Прибыль":
Код |
---|
Прибыль := SUMX( 'Заявки', 'Заявки'[Сумма] - 'Заявки'[Затраты]) |
Код |
---|
Прибыль_ALL+Выражение = SUMX( ALL('Заявки'), 'Заявки'[Сумма] - 'Заявки'[Затраты]) |
Далее создаю меру также с таблицей ALL('Заявки') в первом аргументе, но с мерой (а не выражением) во втором:
Код |
---|
Прибыль_ALL+Мера = SUMX( ALL('Заявки'), [Прибыль]) |
Я размышляю так:
ф-ция SUMX принимает на вход полную таблицу "Заявки" и по каждой строке этой таблицы считает меру "Прибыль" и агрегирует (суммирует) её столько раз, сколько строк в исходной таблице "Заявки".
В случае с мерой "Прибыль_ALL+Выражение" вопросов нет. Тут во всей таблице "Заявке" выполняется построчно вычитание "затрат" из "суммы" и агрегирование (сложение) этих построчных вычислений.
В случае с мерой "Прибыль_ALL+Мера" логика должна быть как будто другая. Тут также на вход подаётся полная таблица "Заявки", но вторым аргументом - мера, а мера по умолчанию идёт с ф-цией CALCULATE. А раз так, значит мера автоматически принимает контекст фильтра.
Возьмём строку по менеджеру "Воснецова". Выражение ALL('Заявки') обнуляет фильтр по менеджеру "Воснецова", в итоге будет посчитано сумма по всей таблице "Заявки", но второй аргумент у нас мера "Прибыль", а "Прибыль" по менеджеру "Воснецова" = 141
Так не должно ли по идее суммироваться по строке "Воснецова" 10 раз (по количеству строк в таблице "Заявки") число 141 ?
Шлюхогон42