1. 程式人生 > 其它 >DAX折舊計算和分攤模型 - Power BI

DAX折舊計算和分攤模型 - Power BI

DAX折舊計算和分攤模型

作者:張輝 - wishwise

目標

  1. 計算各期間的折舊金額
  2. 在利潤預測中,自動計算折舊金額在不同產品銷量組合的分攤。

計算各期間的折舊金額

計算各期間的折舊金額,我們可以充分運用DAX函式語言中的相關財務函式來快速計算,如

SLN – 直線折舊法

SYD – 年數總和折舊法

DB – 餘額遞減法

DDB – 雙倍餘額遞減法

這些函式的具體功能,大家可以查閱微軟文件,這裡不做詳細解釋。

資料準備

在此模型中,準備如下的資料

  1. 資產類別(維度表 Dim_CapexDetails)

(圖1-1,維度表中定義了資產類別的折舊方法和對應折舊年限,如建築,採用直線法(SLN)折舊,折舊期限20年/240月)

  1. 使用中的資產清單(行為表 Fact_Investment)

(圖1-2,此行為表為資產清單列表,每個行專案中包含各項資產的金額,資產類別,折舊開始時間,以及殘值,以及該資產服務的產品範圍)

編寫度量值來計算折舊的思路如下:

  1. 通過迭代Fact_Investment表中的每一行(資產),累加計算所有資產的折舊總額。
  2. 因為折舊函式返回的是每一折舊期間的折舊額,因此在迭代Fact_Investment表中的每一行(資產)時,再次巢狀迭代計算每個折舊期間的折舊額。
  3. 根據資產維度表中定義的折舊方法,為不同資產應用不同的折舊方法。

依此思路,可以編寫折舊的度量值如下:

(圖1-3)在此度量值中,迭代計算仍然保留著資料的世系關係(data linage),因此依然可以通過日期表和資產維度來篩選折舊資料,並可以對摺舊資料進行分析。

(圖1-4,篩選特定期間的折舊表,並依據資產的類別進行組合)

到這裡,我們就完成了各期間的折舊金額的計算。

折舊金額在不同產品銷量組合的分攤

在計算不同產品的毛利時,我們都需要將折舊金額在不同產品之間進行分攤,對於生產工藝接近的不同產品,按照產量分攤是常用的方法。此外,在利潤預測中,不同的產品組合將會對摺舊分攤產生影響,利用DAX函式語言我們能夠準確地且有效率地按照不同產品組合,將折舊在產品之間分攤。

資料準備

除了前述的資產維度表(圖1-1)和資產清單(圖1-2)之外,我們再準備如下2張表。

  1. 產品的維度表

(圖2-1,產品維度表定義產品的程式碼,名稱以及產品組別)

  1. 各產品的銷售預測

(圖2-2,各產品的銷售預測 )

圖2-2展示的是矩陣表格,在power BI中實際的表格是一維資料表。

(圖2-3,一維形式的銷售資料)

思路詳解

  1. 折舊分攤需滿足以下條件
    1. 所有的當期折舊全部分攤,即各產品分攤折舊額之和等於當期折舊總額。
    2. 為特定產品或產品組服務的資產折舊分攤到對應的產品或產品組。

      例如,生產手機需要的模具的折舊,只能在手機的產品中分攤,而不能分攤到電腦產品中。而裝配線因同時用於手機和電腦兩個產品的生產,則裝配線的折舊需由兩個產品共同分攤。

  2. 折舊分攤模型的設計思路
    圖2-4展示了折舊分攤的路徑。

  

(圖2-4 折舊分攤的路徑)

因為需按照產品分攤,我們可以在一維的產品表(圖2-3)中新增計算列,利用計算列提供的迭代,對產品表中的每一行計算對應的折舊費用,在計算時,關鍵要點如下

1.對於(產品表)當前行,只考慮服務於該行對應產品的資產折舊,即

i. 承擔專門服務該產品的資產(專用裝置)的全部折舊

ii. 分擔通用資產(非專用裝置)按照產量為權重進行分攤的部分折舊

2.作為分攤權重的產量,統計範圍需注意以下幾點

i. 統計產量的期間和折舊的期間對應,例如,待分攤的折舊金額為月度數字,則對應的產量應同樣按月度統計。

ii. 產量作為分攤依據,不同資產服務的產品不同,則對應的產量不同。例如,專用於產品phone-A的裝置,分攤的產量即為phone-A的產量(產品phone-A吸收該裝置的全部折舊),用於生產所有phone類別的裝置,分攤的產量為類別phone的所有產量。

3.迭代計算

對於產品表的每一行,需要迭代資產清單Fact_Investment,以計算每一項資產,應在當前產品上分攤多少金額

    演算法的公式表達

  1. DAX 函式語句

(圖2-5,計算列的DAX函式)

結果

計算列顯示的結果如圖2-6所示,

(圖2-6,計算列顯示對應產品所分攤的折舊額)

各產品分攤的折舊在矩陣表中按產品層次和時間維度顯示

(圖2-7,各產品分攤的折舊矩陣圖)

當各產品的銷量組合發生變動時,分攤的折舊額會自動更新,從而使得折舊的分攤實現智慧化和自動化,實時應對業務層面發生的變化。