此快速入門適用於在 EXCEL 或 SQL Server Data Tools 中撰寫之表格式模型專案的初次使用者 Power Pivot 。 其目的在於為您提供一個快速簡易的簡介,說明如何使用數據分析表達式 (DAX) 來解決許多基本數據模型和分析問題。 本主題包含概念性資訊、您可以完成的一系列工作,以及一些測驗來測試您所學的內容。 完成本主題之後,您應該瞭解 DAX 中最基本的概念。
什麼是DAX?
DAX 是函數、運算子和常數的集合,可用於公式或表達式中,以計算並傳回一或多個值。 更簡單地說,DAX 可協助您從模型中已有的數據建立新資訊。
為什麼 DAX 這麼重要?
建立活頁簿併匯入一些數據非常容易。 您甚至可以建立數據透視表或樞紐分析圖來顯示重要資訊,而不使用任何 DAX 公式。 但是,如果您需要分析數個產品類別及不同日期範圍的重要銷售數據,該怎麼辦? 或者,您需要合併不同數據源中數個數據表的重要庫存數據嗎? DAX 公式也提供此功能和許多其他重要功能。 瞭解如何建立有效的 DAX 公式可協助您充分利用數據。 當您取得所需的資訊時,可以開始解決會影響底部的實際商務問題。 這是商業智慧,DAX 可協助您達到此位置。
先決條件
您可能已經熟悉在 Excel 中建立公式Microsoft。 這些知識對於瞭解 DAX 很有説明,但即使您沒有使用 Excel 公式的經驗,這裡所述的概念仍可協助您開始建立 DAX 公式並立即解決實際的 BI 問題。
我們將特別著重於了解計算中使用的DAX公式。 您應該已經熟悉 計算結果列 和 量 值的基本概念, (也稱為匯出欄位) , Power Pivot 說明中說明這兩者。 您也應該熟悉 Excel 撰寫環境和工具中的 Power Pivot 。
範例活頁簿
學習DAX的最佳方式是建立一些基本公式、將它與一些實際的數據搭配使用,併為自己查看結果。 這裡的範例和工作使用 Contoso 範例 DAX Formulas.xlsx 活頁簿。 您可以從 http://go.microsoft.com/fwlink/?LinkID=237472&clcid=0x409 下載活頁簿。 將活頁簿下載到計算機后,請將它開啟,然後開啟 Power Pivot 視窗。
讓我們開始吧!
我們將圍繞三個非常重要的基本概念來建立DAX框架:語法、函數和上下文。 當然,DAX 中還有其他重要概念,但瞭解這三個概念,將提供建立 DAX 技能的最佳基礎。
語法
在您建立自己的公式之前,讓我們來看看 DAX 公式語法。 語法包含組成公式的各種元素,或更簡單的公式撰寫方式。 例如,讓我們看看在 FactSales 表格中,用來建立計算結果列中每個數據列的新數據 (值) 的簡單 DAX 公式: (公式文字色彩僅供說明之用)
此公式的語法包含下列元素:
-
等號運算子 (=) 表示公式的開頭,當公式計算時,會傳回結果或值。 所有計算值的公式都會以等號開頭。
-
參照的數據行 [SalesAmount] 包含我們想要從中減去的值。 公式中的欄參照一律以括弧括住 []。 與參照單元格的 Excel 公式不同,DAX 公式一律會參照欄。
-
減法 (-) 數學運算符。
-
參照的數據行 [TotalCost] 包含我們想要從 [SalesAmount] 欄中的值減去的值。
嘗試瞭解如何閱讀 DAX 公式時,將每個元素分成您每天思考和說出的語言通常會很有説明。 例如,您可以將此公式讀取為:
在 [FactSales] 表格中,針對 [邊界] 計算結果列中的每一列,從 [SalesAmount] 數據行中的值減去 [TotalCost] 數據行中的 ( ) 值,以計算 (=) 值。
讓我們看看另一種公式類型,也就是用於量值的公式:
此公式包含下列語法元素:
-
量值名稱「銷售金額加總」。 量值的公式可以包含度量名稱,後面接著冒號,後面接著計算公式。
-
等號運算子 (=) 表示計算公式的開頭。 計算時,它會傳回結果。
-
函數 SUM 會加總 [SalesAmount] 欄中的所有數位。 您稍後將會深入瞭解函數。
-
括弧 () 括住一或多個自變數。 所有函數至少需要一個自變數。 自變數會將值傳遞至函數。
-
參照的數據表 FactSales。
-
FactSales 表格中參照的數據行 [SalesAmount]。 使用此自變數時,SUM 函數知道要匯總 SUM 的哪個數據行。
您可以將此公式讀取為:
若要計算名為 [銷售金額加總] 的量值,請計算 (=) FactSales 表格 [SalesAmount] 數據行中的值加總。
當放置到數據透視表欄位清單中的 [值] 下拉區域時,此量值會計算並傳回數據透視表中每個儲存格所定義的值,例如美國行動電話。
請注意,與我們用於邊界計算結果列的公式相比,此公式有幾種不同之處。 特別是我們導入了一個函數 SUM。 函數是預先撰寫的公式,可讓您更輕鬆地使用數位、日期、時間、文字等專案執行複雜的計算和操作。 您稍後將會深入瞭解函數。
與之前的 [邊界] 計算結果列不同,您會看到 [SalesAmount] 數據行前面有數據行所屬的 FactSales 數據表。 這稱為完整數據行名稱,因為它包含數據表名稱前面的欄名稱。 同一個表格中參照的欄不需要在公式中包含表格名稱。 這可讓參照許多欄的較長公式變得更短且更容易閱讀。 不過,即使在同一個表格中,還是可以一律將表格名稱加入量值公式中。
附註: 如果數據表名稱包含空格、保留關鍵詞或不允許的字元,您必須用單引弧括住數據表名稱。 如果名稱包含 ANSI 英數位元範圍之外的任何字元,無論您的地區設定是否支援字元集,您也必須以引號括住數據表名稱。
請務必讓公式的語法正確無誤。 在大多數情況下,如果語法不正確,就會傳回語法錯誤。 在其他情況下,語法可能是正確的,但傳回的值可能不是您預期的結果。 Power Pivot (和 SQL Server 數據工具) 包含 IntelliSense;用來透過協助您選取正確的元素來建立語法更正公式的功能。
讓我們建立簡單的公式。 這項工作可協助您進一步瞭解公式語法,以及數據編輯列中的 IntelliSense 功能如何協助您。
工作:為計算結果列建立簡單的公式
-
如果您尚未在 Power Pivot 視窗中,請在 Excel 的 [ Power Pivot ] 功能區上,按兩下 [ Power Pivot 視窗]。
-
在 [ Power Pivot ] 視窗中,按兩下 [ FactSales ] 表格 (索引標籤) 。
-
捲動到最右側的欄,然後按下欄標題中的 [ 新增欄]。
-
按兩下模型設計工具視窗頂端的數據編輯列。
游標現在會出現在數據編輯列中。 您可以在資料編輯欄位輸入計算結果列或匯出欄位的公式。
讓我們花一點時間查看數據編輯列左側的三個按鈕。
當游標在數據編輯列中為使用中時,這三個按鈕會變成使用中。 最左邊的按鈕 X 只是一個取消按鈕。 請繼續並按下它。 您的游標不會再出現在數據編輯列中,而且不再顯示 [取消] 按鈕和複選標記按鈕。 繼續進行,然後再次在數據編輯列中按兩下。 [取消] 按鈕和複選標記按鈕現在會重新出現。 這表示您已準備好開始輸入公式。
複選標記按鈕是複選公式按鈕。 在您輸入公式之前,這個方法沒有多大作用。 我們會稍候回來。
按兩下 [Fx] 按鈕。 您會看到新的對話框出現;[插入函數] 對話框。 [插入函數] 對話框是開始輸入 DAX 公式最簡單的方法。 我們稍後建立量值時,我們會在公式中新增函數,但現在您不需要在計算結果列公式中新增函數。 繼續並關閉 [插入函數] 對話框。
-
在數據編輯列中,輸入等號 =,然後輸入左括弧 [。 您會看到一個小窗口顯示,其中包含 FactSales 表格中的所有欄。 這是 IntelliSense 的動作。
由於計算結果列一律會在您所在的使用中數據表中建立,因此您不需要在數據行名稱前面加上數據表名稱。 繼續向下卷動,然後按兩下 [SalesQuantity]。 您也可以捲動到您要的欄名稱,然後按 Tab。
游標現在已在 [SalesQuantity] 右側使用。
-
輸入空格,然後輸入減法運算符 - (減號) ,然後輸入另一個空格。
-
現在,輸入另一個左括弧 [。 這一次,選取 [ReturnQuantity] 欄,然後按 Enter。
如果您收到錯誤訊息,請仔細查看您的語法。 如有需要,請將其與先前所述 [邊界] 計算結果列中的公式進行比較。
按 Enter 完成公式後,[ 計算 ] 一詞會出現在 Power Pivot 視窗底部的狀態列中。 即使您只計算超過 300 萬列的新值,它仍會快速執行。
-
以滑鼠右鍵按下欄標題,然後重新命名欄 NetSales。
就是這麼簡單! 您剛才建立了簡單但功能強大的 DAX 公式。 NetSales 公式在 FactSales 表格中的每一列中,將 [ReturnQuantity] 數據行中的值減去 [SalesQuantity] 數據行中的值,即可計算值。 請注意,我們剛才所說的「適用於每一列」。 這是 DAX 中另一個非常重要的概念的一窺;列上下文。 稍後您將深入瞭解列內容。
在 DAX 公式中輸入運算子時,請務必瞭解您正在使用之自變數中的數據類型。 例如,如果您輸入下列公式 = 1 & 2,傳回的值會是 “12” 的文字值。 這是因為音量和 (&) 運算符是用於文字串連。 DAX 會將此公式解譯為讀取:將值 1 當成文字並將值 2 加為文字來計算結果。 現在,如果您要輸入 = 1 + 2,DAX 會將此公式讀取為:計算結果的方式是計算數值 1 並加上數值 2。 結果當然是「3」,一個數值。 DAX 會根據公式中的運算符來計算結果值,而不是根據自變數中所用欄的數據類型來計算。 DAX 中的數據類型非常重要,但不在此快速入門的範圍之外。 若要深入瞭解 DAX 公式中的數據類型和運算符,請參閱書籍 Online 中的 DAX 參考 (http://go.microsoft.com/fwlink/?LinkId=239769&clcid=0x409) 。
讓我們再試一次。 這一次,您將會輸入公式並使用 IntelliSense 來建立量值。 如果您沒有完全瞭解公式,請不要太擔心。 這裡很重要的一點是瞭解如何在正確的語法中使用多個元素建立公式。
工作:建立量值公式
-
在 [ FactSales ] 表格中,按兩下 [計算區域] 中的任何空白儲存格。 這是 Power Pivot 視窗中表格正下方空白儲存格的區域。
-
在數據編輯列中,輸入前一季銷售額:的名稱。
-
輸入等號 = 以開始計算公式。
-
輸入 CAL 的前幾個字母,然後按兩下您要使用的函數。 在此公式中,您想要使用 CALCULATE 函數。
-
輸入左括號 ( 以開始要傳遞至 CALCULATE 函數的自變數。
請注意,輸入左括號之後,IntelliSense 會顯示 CALCULATE 函數所需的自變數。 您將稍微瞭解一下自變數。
-
輸入 FactSales 表格的前幾個字母,然後在下拉式清單中,按兩下 [FactSales[Sales]。
-
輸入逗號 (,) 指定第一個篩選,然後輸入,PRE,然後按兩下 PREVIOUSQUARTER 函數。
選取 PREVIOUSQUARTER 函數之後,會出現另一個左括弧,表示需要另一個自變數;這一次,用於 PREVIOUSQUARTER 函數。
-
輸入 [調暗] 的前幾個字母,然後按兩下 [DimDate[DateKey]。
-
輸入兩個右括弧 ) ) ,關閉傳遞至 PREVIOUSQUARTER 函數的自變數和 CALCULATE 函數。
您的公式現在看起來應該像這樣:
上一季銷售額:=CALCULATE (FactSales[Sales],PREVIOUSQUARTER (DimDate[DateKey]) )
-
按兩下資料編輯列上的 [檢查公式] 按鈕以驗證公式。 如果您收到錯誤訊息,請確認語法的每個元素。
你做到了! 您剛才才使用 DAX 建立了量值,但並非一件容易的事。 此公式的執行方式是根據數據透視表或樞紐分析圖中套用的篩選,來計算上一季的總銷售額。
您剛才被介紹到DAX公式的幾個重要層面。 首先,此公式包含兩個函數。 請注意,PREVIOUSQUARTER 函數是以巢狀方式作為自變數傳遞至 CALCULATE 函數。 DAX 公式最多可以包含64個巢狀函數。 公式不太可能包含這麼多巢狀函數。 事實上,這樣的公式很難建立和偵錯,而且可能也不會很快。
在此公式中,您也會使用篩選。 篩選會縮小計算範圍。 在此情況下,您選取一個篩選做為自變數,這實際上是另一個函數。 您稍後將會深入了解篩選。
最後,您使用了 CALCULATE 函數。 這是 DAX 中功能最強大的函數之一。 當您撰寫數據模型並建立更複雜的公式時,您可能會多次使用此函數。 討論 CALCULATE 函數不在此快速入門的範圍之外,但是隨著您對 DAX 的瞭解成長,請特別留意這個函數。
附註: 一般說來,若要在 DAX 公式中使用時間智慧函數,您必須使用 [標示為日期數據表] 對話方塊來指定唯一的日期資料行。 在 Contoso DAX 公式 Samples.xlsx 活頁簿中,會選取 [DimDate] 表格中的 [日期索引鍵] 欄做為唯一的日期數據行。
額外點數
您可能會問:「我可以建立最簡單的DAX公式是什麼?」 答案是「您不需要使用的公式」。 而這正是您在量值中使用標準匯總函數時所能執行的動作。 幾乎所有數據模型都需要篩選及計算匯總的數據。 例如,您之前在 [銷售金額加總] 量值中所見的 SUM 函數,是用來加總特定欄中的所有數位。 DAX 也包含數個其他函數,可匯總值。 您可以使用 [自動求和] 功能,自動使用標準匯總建立公式。
額外點數工作:使用 [自動求和] 功能建立量值公式
-
在 [FactSales] 表格中,捲動到 ReturnQuantity 欄,然後按兩下欄標題以選取整欄。
-
在 [常 用] 索 引標籤的功能區上,按兩下 [ 計算] 群組中的 [ 自動求和 ] 按鈕。
按兩下 [自動求和] 旁的向下箭號,然後按兩下 [ 平均 ] (注意您可以使用的其他標準匯總函數,) 。
接著會立即建立名為 ReturnQuantity 的 Average 的新量值:後面接著公式 =AVERAGE ([ReturnQuantity]) 。
現在沒那麼簡單嗎? 當然,並非所有您建立的公式都會這麼簡單。 但是,您可以使用 [自動求和] 功能,使用標準匯總計算來建立快速且簡單的公式。
這應該可以讓您相當瞭解DAX公式中使用的語法。 您也被導入了一些非常酷的功能,例如 IntelliSense 和自動求和,以協助您建立快速、簡單且正確的公式。 當然,您還可以進一步了解語法。 若要深入瞭解,最好是DAX參考或 SQL Books Online。
語法 QuickQuiz
-
數據編輯列上的這個按鈕有什麼作用?
-
DAX 公式中的欄名稱一律圍繞著什麼?
-
您要如何撰寫下列公式:
在 [DimProduct] 表格中,針對 UnitMargin 計算結果列中的每一列,從 [單價] 欄中的值減去 UnitCost 欄中的值來計算值?
本主題結尾提供解答。
函數
函數是預先定義的公式,會使用稱為自變數的特定值,以特定的順序或結構執行計算。 自變數可以是其他函數、其他公式、欄參照、數位、文字、邏輯值,例如TRUE或 FALSE,或常數。
DAX 包含下列函數類別:日期和時間、資訊、邏輯、數學、統計、文字和時間智慧函數。 如果您熟悉 Excel 公式中的函數,DAX 中的許多函數看起來會與您類似;不過,DAX 函數在下列方式中是唯一的:
-
DAX 函數一律會參照完整的數據行或數據表。 如果您只想使用表格或欄中的特定值,您可以在公式中新增篩選。
-
如果您需要逐列自定義計算,DAX 提供的函數可讓您使用目前的列值或相關值做為自變數,以執行因上下文而異的計算。 您稍後將會深入了解內容。
-
DAX 包含許多會傳回數據表而非值的函數。 表格不會顯示,但可用來為其他函數提供輸入。 例如,您可以擷取數據表,然後計算其中的相異值,或是在篩選的數據表或欄上計算動態加總。
-
DAX 包含各種不同的時間智慧函數。 這些函數可讓您定義或選取日期範圍,並根據這些函數執行動態計算。 例如,您可以比較平行期間的總和。
有時候,您可能需要在公式中使用哪些函數是很困難的。 Power Pivot,以及 SQL Server 數據工具中的表格式模型設計工具,包括 [插入函數] 功能,此對話方塊可協助您依類別選取函數,並提供每個函數的簡短描述。
讓我們建立新公式,其中包含您將使用 Insert 函數功能選取的函數:
工作:使用 Insert 函數將函數新增至公式
-
在 [FactSales] 表格中,捲動到最右側的欄,然後在欄標題中,按兩下 [ 新增欄]。
-
在數據編輯列中,輸入等號 =。
-
按兩下 [插入函數] 按鈕。 這會開啟 [插入函數 ] 對話框。
-
在 [ 插入函數 ] 對話框中,按兩下 [ 選取類別 清單] 方塊。 根據預設,系統會選取 [ 全部 ],而 [ 全部 ] 類別中的所有函數如下所列。 這是許多函數,因此您會想要篩選函數,以便更輕鬆地找到您要尋找的函數類型。
-
針對此公式,您想要傳回一些已存在於另一個數據表中的數據。 為此,您將使用 [篩選] 類別中的函數。 接著按下 [ 篩選 ] 類別,然後在 [ 選取函數] 中向下捲動並按兩下 RELATED 函數。 按兩下 [確定 ] 關閉 [ 插入函數 ] 對話框。
-
使用 IntelliSense 協助您尋找並選取 DimChannel[ChannelName] 欄。
-
關閉公式,然後按 Enter。
-
按 Enter 完成公式後,[計算] 一詞會出現在 Power Pivot 視窗底部的狀態列中。 現在您會發現您剛才在 FactSales 表格中建立了一個新數據行,其中包含 DimChannel 數據表中的通道資訊。
-
重新命名欄通道。
您的公式應該看起來像這樣:=RELATED (DimChannel[ChannelName])
您剛才剛才在 DAX 中引進另一個非常重要的函數, 也就是 RELATED 函數。 RELATED 函數會從另一個數據表傳回值。 您可以使用 RELATED,前提是您目前所在的數據表與包含您要取得之值的數據表之間有關聯。 當然,RELATED 函數具有極大的可能性。 在此情況下,您現在可以在 FactSales 數據表中包含每個銷售的銷售通道。 您現在可以從數據透視表字段清單中隱藏 DimChannel 表格,讓您更輕鬆地瀏覽並只查看您真正需要的最重要資訊。 RELATED 函數與先前所述的 CALCULATE 函數非常類似,非常重要,而且您可能會多次使用。
如您所見,DAX 中的函數可協助您建立非常強大的公式。 實際上我們只觸及函數的基本概念。 隨著 DAX 技能的改善,您將會使用許多不同的函數建立公式。 瞭解所有 DAX 函數的詳細數據,其中一個最佳位置是數據分析表示式 (DAX) 參考。
函數 QuickQuiz
-
函數一律參照什麼?
-
公式可以包含多個函數嗎?
-
您會使用哪一種函數類別將兩個文字字串串連成一個字串?
本主題結尾提供解答。
內容
上下文是其中一個最重要的DAX概念。 DAX 中有兩種類型的上下文;列上下文和篩選上下文。 我們將會先查看列上下文。
列上下文
最輕鬆地將列上下文想成是目前的數據列。 例如,還記得您先前在瞭解語法時看到的邊界計算結果列嗎? 公式 =[SalesAmount] - [TotalCost] 會針對表格中每一列在 [邊界] 欄中計算值。 每一列的值是從同一列的 [SalesAmount] 和 [TotalCost] 這兩個其他欄中的值進行計算。 DAX 可以計算 [邊界] 欄中每一列的值,因為它具有上下文:針對每一列,它會採用 [TotalCost] 欄中的值,並從 [SalesAmount] 欄中的值中將其減去。
在以下所示的選取單元格中,計算目前列中的 $49.54 值,是從 [SalesAmount] 欄的 $101.08 值減去 [TotalCost] 數據行中的 $51.54。
列上下文不只適用於計算結果列。 每當公式有套用篩選來識別表格中單一列的函數時,也會套用列上下文。 此函數會針對所篩選表格的每一列,固有套用列上下文。 這類列上下文最常套用至量值。
篩選上下文
篩選上下文比列上下文稍微難以理解。 您最輕鬆地將篩選上下文想成:在計算中套用一或多個篩選,決定結果或值。
篩選上下文不存在於列上下文中;而是除了列上下文之外,也適用。 例如,若要進一步縮小要包含在計算中的值,您可以套用篩選上下文,它不僅能指定列上下文,還能只指定特定值 (篩選) 該列上下文中。
篩選上下文很容易在數據透視表中看到。 例如,當您將 TotalCost 新增至 [值] 區域,然後將 [年份] 和 [地區] 新增至 [列] 或 [欄] 時,您正在定義篩選上下文,根據指定的年份和地區選取數據的子集。
為什麼篩選內容對 DAX 如此重要? 因為在數據透視表中新增欄和列卷標及交叉分析篩選器,可最輕鬆地套用篩選上下文,但篩選上下文也可以透過使用ALL、RELATED、FILTER、CALCULATE等函數,以及其他量值和欄來定義篩選,以套用至DAX公式。 例如,讓我們在名為 StoreSales 的量值中查看下列公式:
很明確地,這個公式比您看到的一些其他公式更複雜。 不過,為了更加瞭解此公式,我們可以將其細分,就像我們使用其他公式一樣。
此公式包含下列語法元素:
-
量值名稱 StoreSales,後面接著冒號 :。
-
等號運算子 (=) 表示公式的開頭。
-
CALCULATE 函數會在經過指定篩選修改的上下文中,將表達式評估為自變數。
-
括弧 () 括住一或多個自變數。
-
與表達式同一個數據表中的量值 [銷售]。 銷售量值有公式:=SUM (FactSales[SalesAmount]) 。
-
逗號 (,) 分隔每個篩選。
-
參照的數據行和特定值 DimChannel[ChannelName] =“Store” 做為篩選。
此公式只會確保只有 Sales 量值定義的銷售值做為篩選,只會針對值為 “Store” 之 DimChannel[ChannelName] 欄中的列進行計算。
如您所見,在公式中定義篩選上下文具有強大功能。 在相關數據表中只參照特定值只是其中一個範例。 如果您未立即完全了解內容,請不用擔心。 當您建立自己的公式時,您會更瞭解上下文,以及為什麼在DAX中如此重要。
內容 QuickQuiz
-
這兩種內容類型是什麼?
-
什麼是篩選上下文?
-
什麼是列上下文?
本主題結尾提供解答。
摘要
現在您已基本瞭解 DAX 中最重要的概念,您可以開始建立計算結果列和量值的 DAX 公式。 DAX 的確有點難瞭解,但有許多資源可供您使用。 在閱讀本主題數次,並嘗試使用一些您自己的公式之後,您可以深入瞭解其他可協助您解決業務問題的其他 DAX 概念和公式。 您可在 Power Pivot 說明、SQL Server Books Online、白皮書和部落格中使用許多 DAX 資源,這些資源來自Microsoft和頂尖的 BI 專業人員。 DAX 資源中心Wiki (http://social.technet.microsoft.com/wiki/contents/articles/dax-resource-center.aspx) 是一個很好的起點。 DAX) Reference (數據分析表示式也是很好的資源。 請務必將它儲存到 [我的最愛]。
(HTTP://GO.MICROSOFT.COM/FWLINK/?LINKID=237472&clcid=0x409) 所提供的 BI 表格式模型白皮書 DAX 提供更詳細的概念,以及許多其他進階概念和公式。 此白皮書也使用與您現有的相同 Contoso DAX 範例 Formulas.xlsx 活頁簿。
QuickQuiz Answers
語法:
-
開啟 Insert 函數功能。
-
方括弧 []。
-
=[UnitPrice] - [UnitCost]
功能:
-
表格和數據行。
-
是。 公式最多可以包含64個巢狀函數。
-
文字函數。
上下文:
-
列上下文和篩選上下文。
-
在計算中篩選一個或多個可決定單一值的篩選。
-
目前的列。