Расчетная мера, основанная на состоянии в Dax

У меня есть требование в Power Pivot, где мне нужно отображать значение на основе значения столбца измерения.

Если значение - Цена продажи, тогда должна отображаться сумма Стоимость продажи из таблицы1, если себестоимость, то должна отображаться сумма себестоимости, если это прибыль, должно отображаться ((SellingPrice-CostPrice) / SellingPrice)

Моя структура таблицы - Таблица1: -

таблица 1

Таблица2: -  таблица 2

Требуемый вывод: -

output

Если попробовали вариант ниже: -

1. Calculated Measure:=If(Table[Category]="CostPrice",[CostValue],If(Table1[category]="SellingPrice",[SalesValue],([SalesValue]-[CostValue]/[SalesValue])))
*[CostValue]:=Calculate(Sum(Table1[Amount]),Table1[Category]="CostPrice")
*[Sales Value]:=Calculate(Sum(Table1[Amount]),Table1[Category]="SellingPrice")

Пробовал это как в вычисляемом столбце, так и в мере, но не дал мне требуемый результат.


person Piyush Jain    schedule 03.09.2015    source источник
comment
Возможно, вы захотите взглянуть, как в этом сообщении блога используется опция hasonevalue. powerpivotpro.com/2012/06/dax-making -the-case-for-switch   -  person Lukasz P.    schedule 22.09.2015


Ответы (2)


Cost:=
CALCULATE(
    SUM( Table1[Amount] )
    ,Table1[Category] = "CostPrice"
)

Selling:=
CALCULATE(
    SUM( Table1[Amount] )
    ,Table1[Category] = "SellingPrice"
)

Profit:=
DIVIDE(
    [Selling] - [Cost]
    ,[Selling]
)

ConditionalMeasure:=
IF(
    HASONEFILTER( Table2[Category] )
    ,SWITCH(
        VALUES( Table2[Category] )
        ,"CostPrice"
        ,[Cost]
        ,"SellingPrice"
        ,[Selling]
        ,"Profit"
        ,[Profit]
    )
    ,[Profit]
)

HASONEFILTER () проверяет, есть ли контекст фильтра в названном поле и что контекст фильтра включает только одно отдельное значение.

Это просто защита, позволяющая нашему SWITCH () ссылаться на ЗНАЧЕНИЯ (Таблица2 [Категория]). VALUES () возвращает таблицу всех различных значений в названном столбце или таблице. Итак, таблицу 1x1 можно неявно преобразовать в скаляр, который нам нужен в SWITCH ().

SWITCH () - это оператор case.

Наше условие else в IF () просто возвращает [Profit]. Возможно, вам нужно что-то еще, но неясно, что должно произойти на общем уровне. Вы можете оставить это значение выключенным, и мера будет пустой в условии else IF ().

person greggyb    schedule 15.01.2016

Я немного подумал об этом. Я не уверен, почему у вас есть категории в строках. Обычно в наборе данных есть такие столбцы, как: item | CostPrice | SellingPrice | Выгода. Затем вы можете просто использовать столбцы для определения своих полей. Модель становится проще и удобнее в обслуживании.

person Lukasz P.    schedule 15.01.2016