瞭解 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的最佳方式是建立一些基本公式、將它們與實際數據搭配使用,並自行查看結果。 這裡的範例和工作會使用適用於Power BI Desktop的 Contoso 銷售範例檔案。 此範例檔案與教學課程:在 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 的量值,計算 [SalesAmount] 資料行中 [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. 選取公式列中的複選標記 複選標記圖示 ,或按 Enter 來驗證公式,並將它新增至 Sales 數據表。

您辦到了! 您剛使用 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 函式參考

函式 QuickQuiz

  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 ]。 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. 目前的數據列。