Страницы: 1
RSS
Условия при расчете Меры в PP
 
Добрый день! Друзья, еще один вопрос.
В примере тестовый файл с БДР, исходные данные преобразовываются в необходимы й формат с помощью PQ, модель связана с PP, где рассчитываются Меры, результат сводная таблица. Меры рассчитывают сумму в зависимости от фильтра, но в БДР есть показатель (стр = 500) по которому необходимо рассчитать не сумму, а ср. показатель. Помогите добавить это условие в расчет Мер.
Файл с примером прилагается.
 
В теории как то так:
Код
=CALCULATE(IF('Преобразование Исх'[Стр]=500;AVERAGE('Преобразование Исх'[Значение]);SUM('Преобразование Исх'[Значение])); FILTER(ALL('Преобразование Исх'[Месяц]);'Преобразование Исх'[Месяц]<=MAX('Преобразование Исх'[Месяц])))

но ругается.

 
Я правильно понял, что везде где у вас в сводной считается сумма, для строки где Стр = 500 вместо суммы нужно посчитать среднее и все это в одной мере?
Вот вариант для года целиком, по аналогии можете изменить все остальные меры
Код
Total Ave Sum:=IF( 
   VALUES( 'Преобразование Исх'[Стр] ) = 500; 
   CALCULATE( AVERAGE( 'Преобразование ИСХ'[Значение] ); ALL( 'Преобразование ИСХ'[Месяц] ) ); 
   CALCULATE( SUM( 'Преобразование ИСХ'[Значение] ); ALL( 'Преобразование ИСХ'[Месяц] ) ) )
Изменено: PooHkrd - 12.11.2019 14:38:38
Вот горшок пустой, он предмет простой...
 
PooHkrd, Спасибо Пух) Всегда выручаешь)
 
PooHkrd, синтаксис понятен, исправил, но теперь ругается что ожидалось единственное значение, а передана таблица или массив. Во вложении файл с исправленными мерами.
 
Где ругается? В примере все работает. Такая ошибка может появиться только если вы включите общие или промежуточные итоги для столбцов. В таком случае функция VALUES будет выдавать не скалярное значение а список уникальных значений столбца в контексте фильтра сводной таблицы. И тогда попытка сравнения таблицы со скалярным значением 500 будет выдавать ошибку.
Можно усовершенствовать условие вот так:
Код
Total:=IF(
   COUNTROWS(VALUES('Преобразование Исх'[Стр])) = 1;
   IF(
      VALUES('Преобразование Исх'[Стр])=500;
      CALCULATE(AVERAGE('Преобразование ИСХ'[Значение]);ALL('Преобразование ИСХ'[Месяц]));
      CALCULATE(SUM('Преобразование ИСХ'[Значение]);ALL('Преобразование ИСХ'[Месяц])));
   BLANK() )
Изменено: PooHkrd - 12.11.2019 16:06:55
Вот горшок пустой, он предмет простой...
 
При попытке обновить сводную выдает ошибку:
Изменено: TankSpb - 12.11.2019 16:13:01
 
Ну так потому, что в мере, которую вы пытались создать  вы передаете не скалярное значение а таблицу

Код
HP2:=CALCULATE(SUM('Преобразование Исх'[Значение]); FILTER(ALL('Преобразование Исх'[Месяц]);'Преобразование Исх'[Месяц]<=MAX('Преобразование Исх'[Месяц])))

удалите меру из модели  если она не нужна или измените ее
Изменено: Dyroff - 12.11.2019 16:17:59
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
PooHkrd написал: Можно усовершенствовать условие...
Чувствую себя Пяточком) Так работает! Спасибо!
 
Цитата
PooHkrd написал: Можно усовершенствовать условие...
Чувствую себя Пяточком) Так работает! Спасибо!

Цитата
Dyroff написал: Ну так потому, что в мере, которую вы пытались создать  вы передаете не скалярное значение а таблицу
Это я понимаю!

Цитата
Dyroff написал: удалите меру из модели  если она не нужна или измените ее
Нужна, вопрос был как изменить!

Цитата
PooHkrd написал: COUNTROWS(VALUES('Преобразование Исх'[Стр])) = 1;
А по какому принципу передаются значения для расчета Мер? Обычно это либо массив либо значение, а тут получается и то и другое!?
 
TankSpb, тут есть один нюанс.
В вашей формуле функция VALUES возвращает на выходе список уникальных значений столбца отфильтрованных сводной таблицей. До тех пор пока функция рассчитывается в ячейках, на которую наложен фильтр столбца Стр вы получаете таблицу из одного столбца и одной строки, а такие таблицы DAX умеет сравнивать со скалярными значениями, но как только фильтр пропадает, например в итогах, то на выходе уже столбец с несколькими значениями и получаем ошибку в формуле.
Поэтому сначала делаем проверку, сколько значений выдает VALUES, если одно то можно сравнивать его с 500, т.к. ошибки не будет. Если больше, то мы понимаем что расчет ведется где-то в итогах и мера выдаст BLANK() или что вы там туда поставите, и ошибки тоже не будет.
Кстати, COUNTROWS( VALUES( что-то ) ) можно заменить на DISTINCTCOUNT( что-то )
Изменено: PooHkrd - 12.11.2019 17:21:26
Вот горшок пустой, он предмет простой...
 
TankSpb, о чем название темы? О каких услових и для какой меры речь? Предложите новое. Модераторы заменят
 
PooHkrd, Понятно, спасибо.
Цитата
PooHkrd написал:
Кстати, COUNTROWS( VALUES( что-то ) ) можно заменить на DISTINCTCOUNT( что-то )
Попробовал, работает!
 
vikttur, предлагаю так:
Power Pivot, DAX. Как правильно использовать функцию IF в формуле меры с учетом контекста фильтра сводной таблицы.
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх