PowerPivot 中的日期
本節描述在您匯入含有日期的資料,以及處理關聯性與樞紐分析表中的日期時,可遵循的一些最佳作法。
匯入日期資料的最佳作法
當您匯入含有日期/時間資料的資料 (尤其是從多個來源) 時,難免常會遇到資料所含日期為不同的格式,或是日期的資料粒度層級各不相同的情形。
例如,Excel 提供兩個函數,可傳回目前的日期/時間:TODAY 函數會傳回與 NOW 函數相同的日期,但 TODAY 函數始終傳回 12 AM 的預設時間,而 NOW 函數則傳回精確的時間。
上述情形的問題在於,額外的時間資訊可能造成值不相符。 那麼,當您嘗試加總樞紐分析表中的值時,可能會發現這些值無法以您所預期的方式進行群組。
除了日期的精確度層級不同,您的資料來源還可能包括以各種文字格式書寫的日期、採用不同地區格式的日期,或依據不同會計年度的日期。
若要將這些不同類型的日期整合至單一模型中使用,您應在匯入資料後執行下列事項:
在導出資料行中使用 DAX 公式以捨去值,或建立一致的整套日期/時間值。
建立一個日期/時間的主資料表,以讓您可用來建立日期資料行之間的關聯性。
下列各節將提供詳細資訊。
決定日期的需求。
在變更任何日期值之前,請先思索您打算使用資料進行哪些分析,並試著回答下列問題:
數據事實的計數或群組方式傾向於哪個資料粒度層級:日、小時、週或季?
將日期分組時所用的資料粒度層級為何:週或會計季度等?
是否有遺漏任何日期? 是否可以容許遺漏日期或其他值,或者是否需要插入預留位置值或日期? 若一旦遺漏了值,是否會使用零或另選一些其他的值來表示未知的值?
使用公式將日期轉換成一致的日期格式。
如果您所匯入的資料含有多種格式的日期,那麼您可以將資料行保持原狀,再使用 DAX 公式建立以正確格式表示日期,而且處於指定之資料粒度層級的導出資料行。
如需範例,請參閱下列主題:
視需要使用 DAX 函數來擷取日、年和月等各項值。
使用 DAX 函數將值撰寫成日期/時間格式。
如果日期值未格式化為日期,或是有不一致的格式,您可以使用 DAX 中提供的日期和時間函數來建置有效日期。
- 使用 FORMAT 函數來處理自訂數值或日期/時間格式。
如需日期和時間函數的完整清單,請參閱<DAX 函數參考>。
如果需要處理日、週和月,則捨去時間。
日數是 DAX 時間智慧函數所能處理的最小時間單位。 因此如果您不需要處理時間值,便應將資料降為使用日數做為最小單位的資料粒度。
若要解決時間值不盡然精確的問題,您可以執行一些作業:
捨去日期/時間值中的時間,或使所有日期/時間值一律使用相同的預設時間值。
如果您需要處理時間 (如:小時、分和秒),請建立單獨的欄位以使用導出資料行來表示時間增量。 然後您就可以分別分析時間。
用於 PowerPivot 中的日期/時間資料類型是 SQL Server 資料類型,而且依預設會為每個日期建立時間值。
在匯入時篩選資料以移除不正確的資料。
如果外部資料包含了無效的值,您可以在匯入時篩選出無效的資料。 如需詳細資訊,請參閱下列主題:
在樞紐分析表中處理日期的最佳作法
本節提供一些秘訣,有助於您在樞紐分析表中處理日期,以及使用 DAX 時間智慧函數的公式。
關聯性應避免使用整數 Surrogate 索引鍵。
當您從關聯式資料來源匯入外部資料時,日期和時間資料行經常會由 Surrogate 索引鍵表示,而這是用來代表唯一日期的整數資料行。 但是在 PowerPivot 活頁簿中,您應該避免使用整數日期/時間索引鍵來建立關聯性,而要使用包含有 date 資料類型之唯一值的資料行做為索引鍵。
雖然在傳統資料倉儲中,使用 Surrogate 索引鍵被視為最佳作法,但 PowerPivot 不需要整數索引鍵,而且可能會很難依不同的日期期間在樞紐分析表中對值進行分組。
建立一個日期的主資料表。
如果活頁簿資料的每個資料表都含有一個日期/時間值的資料行,同時您依這些日期/時間資料行來連接資料表,則可能會有許多值不相符的情況發生。例如,「銷售」資料表可能只含 2008 年下半年的日期,而「供應商」資料表中所列卻為 2006-2008 年的日期。
與其依據多個包含各種日期及時間的不相關資料行來聯結各式資料的資料表,您倒不如建立一個只儲存日期資訊的主資料表,所得到的效果會更好。 接著您即可利用關聯性將該資料表連結到各資料表,從而擁有一致的整套日期供您處理以避開許多麻煩。
[!附註]
當您建立日期主資料表時,可以將它標示為日期資料表,此資料表將會啟用其他情況下無法使用的額外日期篩選。 如需詳細資訊,請參閱<標記為日期資料表對話方塊>。
DAX 範例活頁簿提供了一個日期/時間的主資料表範例,該資料表即是利用關聯性連接至其他資料表。
這個主資料表不但有每一種日期可能用得到的獨特日期/時間值,還包含可讓您在樞紐分析表中用來將日期分組的階層,如下表所示:
DayNumberOfWeek |
WeekNumberOfYear |
CalendarQuarter |
FiscalQuarter |
DayNameOfWeek |
WeekNumberOfMonth |
CalendarSemester |
FiscalSemester |
DayNumberOfMonth |
MonthName |
CalendarYear |
FiscalYear |
DayNumberOfYear |
MonthNumberOfYear |
|
|
於必要時建立日期資料行的複本
如果您曾用過傳統 Analysis Services 資料庫這一類使用日期「維度」(Dimension) 表示及分組日期的系統,那麼您應早已熟悉日期主資料表的概念。
然而 PowerPivot 有所不同之處在於,PowerPivot 資料表中的每個唯一資料行只能參與任兩個資料表之間的其中一個關聯性。 因此,如果單一資料表包含數個必須與日期索引鍵相關的資料行,則您務必建立日期索引鍵資料行的複本並進行連結。
例如,假設您的 Orders 資料表包含下列資料行:SalesDate、TransactionDate 和 ShippingDate。 您想要將這些資料行全部連結到日期主資料表中的日期索引鍵資料行,但 PowerPivot 為確保任何關聯性都能透過值提供立意明確的唯一途徑,故而不允許您這麼做。 因此,您反而需要將額外的日期資料行各自移至不同的資料表,然後個別將這些資料表中的日期資料行連結到日期主資料表中的日期索引鍵。 舉例來說,您也許決定要保留 Orders 資料表中的 SalesDate 資料行,並再建立一個新的交易資料表和另一個貨運資訊的資料表。 您可以使用導出資料行建立 ShippingDate 和 TransactionDate 的複本,以確保這些資料行隨時同步。
DAX 範例活頁簿提供了如何建立與有效使用日期資料行複本的範例。 如需各範例之取得方式的詳細資訊,請參閱<取得 PowerPivot 的範例資料>。
請參閱
概念
Data Analysis Expressions (DAX) 概觀