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,各產品分攤的折舊矩陣圖)
當各產品的銷量組合發生變動時,分攤的折舊額會自動更新,從而使得折舊的分攤實現智能化和自動化,實時應對業務層面發生的變化。