不知日常工作中,是否有人跟小悅一樣,遇到過需要將時間篩選細化至時分的問題,例如,貨運/快遞行業,需要掌握時點的發運信息,如:2019/6/1 13:40:00到2019/6/3 18:30:00,以了解時點的發運高峰等信息。鑒於Power BI目前大致的切片器都僅只顯示日期的篩選,小悅這次為大家分享兩種解決方法。
第一種,DAX寫出時間區域
在這種方法中,我們需要用DAX分別生成開始時間(日期+時點)和結束時間(日期+時點),以使用它來與我們的業務日期(日期/時點)進行對比。
首先開始時間表和結束時間表,分別由日期表和不同的小時表(開始和結束)和分鍾表(開始和結束)內的數據進行拼結,我們先隨機生成開始的小時和分鍾數,公式如下:
小時(開始)=GENERATESERIES(0,23,1)
分鍾(開始)= GENERATESERIES(0,59,1)
以同樣的方法來生成結束的小時和分鍾表。
然后,我們以業務表的開始日期和結束日期為坐標,生成一個日期表(開始),公式如下:
日期表(開始)=CALENDAR(MIN(‘業務表’[業務日期]),MAX(‘業務表’[業務日期]))
並且創建一列,將它轉化為文本列,如果有需要,可以用YEAR,MONTH等函數取出年份,月份等信息。
再以同樣的方式來創建日期表(結束)。
當表格都創建完成后,現在讓我們來分別用(開始)的表格們創建完整的日期時間計算字符吧;
'時 開始'[開始時值]= SELECTEDVALUE('時 開始'[Hou])
'分 開始'[開始分值]= SELECTEDVALUE('時 結束'[Hou])
開始日期= MIN('日期表 開始'[日期文本])&" "&FORMAT(TIME('時 開始'[開始時值],'分 開始'[開始分值],0),"HH:mm:SS")
結束日期用同樣的方式,將結束表格中的日期與時間作文本拼接。
接下來,我們回到主界面,在畫布中拖拉生成切片器,這里,要分別用(開始)表格和(結束)表格生成兩個類型切片器,首先,我們來看開始時間的切片器。
我們先將開始日期表的[DATE]拉入切片器字段,因為我們不是在這里來篩選日期區間,所以選擇“之后”這種單日期選擇模式,再繼續加入兩個切片器,將時(開始)表中的小時值和分(開始)表中的分值拉入字段內;最后開成這樣的切片界面。
在完成開始時間的切片器制作后,請繼續以同樣的方式,完成結束時間的切片器制作。
當開始時間和結束時間的切片器完成后,我們就可以來創建計算度量值了,比如,我們想對時間區域內的訂單數進行計數,以確定在具體的多少小時內,各車隊分別完成了多少單,可以完成如下計算公式:
訂單數 = CALCULATE(COUNTROWS('DM_T_FYD'),FILTER('DM_T_FYD',FORMAT('DM_T_FYD'[出發錄入時間],"YYYY/MM/DD HH:mm:SS")>='日期表 開始'[開始時間]&&FORMAT('DM_T_FYD'[出發錄入時間],"YYYY/MM/DD HH:mm:SS")<='日期表 結束'[結束時間]))
因為我們的日期表(開始/結束)中的[開始時間]和[結束時間]是文本拼接,它的數據類型為文本,所以請注意,在用業務表中定義的業務計算時間來與之對比時,一定事先進行格式的轉化,將其轉化為文本再進行對比。在篩選器中,我們將出發日期在開始時間和結束時間之間的數據行篩選出來,再進行計數運算。
最后,得到我們需要的值,在切片器中,可以任意填入開始/結束日期,以及與之對應的時點。
而為了驗證切片器的時間設置,與日期表的開始時間/結束時間,確實一致,我們可以拖放兩個卡片圖來進行確定。在日常操作中,這並非必要步驟。
關於用DAX解決時點粒度的時間切片問題,以上便是所有內容了。
現在,讓我們來看下;
第二種方法:Time Brush Slicer
我們先從市場導入Time Brush,並在可視化面板中選擇它,如果我們對這個對象並不熟悉,我們可以在示例中先來了解它。
示例文件中,你會發現以下提示
1. 在時間字段中,最好不要用時間層次結構,而是使用日期時間的時間戳。就這意味着,在拖放好時間字段后,需要顯式取消選擇時間層次。
2. 預先通過時間戳生成自己所需要時間粒度(分,時,日,周),Time Brush本身無法完成聚合。
3. 必須在值字段中添加一列數值列(或計算數值列)以便得到一個可選擇的時間區間圖。
4. 通過它來過濾其它可視化對象,但是一定要注意,是通過哪個來過濾哪個對象,不要出現相互過濾的情況。
5. 默認情況下,如果另一個可視化對象對Time Brush形成過濾交互,那么它也會清除掉Time Brush所選擇的時間區域。
當看完這些提示,讓我們來做一次總結,Time Brush其實作為一個可視化對象,通過交互作用,對其它可視化對象起到時間粒度的過濾作用,所以,我們首先需要將放置其字段面板中的時間,進行時間粒度的細化(時,分),然后,需要在值字段中,拉放一個數值字段,最后,在需要受時間切片器影響,將時間細化到(時,分)的可視化對象,在選擇Time Brush的情況下,將交互模式調整到過濾,注意不要出現相互過濾。操作如下:
首先,我們選擇一個時間切片器,並將我們的業務日期拖放進字段。接下來,我們選擇Time Brush,同樣,將業務日期(帶時點)拖放至“Date”,並拖放一個數值列進“With Values”.因為我們並不在意這個數值,所以隨意拖放訂單進行計數。
完成后,會生成如下圖所示的可視化對象。在這里,時間切片(日期)對它進行影響,它僅僅顯示我們日期所選區間內的日期/時間區間軸,但是粒度卻會細化至我們拖放進去的“業務時間”同樣的粒度。
當我們將鼠標懸停在創建的Time Brush對象上時,會發現會出現一個黑十字圖標,這里,我們通過拖拉,來在該時間區間內,選擇我們具體所需要時點區間。選擇好的時間區間,會形成一片陰影面積,就便是我們在具體日期的時間區間內,所具體選擇的時點區域。
最后,我們再創建一個車隊的訂單計數表格。然后記得通過交互設計,來選擇誰對誰進行篩選。
完成以上步驟后,就可以通過選擇不同時點區域,來對表格的統計時點粒度進行控制。
以上,便是第二種方式的分享,希望在工作中遇到此問題的小伙伴,能夠有所收獲,從而解決自己的問題。也希望,如果有了解其它方法的小伙伴,在留言中與我們共享知識哦。
技術交流
1.Power BI免費下載:http://www.yeacer.com/
Microsoft Power BI Desktop中文最新版:下載地址
2.歡迎加入的Power BI技術群,目前正在學習階段,有興趣的朋友可以一起學習討論。
Power Data技術交流群:702966126 (驗證注明:博客園Power BI)
更多精彩內容請關注微信公眾號:悅策PowerBI
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!歡迎各位轉載,作者博客:https://www.cnblogs.com/yeacer/