數據可視化之DAX篇(十二)掌握時間智能函數,同比環比各種比,輕松搞定!


https://zhuanlan.zhihu.com/p/55841964

時間可以說是數據分析中最常用的獨立變量,工作中也常常會遇到對時間數據的對比分析。假設要計算上年同期的銷量,在PowerBI中可以用CALCULATE來寫個度量值[上年同期],

= CALCULATE([數量],
SAMEPERIODLASTYEAR('日期表'[日期]))

 

這里SAMEPERIODLASTYEAR就是時間智能函數。

 

時間智能函數和普通函數的區別

 

時間智能函數與普通的時間或者日期函數的區別是,

  • 日期函數直接依賴當前行上下文,一般作為新建列使用,比如YEAR函數,提取日期列的年度;
  • 時間智能函數會重置上下文,一般新建度量值時使用,可以快速移動到指定區間

 

時間智能函數有哪些

在PowerBI中,目前共有33個時間智能函數,列表如下:

 

 

看起來好像很多,很難記,其實都是用很直白的英文表達,函數名的意思就是這個函數的功能,有些函數都包括幾個粒度,比如PREVIOUSYEAR/QUARTER/MONTH/DAY,上一年/季/月/天,還有相反方向的下一年/季/月/天,NEXTYEAR/QUARTER/MONTH/DAY,這8個函數可以看作是一類,上表中排序也是把同一類的函數按順序放到了一起,這樣看下來並沒有幾種。

根據這些時間智能函數計算的結果,我把時間智能函數分為以下兩類:

  • 返回期間的時間智能函數

返回期間並執行運算的時間智能函數

返回期間的時間智能函數

 

前24個函數都屬於這種,其中前20個時間智能函數都是非常簡單的,只需要使用一個日期參數就可以,返回對應的時間期間,一般結合CALCULATE使用,比如本文開頭的SAMEPERIODLASTYEAR看起來很長,其實非常簡單,從函數名稱可以看出它是干什么的:上年同期。

第21至24,DATEADD、DATEBETWEEN、DATESINPERIOD 、PARALLELPERIOD ,這4個函數相對復雜一點,但也就是參數多了兩個而已,一般用於相對時間區間的控制,請看下圖中對這4個函數的介紹。

 

 

 

 

返回期間並執行運算的時間智能函數

 

從第25個開始,最下面這9個函數更加智能,不僅可以重置上下文,甚至直接對重置后的下上文執行運算,把CALCULATE都省掉了,比如求年初至今的銷量,使用TOTALYTD函數:

=TOTALYTD([數量],日期表[日期])

它和之前使用DATESYTD的效果等同

=CALCULATE([數量],DATESYTD(日期表[日期]))

 

OPENINGBALANCEYEAR,返回當前行上下文對應的年初余額,如果這個銷售記錄表上還有一列當日結束時的[庫存量],新建度量值

=OPENINGBALANCEYEAR(銷售記錄表[庫存量],
日期表[日期])


將返回2017年的年初庫存,也就是2016年12月31日結束時的庫存量。

CLOSINGBALANCEYEAR/QUARTER/MONTH計算年/季/月末的數據,參數和使用方法類似。

 

涉及年度的時間智能函數的特殊用法

 

在33個時間智能函數中,有8個是關於年度的,

DATESYTD 
PREVIOUSYEAR 
NEXTYEAR 
ENDOFYEAR 
STARTOFYEAR 
TOTALYTD 
CLOSINGBALANCEYEAR 
OPENINGBALANCEYEAR

這8個函數的參數中最后都有一個可選參數<year_end_date>,意思是年度結束日期,默認情況下就是自然年度的結束日期12月31日,可以省略,在特定的分析中,年度結束日期不是12月31日,那么可以使用這個參數來界定。

在進行財年的分析時,很多國外的公司的財年都不是自然年度,比如蘋果的財年結束日期9月30日,2017財年就是從2016年10月1日到2017年9月30日,計算2018財年的年初至今的銷量:

=CALCULATE([數量],DATESYTD(日期表[日期],"9-30"))

等同於

TOTALYTD=([數量],日期表[日期],"9-30")

都將返回從2017年10月1日到目前的累計銷量。

其他幾個函數不再一一介紹。

 

時間智能函數與日期表

 

使用時間智能函數時若出現一些莫名其妙的錯誤,或者返回的數據難以解釋,很大可能是你使用的時間參數有問題。

為了科學的使用時間智能函數,首要的就是建立一個合格的日期表,並將日期列與事實表的日期列建立關聯。

合格的日期表具備以下的特征:

  • 起止日期涵蓋事實表的所有日期
  • 日期是連續且不重復的

如何生成日期表,有很多方法,可以用Excel、M函數也可以用DAX生成,這里就不細說了,日期表導入到PowerBI Desktop后,首先要把它標記為日期表,

 

 

因為日期表的起止日期我們很容易查看是否涵蓋,但是否連續不重復卻並不能輕易看到,標記為日期表的好處是,它會強制檢查日期表的日期列是否為日期格式、是否為連續的、不重復的,如果不是,則無法進行標記,這樣的強制要求保證了后面使用時間智能函數時,不會出現這方面的錯誤。

日期表並不一定要按照網上搜羅的方法生成同樣的粒度列,而是要根據實際分析的需要,建立適合的相關列,比如要按財年來分析,就要按照財年的起止日期來添加財年列;如果要進行最近12個月的滾動分析,就添加一個月份編號。

日期表包含分析需要的維度列,可以簡化DAX的嵌套,建立簡單的度量值就可以輕松聚合所需要的數據。這也是合格的日期表和優秀的日期表的分界線。

時間智能函數並沒有什么神秘,熟悉它使用的參數、搞清它重置的日期區間和返回的數據類型,就掌握了它,在實際分析中多加練習就可以靈活的使用這些函數。選取特定的時間粒度,快速篩選統計區間,輕松搞定時間序列分析。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM