官术网_书友最值得收藏!

2.3 時間函數(shù)

本書將時間函數(shù)單獨(dú)作為一節(jié)重點(diǎn)介紹,是因?yàn)闀r間維度在商業(yè)分析中具有非常特殊的作用。

2.3.1 Tableau的時間函數(shù)

Tableau中的日期類型總共分為兩種:離散型與連續(xù)型,如圖2.3.1所示。其中離散型日期膠囊為藍(lán)色,連續(xù)型日期膠囊為綠色。

圖2-3-1

圖2.3.2所示的為兩種日期類型的對比結(jié)果。顯然,離散型日期更適用于柱形圖,而連續(xù)型日期更適用于類似折線圖等連續(xù)型可視化圖。單擊日期膠囊中的加號按鈕,可對日期進(jìn)行下鉆至季、月、周、日等,包括“精確日期”。

圖2-3-2

用鼠標(biāo)右擊選中維度區(qū)中的【訂單日期】膠囊,將其拖曳至工作表【行】中,界面中會彈出【放置字段】對話框,如圖2.3.3所示。對話框中有兩組類似的日期單位,上方為離散型日期單位,下方為連續(xù)型日期單位。其中符號“”代表離散型日期單位、“”代表連續(xù)型日期單位。

圖2-3-3

Tableau中提供了多種日期函數(shù),表2.3.1中列舉了主要函數(shù)的功能。

表2.3.1

需要注意的是,用鼠標(biāo)右擊【訂單日期】膠囊,在彈出的快捷菜單中選擇【創(chuàng)建】→【自定義日期】命令,如圖2.3.4所示。在打開的對話框中可快速(無公式)創(chuàng)建【訂單日期(季度)】計(jì)算字段,如圖2.3.5所示,其功能等同于公式DATEPART('quarter',[訂單日期])。

圖2-3-4

圖2-3-5

在Tableau模型中,不建議創(chuàng)建獨(dú)立的日期維度表,大部分的時間計(jì)算都可以直接通過Tableau的日期函數(shù)完成。

2.3.2 Power BI中的時間函數(shù)

1.時間日期表

在Power BI模型中,大多數(shù)時候都需要創(chuàng)建專有的日期表,尤其是在多表中都有日期字段時,統(tǒng)一專有的日期表十分必要。在創(chuàng)建日期表時,日期字段需要滿足以下條件:

· 包含唯一值(1表要求);

· 不包含任何空值;

· 包含連續(xù)的日期值(從開頭到結(jié)尾);

· 如果是日期/時間數(shù)據(jù)類型,則每個值都要具有相同的時間戳(比如都是00:00或者12:00)。

下面的公式為簡單的日期表創(chuàng)建公式。此公式是以訂單日期的最小值和最大值為依據(jù)的時間范圍且返回【Date】字段。然后用戶可以通過DAX公式,依據(jù)【Date】字段,創(chuàng)建更多自定義的日期字段。若需要更豐富的日期字段,則可在Power BI中創(chuàng)建新表,輸入以下公式,效果如圖2.3.6所示。

圖2-3-6

以上公式是在原有的簡單日期表的基礎(chǔ)上通過GENERATE函數(shù)產(chǎn)生的相關(guān)日期字段。

注意,【日期鍵】字段的數(shù)據(jù)類型為文本字符串,在遇到訂單日期為日期+時間的形式時,此字段無法直接與【Date】關(guān)聯(lián),原因是部分時間無法匹配。在這種情況下需要在兩張表中分別創(chuàng)建【日期鍵】字段,完成關(guān)聯(lián)。

2.標(biāo)記為日期表

通過Power BI的菜單可將【Date】字段標(biāo)記為日期表,如圖2.3.7所示。

圖2-3-7

微軟官方對標(biāo)記為日期表功能給出了以下提醒和建議:

請務(wù)必注意,用戶在指定自己的日期表時,Power BI Desktop不會自動創(chuàng)建將代表用戶構(gòu)建到模型中的層次結(jié)構(gòu)。在Power BI Desktop中,如果取消選擇日期表(并且不再具有手動設(shè)置的日期表),則Power BI Desktop將針對表中的日期列為用戶重新自動創(chuàng)建內(nèi)置日期表。

另請務(wù)必注意,在將表標(biāo)記為日期表時,將刪除Power BI Desktop創(chuàng)建的內(nèi)置(自動創(chuàng)建的)日期表,并且之前基于這些內(nèi)置表創(chuàng)建的任何視覺對象或DAX表達(dá)式將不再正常工作。

在實(shí)際使用中,只要創(chuàng)建了圖2.3.6所示的日期表(如上例子),并產(chǎn)生了有效的表關(guān)聯(lián),標(biāo)記為日期表就不是必要的了。

3.時間智能函數(shù)

DAX日期函數(shù)大致分為兩種。

(1)普通日期函數(shù)

普通日期函數(shù)有CALENDAR、CALENDARAUTO、DATEDIFF、WEEKNUM、EDATE、EOMONTH等。

(2)時間智能函數(shù)

時間智能函數(shù)是指對輸入值帶有日期識別功能的函數(shù),通過使用時間智能函數(shù)確定日期范圍,再結(jié)合聚合函數(shù)和CALCULATE函數(shù)就可以進(jìn)行各種時間的比較計(jì)算。表2.3.1中列出一部分主要的時間智能函數(shù)。

表2.3.1

注意:時間智能函數(shù)參數(shù)必須使用日期表中的日期鍵才生效。

回到上例的日期表中,依據(jù)表2.3.2所示的公式創(chuàng)建新日期字段。

表2.3.2

表2.3.2所示的為DAX計(jì)算列公式,其中頻繁使用到了ALL、EARLIER、FILTER、COUNTROWS等函數(shù)。最讓人困惑的EARLIER函數(shù),用于需要將當(dāng)前行與自身列的其他單元格相比較的情況。DAX中沒有單元格的概念,必須借助EARLIER函數(shù)(在舊版本中被稱為OUTER函數(shù))返回相同“列”中的其他單元格作為當(dāng)前行值,再與自身列進(jìn)行對比。

比如,在'Date'[Date]<=EARLIER ('Date'[Date])中,EARLIER是參照列,與'Date'[Date]相比,對第一行“20050101”來說,其邏輯為:'Date'[Date]<='20150101',小于或等于它的值只有它自己,因此通過COUNTROWS函數(shù)計(jì)算返回結(jié)果“1”。

筆者理解該邏輯的口訣為:“Eariler,即OUTER,對比全,返當(dāng)前”。

主站蜘蛛池模板: 德钦县| 鸡泽县| 佛坪县| 全椒县| 潞西市| 黔西县| 库尔勒市| 开江县| 弋阳县| 政和县| 辉县市| 高州市| 木兰县| 普洱| 韶山市| 安远县| 大城县| 垫江县| 河南省| 高碑店市| 清涧县| 泽州县| 原阳县| 灵武市| 桐梓县| 百色市| 北票市| 上思县| 福贡县| 隆尧县| 平和县| 上思县| 葵青区| 峨边| 介休市| 山西省| 赣州市| 株洲市| 仁寿县| 保山市| 巩义市|