共用方式為


了解 Power BI Desktop 的 DAX 基本概念

不熟悉 Power BI Desktop 的使用者可以使用本文,快速且輕鬆地介紹如何使用數據分析表示式 (DAX) 來解決許多基本計算和數據分析問題。 我們將探討一些概念資訊、您可以完成的一系列工作,以及一個知識檢定來測試您已學到的內容。 完成本文之後,您應該充分瞭解 DAX 中最重要的基本概念。

什麼是DAX?

DAX 是函數、運算子和常數的集合,可用於公式或表達式,以計算和傳回一或多個值。 DAX 可協助您從模型中已有的數據建立新資訊。

為什麼 DAX 如此重要?

建立新的 Power BI Desktop 檔案並匯入一些數據很容易。 您甚至可以建立報告來顯示寶貴的見解,而不需使用任何 DAX 公式。 但是,如果您需要分析產品類別和不同日期範圍的成長百分比,該怎麼辦? 或者,您需要計算逐年增長率並與市場趨勢進行比較? DAX 公式也提供這項功能和其他許多重要功能。 瞭解如何建立有效的 DAX 公式可協助您充分利用數據。 當您取得所需的資訊時,可以開始解決影響您底線的實際商務問題。

先決條件

您可能已經熟悉在 Microsoft Excel 中建立公式,且該知識有助於瞭解 DAX。 但是,即使您沒有 Excel 公式的經驗,這裡所述的概念也會協助您開始建立 DAX 公式,並立即解決真實世界的 BI 問題。

我們將著重於了解計算中使用的 DAX 公式,尤其是在量值和計算欄位中。 您應該已經熟悉使用 Power BI Desktop 匯入數據並將欄位新增至報表,您也應該熟悉 量值匯出數據行的基本概念。

範例活頁簿

學習DAX的最佳方式是建立一些基本公式、將它們與實際數據搭配使用,並自行查看結果。 這裡的範例和作業會使用 Contoso 銷售範例檔案,適用於 Power BI Desktop。 此範例檔案與教學 課程:在 Power BI Desktop 中建立您自己的量值 一文中使用的檔案相同。

讓我們開始

我們將圍繞三個基本概念來定義對 DAX 的理解: 語法式和 內容。 DAX 中有其他重要的概念,但瞭解這三個概念將提供建置 DAX 技能的最佳基礎。

語法

在您建立自己的公式之前,讓我們來看看 DAX 公式語法。 語法包含組成公式的各種元素,或更簡單地說,如何撰寫公式。 例如,以下是量值的簡單 DAX 公式:

DAX 公式的螢幕快照,其中包含個別語法元素的指標。

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

A。 量值名稱 Total Sales

B. 等號運算子 (=),表示公式的開頭。 計算時,它會傳回結果。

C. DAX 函數 SUM,其會加總 Sales[SalesAmount] 數據行中的所有數位。 稍後您將瞭解更多關於函式的知識。

D. 括弧 (),其圍繞包含一或多個自變數的表達式。 大部分函式至少需要一個自變數。 自變數會將值傳遞至函式。

E. 參考的數據表 Sales

F. Sales 數據表中參考的欄位 [SalesAmount]。 有了這個自變數,SUM 函式就會知道要匯總 SUM 的數據行。

嘗試了解 DAX 公式時,將每個元素分解成您每天思考和說話的語言通常相當有幫助。 例如,您可以將此公式讀取為:

針對名為 Total Sales 的量值,計算 (=) Sales 表中 [SalesAmount] 資料行的值總和。

新增至報表時,此量值會計算並傳回值,方法是加總我們包含的每個其他欄位的銷售金額,例如美國手機。

您可能會想,「這項量值不是做與我只是將 SalesAmount 字段新增至報表一樣的事情嗎?是的。 但是,有充分的理由建立自己的量值來加總 SalesAmount 字段的值:我們可以將其當做其他公式中的自變數使用。 此解決方案現在似乎有點令人困惑,但隨著DAX公式技能的成長,知道此量值會讓您的公式和模型更有效率。 事實上,您稍後會看到「Total Sales」衡量指標顯示為其他公式中的參數。

