Power BI DAX - оцените правильную стоимость - PullRequest
0 голосов
/ 11 февраля 2020

Я новичок в Power BI и мне нужна небольшая помощь. У меня есть таблица A с такими продажами:

ITEMID | Invoicedate | Price 
5001   | 30.12.2019  | 500,00 
5001   | 20.01.2020  | 500,00

и другая таблица B с другими Costvalue:

ITEMID | Costvalue | Activationdate 
5001   |    250,00 | 17.08.2019 
5001   |    254,00 | 11.01.2020  

. Для расчета маржи правильное значение Costvalue должно быть used.

Для приведенных выше примеров:

  • Правильный запас для позиции 5001 с Invoicedate 30.12.2019 равен 250,00 (= 500, 00 - 250,00).
  • Правильная маржа для позиции 5001 с Invoicedate 20.01.2020 составляет 246,00 (= 500,00 - 254,00), поскольку активен новый более высокий Costvalue с 20.01.2020.

Как сгенерировать правильное значение Costvalue относительно Activationdate в DAX?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Вы можете добавить следующий столбец в таблицу продаж:

CostPrice = 
var tempTable = CALCULATE(MAX(Cost[ Activationdate ]); FILTER(Cost;Cost[ITEMID ] = Sales[ITEMID ] && Cost[ Activationdate ] < Sales[ Invoicedate ]))
return LOOKUPVALUE(Cost[ Costvalue ];Cost[ Activationdate ];tempTable)

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

enter image description here

0 голосов
/ 11 февраля 2020

Вам необходимо создать поле даты окончания в таблице B. Что-то вроде следующего:

End Date = 
    VAR ItemID='TableB'[Item ID]
    VAR Date1 = 'TableB'[Activation Date]
    VAR Enddate1=CALCULATE(MIN('TableB'[Activation Date]),FILTER('TableB','TableB'[Item ID]=ItemID),FILTER('TableB','TableB'[Activation Date]>Date1))
RETURN IF(Enddate1=BLANK(),DATE(2100,1,1),Enddate1)

Здесь для последней записи дата окончания установлена ​​равной 2100, чтобы избежать путаницы. Затем вы можете создать еще один вычисляемый столбец, чтобы получить значение COST:

Cost = 
    VAR ItemID=TableA[ItemID]
    VAR Date1=TableA[Invoice Date]
    VAR Cost=CALCULATE(MIN(TableB[Cost Value]),FILTER(TableB,TableB[Item ID]=ItemID),FILTER(TableB,Date1>=TableB[Activation Date]),FILTER(TableB,Date1<=TableB[End Date]))
RETURN Cost

Это должно дать вам значение стоимости для каждой записи. Надеюсь, это поможет.

...