Страницы: 1
RSS
Использование IF при расчете меры в PowerPivot, Для разных показателей при расчете использовать разную формулу
 
Добрый день, знатоки!

Прошу помощи - не могу сообразить как использовать функцию IF в PowerPivot. Она позволяет оперировать на уровне столбцов, а не на уровне элементов.
Задача такая - есть показатели, часть из них - расчетные значения (т.е. процент), а часть абсолютные.
Нужно чтобы для разных показателей формула расчета была разная

т.е. что-то типа такого: if (Поазатель="усушка", divide (с ошибкой,всего), if (Показатель="срок", всего)

в sql я бы сделал это через case, но в DAX так не работает :(

Пример в приложении
 
Доброе время суток
Цитата
Raritet написал:
в sql я бы сделал
Что-то я не уверен, что знатоки SQL оперируют понятиями
Цитата
Raritet написал:
Она позволяет оперировать на уровне столбцов, а не на уровне элементов.
Всё она позволяет
Код
=
IF (
    VALUES ( 'Таблица1'[Показатель] ) = "4-Срок";
    SUM ( 'Таблица1'[Всего] );
    DIVIDE ( SUM ( 'Таблица1'[С ошибкой] ); SUM ( 'Таблица1'[Всего] ); 56 )
)
Изменено: Андрей VG - 15.08.2020 11:28:07
 
А ещё в DAX есть SWITCH - не CASE, конечно но позволит уйти от множества IF
 
Андрей VG - не работает, просит передавать единственное значение, а эта формула передает несколько. Попробуйте в мой пример это добавить и сохранить - будет ругаться

DrillPipe - а разве Swich можно в мере использовать? Она вроде только на меру и ссылается, построчно не работает
Изменено: Raritet - 15.08.2020 22:49:06
 
Андрей VG, нет, ошибся, не работает :( Пишет что ошибка вычисления - ожидалось единственное значение, а передана таблица или несколько значений
 
Цитата
Raritet написал:
не работает
Да, ну
 
Цитата
Raritet написал:
Пишет что ошибка вычисления - ожидалось единственное значение,
Конечно ошибка
В линию "Grand Total"    VALUES ( 'Таблица1'[Показатель] ) - передает все значения столбца, а вы сравниваете со скалярным значением

Так должно сработать
Код
IF (
    HASONEVALUE ( 'Таблица1'[Показатель] ),
    SWITCH (
        TRUE (),
        VALUES ( 'Таблица1'[Показатель] ) = "4-Срок", SUM ( 'Таблица1'[Всего] ),
        DIVIDE ( SUM ( 'Таблица1'[С ошибкой] ), SUM ( 'Таблица1'[Всего] ), BLANK () )
    ),
    "Many lines"
)
 
Да не работает же, Андрей! Попробуйте в своем же примере обновить сводную или выбрать в фильтре 2 показателя.
Изменено: Raritet - 17.08.2020 09:10:21
 
DrillPipe -

Да, вот этот вариант то что нужно! Супер! Спасибо, тема закрыта
Изменено: Raritet - 17.08.2020 09:11:28
 
Цитата
Raritet написал:
в своем же примере обновить сводную или выбрать в фильтре 2 показателя.
Обновил и выбрал. Так и не понял, что не так и не работает :)
 
Здравствуйте, коллеги! Андрей, в Excel 2016 (16.0.2026.1000) действительно сводная таблица не обновляется. Вероятно, разные версии.
Владимир
 
Цитата
sokol92 написал:
в Excel 2016 (16.0.2026.1000) действительно сводная таблица не обновляется
Добрый день, Владимир.
Большое спасибо за исследование. Делал в Excel 365. В нём ошибка только, если включены общие итоги по столбцам. Но этот случай никак не определён ТС. DrillPipe дополнил ещё одной проверкой, спасибо.
 
Raritet, цитата - не бездумная копия. Приведите в порядок сообщения №8, №9
 
Цитата
написал:
VALUES ( 'Таблица1'[Показатель] ) = "4-Срок",
Можете пожалуйста объяснить логику формулы?
Если ( перечень содержит одно единственное значение, то.... если нет то "Many lines")
Но у нас же несколько значений(  никак не могу понять
 
Pox777, функция values() не определилась со своей принадлежностью: если в контексте несколько значений, то она вернет таблицу из одного столбца с этими значениями; если одно - то вернет скалярное значение или таблицу из одной строки (она сама разберется, что сейчас требуется :)).
Написанное выше выражение вызывало бы ошибку (так как иногда результат values будет таблицей), если бы не было обернуто в IF, где в первом аргументе проверяется единственность значения (hasonevalue(‘table’column’))
Изменено: surkenny - 21.11.2023 15:25:03
 
Цитата
написал:
КодIF (
   HASONEVALUE ( 'Таблица1'[Показатель] ),
   SWITCH (
       TRUE (),
       VALUES ( 'Таблица1'[Показатель] ) = "4-Срок", SUM ( 'Таблица1'[Всего] ),
       DIVIDE ( SUM ( 'Таблица1'[С ошибкой] ), SUM ( 'Таблица1'[Всего] ), BLANK () )
   ),
   "Many lines"
Не могли бы Вы пошагово объяснить логику этой формулы пожалуйста.
Страницы: 1
Наверх