讓我們再看看一些關於此公式的事項。 特別是,我們引進了一個函式 SUM。 函式是預先撰寫的公式,讓您更容易進行涉及數字、日期、時間、文本等的複雜計算和處理。 稍後您將了解更多有關函式的資訊。

您也會看到資料行名稱 [SalesAmount] 前面有其所在的 Sales 數據表。 此名稱稱為完整數據行名稱,其包含數據表名稱前面的數據行名稱。 在相同數據表中參考的數據行不需要將數據表名稱包含在公式中,這可以讓參考許多數據行的長公式較短且更容易閱讀。 不過,最好在量值公式中包含數據表名稱,即使在同一個數據表中也一樣。

備註

如果數據表名稱包含空格、保留關鍵詞或不允許的字元,您必須以單引弧括住數據表名稱。 不論您的地區設定是否支援字元集,如果名稱包含 ANSI 英數位元範圍以外的任何字元,您也必須以引號括住數據表名稱。

請務必讓公式具有正確的語法。 在大部分情況下,如果語法不正確,則會傳回語法錯誤。 在其他情況下,語法可能正確,但傳回的值可能不是您預期的值。 Power BI Desktop 中的 DAX 編輯器包含建議功能,可協助您選取正確的元素,以用來建立語法正確的公式。

讓我們建立範例公式。 此工作將協助您進一步瞭解公式語法,以及公式列中的建議功能如何協助您。

