https://zhuanlan.zhihu.com/p/128652582
經常碰到的一類問題是,如何根據起止日期來計算某個時間點的數量,比如:
- 已知合同的生效日期和到期日期,特定日期的有效合同有多少?
- 已知店鋪的開業日期和注銷日期,截至目前正在運營的店鋪有多少?
- 已知員工的入職日期和離職日期,如何計算每個月底的在職員工數量?
此類問題的解決思路類似,下面就以計算在職員工數量為例,看看如何利用PowerBI來處理。
模擬數據如下,員工表中有員工姓名、入職日期和離職日期:
實現步驟如下:
1,建立數據模型
因為要按時間點計算,所以建立一個單獨的日期表是必要的。
這里有同學會糾結,員工表中有兩列日期,那么應該用哪個日期與日期表建立關系呢?這個看具體需求,就這個問題來說,完全可以不建立任何關系:
2,創建度量值
根據員工表,統計員工數量的邏輯很簡單,比如計算6月30號的在職員工數量,就是入職日期小於等於6月30日,並且沒有離職或者離職日期大於6月30日的所有員工。在度量值中,還應該考慮的是上下文是什么,因為我們是想求每個月底的數量,所以外部上下文就是月份,根據這個月份,找出該月最后一天,然后根據上面的邏輯比較就行了。這樣的計算邏輯每個人都清楚,但是可能不知道如何用DAX來表達。
度量值的寫法如下:
以上思路和計算邏輯都已體現在這個度量值中,並在代碼中做了注釋。
3,展示計算結果
將日期表中的月份和[在職員工數量]放入到矩陣中,就得出了每月底的員工數量:
更進一步的,如果想計算某個時間段的平均每天在職人數,只需要在上述度量值的基礎上,再寫個平均度量值:
平均在職人數 =
AVERAGEX(
VALUES('日期表'[日期]),
[在職員工數量]
)
用日期做個切片器,輸入時間段的起止日期,就可以快速計算出該時間段的平均每天人數:
使用PowerBI解決問題的基本就是以上的步驟,把這個簡單的例子搞明白了,這一類問題都會迎刃而解。