DAX/PowerBI系列 - 庫存總價值(Inventory Value)
歡迎交流與騷擾

難度: ★★☆☆☆(2星)
適用: ★★☆☆☆(2星)
概況:
有多少貨(庫存)當然重要(對於運營人員),這些貨值多少錢當然也十分重要(對於高層管理/財務人員)。
一般在每個會計周期結束時,會根據市場售價或者成本價來會評估庫存總價值(取低者) 。
評估方法有四種:先進先出(FIFO: first-in, first-out),后進先出(LIFO: last-in, first-out),均價(AVCO: average cost),指定價格
正文:
前文DAX/PowerBI系列 - 累計總計(Cumulative Total)介紹了這個模式普片適用於基於時間對業務/操作進行累計統計度量,例如:計算年度累計,月度累計,庫存量,庫存價值。
這里基於前文的Cumulative Total得到庫存數目,同時,得到某時間內最后一筆交易的單價給產品定價,就能算出總庫存價格。
還有,可以利用DAX/PowerBI系列 - 參數表(Parameter Table)來做what-if分析。
最終PowerBI效果顯示如下:(耐心等待PowerBI 出來,噔噔噔噔~~~)

應用場景:
歡迎轉載,請保留原文鏈接和作者信息。O(∩_∩)O謝謝。
DAX/PowerBI系列 - 庫存總價值(Inventory Value)
作者:馬丁叔叔 鏈接:http://www.cnblogs.com/lizardbi/p/DAX-PATTERN-POWERBI-Inventory-Value.html
數據模型:

Movements表中,正數表示入庫/進貨數目,負數表示出庫/銷售數目。UnitCost對應成本和售價。

要點:
- 根據movement得到最后的transaction DateKey
- 得到根據上面DateKey庫存
- 得到某時段的交易價格
庫存 |
最后買價 | 最后賣價 |
UnitsInStock := --庫存 IF ( MIN ( 'Date'[DateKey] ) <= CALCULATE ( MAX ( Movements[DateKey] ), ALL ( Movements ) ), CALCULATE ( SUM ( Movements[Quantity] ), FILTER ( ALL( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) ) ) |
LastBuyPrice := IF ( HASONEVALUE ( Products[ProductKey] ), AVERAGEX ( CALCULATETABLE ( TOPN ( 1, Movements, Movements[DateKey] ), Movements[Quantity] > 0, --買/入庫 FILTER ( ALL ( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) ), Movements[UnitCost] ) ) |
LastSellPrice := IF ( HASONEVALUE ( Products[ProductKey] ), AVERAGEX ( CALCULATETABLE ( TOPN ( 1, Movements, Movements[DateKey] ), Movements[Quantity] < 0, --賣/出庫 FILTER ( ALL ( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) ), Movements[UnitCost] ) )
|
注1:以上三個度量都是根據當前上下文(Filter Context)用MAX ( 'Date'[Date] )得到。
注2:這里限定了最后買/賣價格只有當僅有一個產品選中是有效
注3:AVERAGEX的作用是用來求得某天的均價(如果某天有多個價格的話),可以換成MAXX,MINX等
玩起來:
要把玩上面的PowerBI請戳:DAX/PowerBI系列 - 庫存總價值(Inventory Value)