工作:建立量值公式

  1. 下載 並開啟 Contoso 銷售範例 Power BI Desktop 檔案。

  2. 在 [報表] 檢視的欄位清單中,以滑鼠右鍵按兩下 [銷售 ] 資料表,然後選取 [ 新增量值]。

  3. 在公式列中,輸入新的量值名稱 Previous Quarter Sales 來取代 Measure

  4. 等號之後,輸入前幾個字母 CAL,然後按兩下您想要使用的函式。 在此公式中,您想要使用 CALCULATE 函數。

    您將使用 CALCULATE 函式,並透過傳遞給 CALCULATE 函式的參數來篩選和加總我們所需的數量。 這種類型的函式稱為巢狀函式。 CALCULATE 函式至少有兩個自變數。 第一個是要評估的表達式,第二個是篩選條件。

  5. 輸入 左括弧( 作為 CALCULATE 函數的開頭,然後輸入 SUM,再接著另一個 左括弧(

    接下來,我們會將自變數傳遞至 SUM 函式。

  6. 開始輸入 Sal,然後選取 [Sales[SalesAmount],後面接著右括弧 )。

    此步驟會建立 CALCULATE 函式的第一個表達式自變數。

  7. 輸入逗號 (),後面接著空格以指定第一個篩選,然後輸入 PREVIOUSQUARTER

    您將使用 PREVIOUSQUARTER 時間智慧函式,依上一季篩選 SUM 結果。

  8. 在左括弧 之後 ( 針對 PREVIOUSQUARTER 函式,輸入 Calendar[DateKey]

    PREVIOUSQUARTER 函式有一個自變數,這是包含連續日期範圍的數據行。 在我們的案例中,這是 Calendar 數據表中的 DateKey 數據行。

  9. 輸入兩個右括弧))來關閉傳遞至 PREVIOUSQUARTER 函數和 CALCULATE 函數的引數。

    您的公式現在看起來應該像這樣:

    上一季銷售 = CALCULATE(SUM(Sales[SalesAmount]), PREVIOUSQUARTER(Calendar[DateKey]))

  10. 選取公式列中的勾選圖示 Checkmark icon,或按 Enter 以驗證公式並將其新增至銷售表格。

您辦到了! 您剛使用 DAX 建立複雜的量值。 此公式會根據報表中套用的篩選,計算前一季的總銷售額。 例如,我們可以將 SalesAmount 和新的上一季銷售量值從 Sales 數據表放入叢集柱形圖中。 從 [日曆] 表格新增 Year 作為切片器,接著選取 [2011]。 然後,將 QuarterOfYear 新增為另一個交叉分析篩選器,選取 4 後,我們將得到如下的圖表:

上一季銷售額和 SalesAmount 圖表

請記住,範例模型只包含從 2011 年 1 月 1 日到 2013/1/19 的少量銷售數據。 如果您選取無法加總 SalesAmount 的年份或季,或新量值無法計算目前或上一季的銷售數據,則不會顯示該期間的數據。 例如,如果您針對 Year 選取 2011 年,而針對 QuarterOfYear 選取 1,則上一季銷售不會顯示任何數據,因為 2010 年第四季沒有數據。

您已介紹 DAX 公式的幾個重要層面:

  • 此公式包含兩個函式。 PREVIOUSQUARTER,一個時間智慧函式,嵌入為傳給篩選函式 CALCULATE 的參數。

    DAX 公式最多可包含64個巢狀函式。 公式不太可能包含這麼多的巢狀函式。 事實上,這類公式很難建立和偵錯,而且可能也不會很快。

  • 在此公式中,您也會使用篩選條件。 篩選會縮小要計算的內容範圍。 在此情況下,您已選取一個篩選作為自變數,這實際上是另一個函式的結果。 稍後您將深入了解篩選。

  • 您使用了 CALCULATE 函式。 此函式是 DAX 中功能最強大的函式之一。 當您撰寫模型並建立更複雜的公式時,可能會多次使用此函式。 雖然有關 CALCULATE 函式的進一步討論超出本文的範圍,但隨著您對 DAX 的知識成長,請特別注意它。

語法 QuickQuiz

  1. 公式列上的此按鈕有何用途?

    按鈕選取

  2. DAX 公式中的欄位名稱總是圍繞著什麼?

本文結尾會提供答案。

功能

函式是預先定義的公式,可使用特定值,稱為自變數的特定順序或結構來執行計算。 自變數可以是其他函數、另一個公式、表達式、數據行參考、數位、文字、邏輯值,例如TRUE或 FALSE,或常數。

DAX 包含下列函式類別: 日期和時間時間智慧資訊邏輯數學統計文字父子和其他 函式。 如果您熟悉 Excel 公式中的函式,DAX 中的許多函式看起來會類似您;不過,DAX 函式在下列方面是唯一的:

  • DAX 函數一律會參考完整的資料行或資料表。 如果您只想使用某個資料表或資料行中的特定值,您可以將篩選條件加入公式。

  • 如果您需要依數據列自定義計算,DAX 會提供函式,讓您使用目前的數據列值或相關值做為一種自變數,以根據內容執行計算。 稍後您將深入了解內容。

  • DAX 包含許多傳回數據表而非值的函式。 數據表不會顯示,但用來提供其他函式的輸入。 例如,您可以擷取資料表,然後計算其中的相異值;或者計算所篩選的不同資料表或資料行的動態總和。

  • DAX 包含各種時間分析功能。 這些函式可讓您定義或選取日期範圍,並根據它們執行動態計算。 例如,您可以比較不同平行區間的總和。

  • Excel 有常用的函式 VLOOKUP。 DAX 函式不會採用儲存格或儲存格範圍作為 Excel 中 VLOOKUP 的參考。 DAX 函式會採用數據行或數據表作為參考。 請記住,在 Power BI Desktop 中,您正在使用關係型數據模型。 查閱另一個數據表中的值很容易,而且在大多數情況下,您完全不需要建立任何公式。

    如您所見,DAX 中的函式可協助您建立功能強大的公式。 我們只觸及函式的基本概念。 隨著 DAX 技能的成長,您將使用許多不同的函式來建立公式。 瞭解每個 DAX 函式詳細數據的最佳位置之一是在 DAX 函式參考中。

函式快速測驗

  1. 函式總是引用什麼?
  2. 公式可以包含多個函式嗎?
  3. 您會使用何種類別的函式,將兩個文字字串串連成一個字元串?

本文結尾會提供答案。

上下文

情境是最重要的 DAX 概念之一。 DAX 中有兩種類型的內容:數據列內容和篩選內容。 我們會先查看數據列內容。

列情境

列內容最容易被理解為當前列。 每當公式有一個函式套用篩選以識別數據表中的單一數據列時,就會套用它。 該函式自然會為要篩選的數據表的每一列套用列上下文。 這種類型的資料列上下文最常應用於度量值。

篩選語境

篩選內容比數據列內容更難理解。 您可以輕鬆地將篩選內容想像為:在決定結果或值的計算中套用一或多個篩選。

篩選內容並不是用來取代列內容;相反地,它是在列內容之上套用。 例如,若要進一步縮小要包含在計算中的值範圍,您可以套用篩選內容,它不僅會指定數據列內容,而且會指定該數據列內容中的特定值(篩選)。

報表中很容易看到篩選內容。 例如,當您將 TotalCost 新增至視覺效果,然後新增 Year 和 Region 時,您會定義篩選內容,以根據指定的年份和區域選取數據子集。

為什麼篩選內容對 DAX 如此重要? 您已看到篩選上下文可藉由將字段新增到視覺化中來套用。 篩選內容也可以在 DAX 公式中套用,方法是使用 ALL、RELATED、FILTER、CALCULATE 等函式、關係以及其他度量值和欄來定義篩選。 例如,讓我們在名為 Store Sales 的量值中查看下列公式:

市集銷售量值

為了進一步瞭解此公式,我們可以將其分解,就像其他公式一樣。

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

A。 指標名稱 Store Sales

B. 等號運算子 (=),表示公式的開頭。

C. CALCULATE 函式會在由指定的篩選條件修改的上下文中,評估表達式作為參數。

D. 括弧 (),其圍繞包含一或多個自變數的表達式。

E. 與表達式相同數據表中的量值 [Total Sales ]。 總銷售額度具有公式:=SUM(Sales[SalesAmount])。

F. 逗號 (,),它會分隔第一個表達式自變數與篩選自變數。

G. 完整參考數據行 Channel[ChannelName]。 這是我們的數據列內容。 此數據行中的每個數據列都會指定通道,例如 Store 或 Online。

H. 特定值 Store,做為篩選條件。 這是我們的篩選內容。

此公式可確保只有 Total Sales 量值所定義的銷售值只會針對 Channel[ChannelName] 資料行中的數據列計算,並使用 [ Store ] 值做為篩選。

如您所想像,能夠在公式中定義篩選內容具有巨大的強大功能。 只參考相關數據表中特定值的能力只是一個這類範例。 如果您不完全了解內容,請不要擔心。 當您建立自己的公式時,您將更深入地了解上下文,以及為何上下文在 DAX 中如此重要。

Context QuickQuiz

  1. 這兩種類型的上下文是什麼?
  2. 什麼是篩選內容?
  3. 什麼是行上下文?

本文結尾會提供答案。

總結

既然您已基本瞭解 DAX 中最重要的概念,您可以開始自行建立量值的 DAX 公式。 DAX 確實可以有點棘手的學習,但有許多資源可供您使用。 閱讀本文並實驗一些您自己的公式之後,您可以深入瞭解其他 DAX 概念和公式,以協助您解決自己的商務問題。 有許多 DAX 資源可供您使用;最重要的是 數據分析表示式 (DAX) 參考

由於 DAX 已在 Power Pivot 和 Analysis Services 表格式模型等其他Microsoft BI 工具中已經存在數年,因此有許多絕佳的來源資訊。 您可以在Microsoft和領先 BI 專業人員的書籍、白皮書和部落格中找到詳細資訊。 DAX 資源中心也是一個絕佳的起點。

QuickQuiz 答案

語法:

  1. 驗證並輸入量值到模型中。
  2. 方括弧 []。

功能:

  1. 數據表和數據欄。
  2. 是的。 公式最多可以包含64個巢狀函式。
  3. 文字函式

內容:

  1. 列上下文和篩選上下文。
  2. 計算中的一或多個篩選條件會決定單一值。
  3. 目前的數據列。