DAX折舊計算和分攤模型 - Power BI
DAX折舊計算和分攤模型
作者:張輝 - wishwise
目標
- 計算各期間的折舊金額
- 在利潤預測中,自動計算折舊金額在不同產品銷量組合的分攤。
計算各期間的折舊金額
計算各期間的折舊金額,我們可以充分運用DAX函式語言中的相關財務函式來快速計算,如
SLN – 直線折舊法
SYD – 年數總和折舊法
DB – 餘額遞減法
DDB – 雙倍餘額遞減法
這些函式的具體功能,大家可以查閱微軟文件,這裡不做詳細解釋。
資料準備
在此模型中,準備如下的資料
- 資產類別(維度表 Dim_CapexDetails)
(圖1-1,維度表中定義了資產類別的折舊方法和對應折舊年限,如建築,採用直線法(SLN)折舊,折舊期限20年/240月)
- 使用中的資產清單(行為表 Fact_Investment)
(圖1-2,此行為表為資產清單列表,每個行專案中包含各項資產的金額,資產類別,折舊開始時間,以及殘值,以及該資產服務的產品範圍)
編寫度量值來計算折舊的思路如下:
- 通過迭代Fact_Investment表中的每一行(資產),累加計算所有資產的折舊總額。
- 因為折舊函式返回的是每一折舊期間的折舊額,因此在迭代Fact_Investment表中的每一行(資產)時,再次巢狀迭代計算每個折舊期間的折舊額。
- 根據資產維度表中定義的折舊方法,為不同資產應用不同的折舊方法。
依此思路,可以編寫折舊的度量值如下:
(圖1-3)在此度量值中,迭代計算仍然保留著資料的世系關係(data linage),因此依然可以通過日期表和資產維度來篩選折舊資料,並可以對摺舊資料進行分析。
(圖1-4,篩選特定期間的折舊表,並依據資產的類別進行組合)
到這裡,我們就完成了各期間的折舊金額的計算。
折舊金額在不同產品銷量組合的分攤
在計算不同產品的毛利時,我們都需要將折舊金額在不同產品之間進行分攤,對於生產工藝接近的不同產品,按照產量分攤是常用的方法。此外,在利潤預測中,不同的產品組合將會對摺舊分攤產生影響,利用DAX函式語言我們能夠準確地且有效率地按照不同產品組合,將折舊在產品之間分攤。
資料準備
除了前述的資產維度表(圖1-1)和資產清單(圖1-2)之外,我們再準備如下2張表。
- 產品的維度表
(圖2-1,產品維度表定義產品的程式碼,名稱以及產品組別)
- 各產品的銷售預測
(圖2-2,各產品的銷售預測 )
圖2-2展示的是矩陣表格,在power BI中實際的表格是一維資料表。
(圖2-3,一維形式的銷售資料)
思路詳解
- 折舊分攤需滿足以下條件
- 所有的當期折舊全部分攤,即各產品分攤折舊額之和等於當期折舊總額。
- 為特定產品或產品組服務的資產折舊分攤到對應的產品或產品組。
例如,生產手機需要的模具的折舊,只能在手機的產品中分攤,而不能分攤到電腦產品中。而裝配線因同時用於手機和電腦兩個產品的生產,則裝配線的折舊需由兩個產品共同分攤。
- 折舊分攤模型的設計思路
圖2-4展示了折舊分攤的路徑。
(圖2-4 折舊分攤的路徑)
因為需按照產品分攤,我們可以在一維的產品表(圖2-3)中新增計算列,利用計算列提供的迭代,對產品表中的每一行計算對應的折舊費用,在計算時,關鍵要點如下
1.對於(產品表)當前行,只考慮服務於該行對應產品的資產折舊,即
i. 承擔專門服務該產品的資產(專用裝置)的全部折舊
ii. 分擔通用資產(非專用裝置)按照產量為權重進行分攤的部分折舊
2.作為分攤權重的產量,統計範圍需注意以下幾點
i. 統計產量的期間和折舊的期間對應,例如,待分攤的折舊金額為月度數字,則對應的產量應同樣按月度統計。
ii. 產量作為分攤依據,不同資產服務的產品不同,則對應的產量不同。例如,專用於產品phone-A的裝置,分攤的產量即為phone-A的產量(產品phone-A吸收該裝置的全部折舊),用於生產所有phone類別的裝置,分攤的產量為類別phone的所有產量。
3.迭代計算
對於產品表的每一行,需要迭代資產清單Fact_Investment,以計算每一項資產,應在當前產品上分攤多少金額
演算法的公式表達
- DAX 函式語句
(圖2-5,計算列的DAX函式)
結果
計算列顯示的結果如圖2-6所示,
(圖2-6,計算列顯示對應產品所分攤的折舊額)
各產品分攤的折舊在矩陣表中按產品層次和時間維度顯示
(圖2-7,各產品分攤的折舊矩陣圖)
當各產品的銷量組合發生變動時,分攤的折舊額會自動更新,從而使得折舊的分攤實現智慧化和自動化,實時應對業務層面發生的變化。