建立 Date 資料表

已完成

在 Power BI 中建立報表期間,常見的商務需求是根據日期和時間進行計算。 組織想要知道其業務在數個月、數季、數個會計年度等方面的表現。 基於此原因,請務必將這些時間導向的值設定為正確的格式。 Power BI 會針對日期資料行和資料表進行自動偵測,但是在某些情況下,您必須採取額外的步驟,才能以您組織所需的格式,取得日期。

例如,假設您要開發組織的銷售小組報表。 資料庫包含銷售、訂單、產品等等的資料表。 您會發現其中許多資料表 (包括 Sales 和 Orders) 都包含自己的日期資料行,如 Sales 和 Orders 資料表中的 ShipDateOrderDate 資料行所示。 您的工作是依年和月來開發總銷售額和訂單的資料表。 如何建立具有多個資料表,且每個資料表都參考自己的日期資料行的視覺效果?

語意模型摘要的螢幕快照,其中已醒目提示 Sales.ShipDate 和 Order.OrderDate。

若要解決此問題,您可以建立一個可供多個資料表使用的通用日期資料表。 下一節說明如何在 Power BI 中完成此工作。

建立通用日期資料表

您可以建立通用日期資料表的方式如下:

  • 來源資料

  • DAX

  • Power Query

來源資料

有時候,來源資料庫和資料倉儲已經有自己的日期資料表。 如果設計資料庫的系統管理員做得透徹,這些資料表就可以用來執行下列工作:

  • 識別公司假日

  • 區別行事曆和會計年度

  • 識別週末與工作日

來源日期資料表已經成熟,而且可以立即使用。 如果您有數據表,請將它帶入您的語意模型,而且不會使用本節中所述的任何其他方法。 建議您使用來源日期資料表,因為該資料表可能與除了 Power BI 之外的其他工具共用。

如果您沒有來源運算列表,可以使用其他方式來建立通用的日期資料表。

DAX

您可以使用 Data Analysis Expression (DAX) 函數 CALENDARAUTO() 或 CALENDAR() 來建立您的通用日期資料表。 CALENDAR() 函式會根據在函式中當作引數輸入的開始和結束日期,傳回連續的日期範圍。 或者,CALENDARAUTO () 函式會傳回從您的語意模型自動決定的連續完整日期範圍。 開始日期會選擇為語意模型中存在的最早日期,而結束日期是語意模型中存在的最新日期,加上已填入會計月份的數據,您可以選擇在 CALENDARAUTO () 函式中包含作為自變數。 基於此範例的目的,會使用 CALENDAR() 函式,因為您只想要查看 2011 年 5 月 31 日 (Sales 開始追蹤此資料的第一天) 到之後 10 年的資料。

在 [Power BI Desktop] 中,選取 [新增數據表],然後在下列 DAX 公式中輸入 :

Dates  = CALENDAR(DATE(2011, 5, 31), DATE(2022, 12, 31))

Power BI 中 CALENDAR 公式的螢幕擷取畫面。

現在,您有一個可供使用的日期資料行。 不過,這個資料行有點疏鬆。 您也想要查看只有年份、月份號碼、年度週數和星期幾的資料行。 若要完成此工作,您可以在功能區上選取 [新增資料行],然後輸入下列 DAX 方程式,這將會從您的 Date 資料表中擷取年份。

Year = YEAR(Dates[Date])

使用 DAX 方程式新增資料行的螢幕擷取畫面。

您可以執行相同的程序擷取月份號碼、週數和星期幾:

MonthNum = MONTH(Dates[Date])
WeekNum = WEEKNUM(Dates[Date])
DayoftheWeek = FORMAT(Dates[Date], "DDDD")

當您完成時,您的資料表將會包含下圖所示的資料行。

DAX 資料表中最終資料行的螢幕擷取畫面。

您現在已經使用 DAX 建立了通用日期資料表。 此程式只會將您的新數據表新增至語意模型;您仍然需要建立日期數據表與 Sales 和 Order 資料表之間的關聯性,然後將數據表標示為語意模型的正式日期數據表。 不過,在您完成那些工作之前,請確定您考慮建立通用日期資料表的另一種方式:使用 Power Query。

Power Query

您可以使用 M 語言 (在 Power Query 中建立查詢所使用的開發語言) 定義通用的日期資料表。

在 Power BI Desktop 中選取 [轉換資料],這會將您引導至 Power Query。 在左側 [查詢] 窗格的空白處,單擊滑鼠右鍵以開啟下列下拉功能表,您可以在其中選取 [新增查詢空白查詢>]。

在 Power BI 中建立新查詢的螢幕擷取畫面。

在產生的 [新增查詢] 檢視中,輸入下列 M 公式以建立行事曆資料表:

= List.Dates(#date(2011,05,31), 365*10, #duration(1,0,0,0))

使用 M 公式開發行事曆資料表的螢幕擷取畫面。

針對您的銷售資料,您希望開始日期能夠反映您在資料中的最早日期:2011 年 5 月 31 日。 此外,您想要查看未來 10 年的日期,包括之後的日期。 這種方法可確保您不需要隨著新銷售資料的流動而重新建立此資料表。 您也可以變更持續時間。 在此案例中,您需要每天的資料點,但您也可以按小時、分鐘和秒來遞增。 下圖顯示結果。

以清單形式顯示的銷售行事曆螢幕擷取畫面。

程序成功之後,您會注意到您有一份日期清單,而不是日期資料表。 若要更正此錯誤,請移至功能區上的 [ 轉換 ] 索引標籤,然後選取 [ 轉換為 > 數據表]。 如名稱所示,此功能會將您的清單轉換成資料表。 您也可以將資料行重新命名為 DateCol

在 Power Query 編輯器中將清單轉換成資料表的螢幕擷取畫面。

接下來,您想要將資料行新增至新的資料表,以根據年、月、週和日來查看日期,讓您可以在視覺效果中建立階層。 您的第一個工作是選取資料行名稱旁邊的圖示,然後在產生的下拉式功能表中選取 [日期] 類型,以變更資料行類型。

將類型變更為 [日期] 的螢幕擷取畫面。

在您選取 [日期] 類型完成之後,可以針對年、月、週和日新增資料行。 移至 [新增資料行]、選取 [日期] 底下的下拉式功能表,然後選取 [年],如下圖所示。

透過 Power Query 新增資料行的螢幕擷取畫面。

請注意,Power BI 已新增從 DateCol 提取的所有年份的資料行。

透過 Power Query 在資料表上新增資料行的螢幕擷取畫面。

針對月、週和日完成相同的程序。 完成此程序後,資料表將會包含下圖所示的資料行。

[DateCol]、[年度]、[月份]、[當年週次] 和 [星期幾名稱] 資料行的螢幕擷取畫面。

您現在已經成功使用 Power Query 建立通用的日期資料表。

先前的步驟示範如何將數據表放入語意模型。 現在,您必須將資料表標示為正式的日期資料表,讓 Power BI 可以辨識該資料表以供所有之後的值使用,並確保格式正確。

標示為正式的日期資料表

將資料表標示為正式日期資料表的第一個工作,是在 [欄位] 窗格中尋找新的資料表。 以滑鼠右鍵按一下資料表的名稱,然後選取 [標示為日期資料表],如下圖所示。

[標示為日期資料表] 選項的螢幕擷取畫面。

Power BI 會透過將您的資料表標示為日期資料表來執行驗證,以確保資料包含零 Null 值、是唯一的,而且包含一段時間內的連續日期值。 您也可以在資料表中選擇特定資料行以將其標示為日期,當您的資料表中有多個資料行時,這會很有用。 以滑鼠右鍵按兩下資料表,選取 [ 標記為日期數據表],然後選取 [ 日期數據表設定]。 隨即會出現下列視窗,您可以在其中選擇哪些數據行應該標示為 [日期]。

[標示為日期資料表] 對話方塊的螢幕擷取畫面。

選取 [標示為日期資料表] 將會從資料表中您標示為日期資料表的 [日期] 欄位移除自動產生的階層。 對於其他日期欄位,除非您在該欄位與日期資料表之間建立關聯性,或關閉 [自動日期/時間] 功能,否則自動階層仍會存在。 您可以在 [ 欄位 ] 窗格中以滑鼠右鍵按兩下 [年]、[月]、[周] 或 [日] 數據行,然後選取 [ 新增階層 ],以手動方式將階層新增至您的通用日期數據表。本課程模組稍後會進一步討論此程式。

建立您的視覺效果

若要在 Sales 和 Orders 資料表之間建立視覺效果,您將必須在這個新的通用日期資料表與 Sales 和 Orders 資料表之間建立關聯性。 因此,您將能夠使用新的日期資料表建立視覺效果。 若要完成這項工作,請移至 [模型]> 索引標籤 管理關聯性,您可以使用 OrderDate 數據行建立通用日期數據表與 Orders 和 Sales 數據表之間的關聯性。 下列螢幕擷取畫面顯示其中一個這種關聯性的範例。

[建立關聯性] 對話方塊的螢幕擷取畫面。

建立關聯性之後,您可以使用以 DAX 或 Power Query 方法開發的通用日期資料表,建立依時間排列的總銷售額和訂單數量視覺效果。

若要判斷總銷售額,您必須將所有銷售額加總,因為 Sales 資料表中的 Amount 資料行只會查看每筆銷售的收益,而不是總銷售收益。 您可以使用下列量值計算完成此工作,這將會在之後的討論中說明。 您在建立此量值時將使用的計算方式如下:

#Total Sales = SUM(Sales[‘Amount’])

完成之後,您可以返回 [視覺效果] 索引標籤,然後選取 [資料表] 視覺效果來建立資料表。 您想要依年和月查看總訂單和銷售額,因此您只想要包含日期資料表的 Year 和 Month 資料行、OrderQty 資料行,以及 #TotalSales 量值。 當您了解階層時,也可以建立可讓您從數年向下切入到數個月的階層。 在此範例中,您可以進行並排檢視。 您現在已經成功使用通用日期資料表建立視覺效果。

使用 DAX 的通用日期資料行螢幕擷取畫面。