Lari, если честно, то я не понял, что вы не поняли))
На самом деле в вашем примере все очень просто. Ваша мера:
Код |
---|
Test =
SUMX ( Sales, CALCULATE ( SUM ( Sales[Quantity] ), 'Product'[Product] = "A" ) ) |
Для вычисления, которое у вас находится внутри действуют контекст фильтра, который приходит из строки сводной, и контекст строки, который получаете из таблицы Sales, которая является первым аргументом функции SUMX. На таблицу Sales при этом также действует контекст фильтра, который вы никак НЕ меняете, т.к. CALCULATE у вас внутри, а не снаружи. Соответственно для строки в сводной с Product=B мы получаем, отфильтрованную таблицу по этому продукту, после чего говорим, а теперь просуммируй все продукты А, естественно он ничего не находит и возвращает пусто, а в строке итогов находит только продукты А.
По сути ваша внутренняя функция выглядит так:
Код |
---|
CALCULATE ( SUM ( Sales[Quantity] ),Sales[Product]="B", 'Product'[Product] = "A" ) |
Повторюсь: это происходит потому, что для таблицы Sales вы НЕ меняете в своей функции контекст вычисления
Сравните с написанием:
Код |
---|
Test =
CALCULATE(SUMX ( Sales, CALCULATE ( SUM ( Sales[Quantity] ))), 'Product'[Product] = "A" ) |
Или вот так:
Код |
---|
Test2 =
SUMX ( 'Product', CALCULATE ( SUM ( Sales[Quantity] ), 'Product'[Product] = "A" ) ) |
Различаться будут результаты в строке итогов, т.к. в первом случае мы сначала отфильтровали таблицу Sales по продукту А, а потом сложили.
Во втором случае в строке итогов мы сначала получаем ВСЮ таблицу продуктов, для каждой строки рассчитываем сумму по продукту А, а потом суммируем, поэтому получаем 12.