Расчет отфильтрованной стоимости - PullRequest
0 голосов
/ 20 ноября 2018

(отредактировано для ясности) Я новичок в DAX и в табличной форме, и столкнулся с проблемой

У нас есть табличная модель с несколькими таблицами фактов, разделяющими некоторые измерения.

Теперь нашпроблема заключается в том, что стоимость одного факта должна рассчитываться на основе стоимости другой таблицы с использованием отношения заказа.

Идея состоит в том, что стоимость DBM является правильной, но стоимость в Adform может бытьиз другого канала, и в этом случае мы должны использовать стоимость из Adform.

Поэтому нам нужно проверить, есть ли связанная с этим цена DBM, связанная с заказами.

У нас есть:

Adform Fact

Adform ID, Order Id, Impressions, Cost
1 , 1 , 100 , 50
2 , 2 , 200 , 68
3 , 2 , 200 , 100
4 , 3 , 200 , 100
5 , -1 , 600 , 300

DBM Fact

DBM ID, Order Id, Impressions, Cost
1 , 1 , 50 , 25
2 , 1 , 20 , 10
3 , 1 , 10 , 10
4 , 2 , 60 , 100
5 , 2 , 80 , 75
6 , -1 , 500 , 1000

И размер заказа

Order Id, Order Name
1 , "Campaign 1"
2 , "Campaign 2"
3 , "Campaign 3"
-1 , "Unknown Order"

Теперь нам нужно сделать следующее.

Стоимость должна быть взята из стоимости Adform, если только тот же заказ не связан с ценой в таблице DBM.В этом случае стоимость должна быть рассчитана как сумма стоимости из DBM, отфильтрованной по общим измерениям.

Я пробовал это:

CALCULATE(if(and(COUNTROWS('AdForm')>0,[Cost (DBM)]>0) ,[Cost (DBM)],[Cost (AdForm)]))

Это работает, как и ожидалось, когда я развернут назаказы.Однако это происходит только на агрегированном уровне, поэтому, когда я углубляюсь в другие распространенные измерения, такие как Дата или Клиент, я просто получаю сумму стоимости DBM в качестве стоимости.

Что я хотел бы получитьявляется суммой стоимости DBM всех заказов, где есть стоимость DBM, и для всех других заказов, чтобы получить стоимость Adform.

1 Ответ

0 голосов
/ 29 ноября 2018

Трудные пятна могут быть неудобными, но помните, что алмазы производятся только под сильным давлением ...

Я бы сначала добавил Меры:

Adform Cost = SUM ( 'Adform Fact'[Cost] ) 

DBM Cost = SUM ( 'DBM Fact'[Cost] ) 

Затем я бы использовал SUMX для запускааналогичное (но упрощенное) вычисление построчно по таблице «Заказы»:

Order Cost =
SUMX (
    'Order dimension',
    IF ( ISBLANK ( [DBM Cost] ), [Adform Cost], [DBM Cost] )
)
...