Excel 2013–DAX 商業智慧的應用

DAX 這是什麼?
DAX = Data Analysis Expressions

DAX 函數只能在 DAX 公式 中使用。

 

讓我們一起來,快速學習 DAX 基本概念 - http://office.microsoft.com/zh-tw/excel-help/HA102891601.aspx?CTT=1

 

範例:「Contoso 範例 DAX 公式.xlsx」活頁簿

下載:http://www.microsoft.com/en-us/download/details.aspx?id=28572

 

我們需要在三個重要的基礎概念上建構 DAX:語法、函數和內容。


語法

在您建立公式之前,讓我們看看 DAX 公式語法。語法包含構成公式的各種元素,簡單地說,公式如何撰寫。例如,讓我們看一個簡單 DAX 公式,該公式用來在 FactSales 資料表中針對計算結果欄 (名為 Margin) 的每個資料列建立新資料 (值):(公式文字色彩僅做為說明之用)

計算結果欄公式

此公式的語法包含下列元素:

  1. 等號運算子 (=) 指出公式的開頭,計算此公式時會傳回結果或值。計算值的所有公式都是以等號做為開頭。
  2. 被參考資料行 [SalesAmount] 包含被減數的值。在公式中資料行參考一律以方括號 [] 括住。不同於參考資料格的 Excel 公式,DAX 公式一律參考資料行。
  3. 減法 (-) 數學運算子。
  4. 被參考資料行 [TotalCost] 包含要從 [SalesAmount] 資料行值減去的值。


函數

函數是預先定義的公式,可使用依特定順序或結構指定的特定值 (稱為引數) 執行計算。引數可以是其他函數、另一個公式、資料行參考、數字、文字、邏輯值 (例如 TRUE 或 FALSE) 或常數。

DAX 包含下列函數類別目錄:日期和時間、資訊、邏輯、數學、統計、文字以及時間智慧函數。如果您熟悉 Excel 公式中的函數,很多 DAX 函數似乎相似,不過,DAX 函數在以下方面不同:

  • DAX 函數一律參考完整的資料行或資料表。如果您只要使用資料表或資料行中的特定值,可以將篩選加入至公式。
  • 如果您需要逐資料列自訂計算,DAX 提供的函數可讓您使用目前的資料列值或相關的值來當做某種引數,以便執行依內容而改變的計算。您將在稍後學習內容。
  • DAX 包含的許多函數都會傳回資料表,而不是傳回值。此資料表不會顯示,但是會用來提供其他函數的輸入。例如,您可以擷取資料表,然後計算其中相異值的數目,或是計算橫跨篩選資料表或資料行的動態總和。
  • DAX 包含各種不同的時間智慧函數。這些函數可讓您定義或選取日期範圍,並根據這些日期範圍執行動態計算。例如,您可以比較平行期間的總和。

內容

內容是要了解的最重要 DAX 概念之一。DAX 有兩種內容:資料列內容和篩選內容。

 

資料列內容

資料列內容可以簡單地視為目前的資料列。

篩選內容

比起資料列內容,篩選內容稍微難了解。篩選內容可以簡單地視為:在計算中套用並決定結果或值的一個或多個篩選。

篩選內容不是用來取代資料列內容,而是除了資料列內容之外,還予以套用。例如,若要進一步縮小包含在計算的值,您可以套用篩選內容,這樣不僅指定資料列內容,也指定該資料列內容中的特定值 (篩選)。

樞紐分析表中可以輕易看到篩選內容。例如,當您將 TotalCost 加入至 [值] 區域,然後將 Year 和 Region 加入至資料列或資料行時,就會定義篩選內容,用以根據給定年份和區域選取資料子集。

為什麼篩選內容對 DAX 這麼重要?因為在樞紐分析表中,可藉由新增資料行和資料列標籤和交叉分析篩選器,輕鬆套用篩選內容,而在 DAX 公式中,也可以藉由使用函數 (例如 ALL、RELATED、FILTER、CALCULATE)、關聯性,以及其他導出欄位和資料行,套用篩選內容。例如,讓我們看看 StoreSales 導出欄位的下列公式:

公式

很清楚,此公式比前述的某些其他公式更複雜。不過,若要進一步了解這個公式,我們可以將它分解,就如同其他公式一樣。

此公式包含下列語法元素:

  1. 導出欄位名稱 StoreSales,後面接著冒號 :。
  2. 等號運算子 (=) 指出公式的開頭。
  3. CALCULATE 函數評估內容中指定之篩選修改過的運算式 (做為引數)。
  4. 括號 () 括住一個或多個引數。
  5. 相同資料表中的導出欄位 [Sales],做為運算式。Sales 導出欄位的公式:=SUM(FactSales[SalesAmount])。
  6. 逗號 (,) 分隔每個篩選。
  7. 被參考資料行與特定的值 DimChannel[ChannelName] =”Store”,做為篩選。

此公式可確保只針對具有 “Store” 值的 DimChannel[ChannelName] 資料行的所有資料列 (做為篩選),來計算銷售值 (Sales 導出欄位所定義,做為篩選)。

沒有留言: