DAX 概觀

數據分析表達式 (DAX) 是 Analysis Services、Power BI andPower Excel 中 Pivot 中使用的公式表達式語言。 DAX 公式包括函數、運算元、andvalues,以對表格式數據模型中 related 數據表 and 數據行中的數據執行進階計算 and 查詢。

本文僅提供 DAX中最重要的概念基本簡介。 它描述了 DAX 如何適用於 all 所使用的產品。 某些功能可能會 not 套用至特定產品 or 用例。 請參閱您 product的文件,其中描述了 DAX的特定實作。

計算

DAX 公式用於量值、計算列、計算表、and 行級別安全性。

量值

量值是動態計算公式,其結果會根據內容而變更。 量值用於支持結合 and 篩選模型數據的報告,方法是使用多個屬性,例如 Power BI 報表 or Excel 數據透視表 or 樞紐分析圖。 量值是使用模型設計工具中的 DAX 公式列所建立。

measure 中的公式可以使用自動總和功能自動建立的標準聚合函數,例如 COUNTorSUM、or 您可以使用 DAX 公式列來 define 自己的公式。 具名量值可以當作引數傳遞給其他量值。

當您在公式列中 definemeasure 的公式時,工具提示功能會顯示目前情境中總計結果的預覽,否則結果 not 會立即輸出到任何地方。 您無法立即看到(已過濾)計算結果的原因,是因為在沒有上下文的情況下,無法判斷 measure 的結果。 若要 evaluatemeasure 需要報表用戶端應用程式,以提供擷取每個數據格相關數據所需的內容,然後 evaluate 每個 and 數據格的表達式。 該用戶端可能是 Excel 數據透視表 or PivotChart,Power BI 報表,or SQL Server Management Studio (SSMS) DAX 查詢中的數據表表達式。

不論用戶端為何,都會針對結果中的每個資料格執行個別查詢。 也就是說,數據透視表中每個數據列 and 數據行標頭的組合,orPower BI 報表中 andfilters 的每個交叉分析篩選器選取專案,都會產生計算 measure 的不同數據子集。 例如,使用這個非常簡單的measure公式:

DAX
Total Sales = SUM([Sales Amount])

當使用者將 TotalSales measure 放在報表中時,and 然後將 Product Category 數據行從 Product 數據表放入 Filters,則會計算銷售金額的 sum,and 針對每個 product 類別顯示。

不同於計算結果列,measure 的語法包含公式前面的 measure名稱。 在剛才提供的範例中,總銷售額的名稱會顯示在公式前面。 建立 measure之後,名稱 and 定義會出現在報表用戶端應用程式 [欄位] 清單中,and 視檢視方塊而定,and 角色可供模型 all 使用者使用。

若要深入了解,請參閱:
BI Desktop 中的 量值
Analysis Services 中的量值
Pivot
中的 量值

計算結果欄

計算結果列是您新增至現有數據表的數據行(在模型設計工具中)and 然後建立定義數據行 values的 DAX 公式。 當計算欄 contains 有效的 DAX 公式時,只要輸入公式,就會針對每個行計算 values。 然後,Values 會儲存在記憶體中的數據模型中。 例如,在 Date 數據表中,當公式輸入至公式欄時:

DAX
= [Calendar Year] & " Q" & [Calendar Quarter]

數據表中每個數據列的 value 是藉由從 CalendarYear 數據行(在相同的 Date 數據表中)擷取 values 來計算,在大寫字母 Q and 新增空格,and 然後從 CalendarQuarter 數據行新增 values(在相同的 Date 數據表中)。 每當 and 出現時,計算欄中的每一行結果會立即被計算出來,例如 2017 年第 1 季。 數據行 values 只會重新計算 if 數據表 or 處理任何 related 數據表(重新整理),or 模型會從記憶體卸除 and 然後重載,例如關閉 and 重新開啟 Power BI Desktop 檔案時。

若要深入了解,請參閱:
BI Desktop 中的 Power 計算欄
Analysis Services 中的計算結果欄
Pivot中的 計算欄。

計算資料表

計算數據表是以公式表示式為基礎的計算物件,衍生自相同模型中其他數據表的 allor 部分。 與其從資料來源查詢 and 並將 values 載入至你的新資料表欄位,不如用 DAX 公式來定義該資料表的 values。

在角色扮演維度中,計算資料表十分有幫助。 例如,Date 數據表,例如 OrderDate、ShipDate、or DueDate,這取決於外鍵關係。 藉由明確地建立 ShipDate 的計算資料表,您會取得可供查詢使用的獨立資料表,如同任何其他資料表一樣。 在設定篩選的數據列集時,匯出數據表也很有用,or 來自其他現有數據表之數據行的子集 or 超集。 這可讓您將原始資料表保持不變,同時建立該資料表的變化以支援特定案例。

計算資料表支援與其他資料表的關聯性。 計算數據表中的數據列具有數據類型和格式設定,and 可以屬於一個數據類別。 計算表格可以命名,and 會顯示,or 會隱藏,就像其他任何表格一樣。 匯出數據表會重新計算 if 其提取數據的任何數據表都會重新整理 or 更新。

若要深入了解,請參閱:
BI Desktop Power 計算數據表
Analysis Services 中的計算資料表

資料列層級安全性

使用列層級安全性時,DAX 公式必須 evaluate 為布林值 TRUE/FALSE 條件,用來定義特定角色成員的查詢結果可以傳回哪些資料列。 例如,針對銷售角色的成員,包含以下 DAX 公式的 Customers 資料表:

DAX
= Customers[Country] = "USA"

銷售角色的成員只能檢視美國客戶的數據,and 匯總,例如 SUM 只會針對美國的客戶傳回。 數據列層級安全性 not 可在 Excel Power Pivot 中使用。

使用 DAX 公式定義行級安全性時,您正在建立一個允許的資料行集。 這不會 not 禁止存取其他數據列,反而,它們只會作為允許的數據列集的一部分被傳回 not。 其他角色可以允許存取 DAX 公式所排除的數據列。 If 使用者是另一個角色的成員,and 該角色的數據列層級安全性可存取該特定數據列集,使用者可以檢視該數據列的數據。

數據行層級安全性公式會套用至指定的數據行,以及 related 行。 當數據表具有多個關聯性時,filters 針對作用中的關聯性套用安全性。 行級安全性公式將與為 related 表格定義的其他公式進行交集。

若要深入了解,請參閱:
具有 Power BI 的數據列層級安全性 (RLS)
Analysis Services 的角色

查詢

DAX 查詢可以在 SQL Server Management Studio (SSMS) and 開放原始碼工具中建立 and 執行,例如 DAX Studio (daxstudio.org)。 不同於只能在表格式數據模型中建立的 DAX 計算公式,DAX 查詢也可以針對 Analysis Services 多維度模型執行。 DAX 查詢通常比多維度數據表達式(MDX)查詢更容易撰寫,並且 and比較有效率。

DAX 查詢是語句,類似於 T-SQL 中的 SELECT 語句。 DAX 查詢最基本的類型是 evaluate 陳述。 例如,

DAX
EVALUATE
 ( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC

在結果中傳回資料表,其中僅列出 SafetyStockLevel 小於 200 的產品 (依 EnglishProductName 的遞增順序)。

您可以建立量值作為查詢的一部分。 量值僅適用於查詢的 duration。 若要深入瞭解,請參閱 DAX的查詢。

公式

DAX 公式對於在計算結果列 and 量值中建立計算至關重要,and 使用數據列層級安全性來保護您的數據。 使用 DAX 編輯器的模型設計工具 windowor 頂端的公式列,為計算結果列 and 量值建立公式。 若要建立列層級安全性的公式,請使用 [角色管理員] or [管理角色] 對話方塊。 本節中的資訊旨在讓您開始瞭解 DAX 公式的基本概念。

公式基本概念

DAX 公式可能非常簡單,or 相當複雜。 下表顯示一些可在計算結果欄中使用的簡單公式範例。

公式 定義
= TODAY() 在計算行的每一行中插入 today的 date。
= 3 在計算列的每一行中插入 value 3。
= [Column1] + [Column2] 在 [Column1] and [Column2] 的相同數據列中加入 values,and 將結果放入相同數據列的導出數據行中。

您建立的公式是否為簡單 or 複雜,建置公式時可以使用下列步驟:

  1. 每個公式都必須以相等 sign (=) 開頭。

  2. 您可以輸入 or 選取函式名稱,or 輸入表示式。

  3. and AutoComplete 顯示可用函式、數據表、and 資料行的清單,請開始輸入您想要的函式 or 名稱 first 幾個字母。 按 TAB 鍵,將項目從 AutoComplete 清單新增至公式。

    您也可以按一下 [Fx] 按鈕以顯示可用的函式清單。 若要從下拉式清單中選取函式,請使用箭頭鍵來選取項目,and 按一下 [確定] [確定],將函式新增至公式。

  4. 提供參數給函式,可以從可能的資料表 and 欄位的下拉式清單中選擇,或在 or 中輸入 values。

  5. 檢查語法錯誤:確認括弧 all 已關閉,並確保 and 數據行和數據表 andvalues 參考正確。

  6. 按 ENTER 以接受公式。

注意

在計算資料行中,一旦輸入公式 and,公式將被驗證,並且該資料行將填入 values。 在 measure中,按 ENTER 鍵會將 measure 定義與數據表一起儲存。 If 公式無效,則會顯示 error。

在此範例中,讓我們看看目前 中名為 Days 的 公式:

DAX
Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))

此 measure 可用來建立未完成的期間 and 與 previous 期間之間的比較比率。 公式必須考慮到經過的期間比例,and 將它與 previous 期間中的相同比例進行比較。 在此情況下,[目前天數從 Quarter 到 Date]/[目前期間的總天數 Quarter] 會提供目前期間所經過的比例。

此公式 contains 包含下列元素:

公式項目 說明
Days in Current Quarter measure的名稱。
= 用於開始公式的是等號 sign(=)。
COUNTROWS COUNTROWS 會計算 Date 數據表中的數據列數目
() 開啟 and 右括號指定自變數。
DATESBETWEEN DATESBETWEEN 函式會傳回 Date 資料表中 Date 欄位中每個 value 之間的 lastdate 的日期。
'Date' 指定 Date 數據表。 資料表是以單引號括住。
[Date] 指定 Date 資料表中的 Date 欄。 資料行是以括弧括住。
,
STARTOFQUARTER STARTOFQUARTER 函式會傳回 quarter的開頭部分的 date。
LASTDATE LASTDATE 函式會傳回 quarter的 lastdate。
'Date' 指定 Date 數據表。
[Date] 指定 Date 資料表中的 Date 資料行。
,
ENDOFQUARTER ENDOFQUARTER 函式
'Date' 指定 Date 數據表。
[Date] 指定 Date 資料表中的 Date 資料欄。

使用 AutoComplete 公式

AutoComplete 可讓您為公式中的每個項目提供選項,以協助您輸入有效的公式語法。

  • 您可以在現有公式中間使用具有巢狀函式的 AutoComplete 公式。 插入點前的文字會用來在下拉式清單中顯示 values,插入點之後的文字 andall 保持不變。

  • AutoComplete 會 not 自動新增函式的右括弧,or 自動匹配括弧。 您必須確定每個函式在語法上都正確,or 您無法儲存 or 使用公式。

在公式中使用多個函式

您可以巢狀函式,這表示您會使用一個函式的結果作為另一個函式的引數。 您最多可以在計算結果欄中巢狀 64 個層級的函式。 不過,巢狀設計可能會使得難以建立 or 疑難排解公式。 許多函式的設計都是單獨當作巢狀函式使用。 這些函式會傳回無法直接儲存為結果的資料表,而必須提供為資料表函式的輸入。 例如,函式 SUMX、AVERAGEX、andMINXall 需要數據表做為 first 自變數。

函式

函式是運算式中的具名公式。 大部分函式都需要 and 選擇性自變數,也稱為參數作為輸入。 執行函式時,會傳回 value。 DAX 包含函式,您可以使用日期 and 時間執行計算、建立條件式 values、使用字串、根據關聯性執行查閱,and 逐一查看數據表以執行遞歸計算的能力。 If 您已熟悉Excel公式,其中許多函式看起來非常類似;不過,DAX 公式在下列重要方式中有所不同:

  • DAX 函式一律會參考數據表 or 的完整數據行。 If 您想要只使用資料表 or 資料行的特定 values,您可以將 filters 新增至公式。

  • If 您需要依數據列自定義計算,DAX 提供函式,讓您使用目前的數據列 valueorrelatedvalue 做為一種參數,以執行依內容而有所不同的計算。 若要了解這些函式的運作方式,請參閱本文中的內容

  • DAX 包含許多傳回資料表的函式,而不是 value。 數據表 not 顯示在報表客戶端中,但用來提供其他功能的輸入。 例如,您可以擷取數據表 and 然後 count 其中不同的 values,orcalculate 篩選數據表 or 數據行的動態加總。

  • DAX 函式包括各種 time 智能 函式。 這些函式可讓您 defineor 選取 date 範圍,and 根據這些日期 orrange執行動態計算。 例如,您可以比較不同平行區間的總和。

彙總函數

聚合函數 calculate(標量)value,例如 count、sum、average、最小值和最大值 or,適用於 all 紀錄中的列 or 表,如表達式所定義。 若要深入了解,請參閱彙總函式

Date and time 函式

DAX 中的 dateandtime 函式類似於 Microsoft Excel 中的 dateandtime 函式。 不過,自 1900 年 3 月 1 日起,DAX 函式是以 datetime 數據類型為基礎。 若要深入瞭解,請參閱 Dateandtime 函式

Filter 函式

DAX 中的 filter 函式會傳回特定資料類型、在 related 故事中查閱 values,andfilterrelatedvalues。 查找函數的運作方式是使用類似資料庫的數據表 and 關係。 篩選函式可讓您操作資料內容以建立動態計算。 若要深入瞭解,請參閱 函式。

財務函式

DAX 中的財務函數用於執行財務計算的公式,例如回報的凈現值 valueandrate。 這些函式類似於 Microsoft Excel 中使用的財務函式。 若要深入了解,請參閱財務函式

資訊函數

資訊函式會查看作為自變數提供的數據格 or 數據列,and 會告訴您 value 是否符合預期的類型。 例如,ISERROR 函式會傳回 TRUEifcontainserror參考的 value。 若要深入了解,請參閱資訊函式

邏輯函式

邏輯函數會作用於運算式,以傳回有關運算式中 values 的資訊。 例如,TRUE 函數可讓您知道您正在評估的運算式是否傳回 TRUEvalue。 若要深入了解,請參閱邏輯函式

數學 and 三角函數

DAX 中的數學函數與 Excel 數學 and 三角函數非常類似。 DAX 函式所使用的數值數據類型中存在一些次要差異。 若要深入瞭解,請參閱 Math and trig 函式

其他函式

這些函式會執行大部分其他函式所屬任何類別無法定義的唯一動作。 若要深入了解,請參閱其他函式

關聯性函式

DAX 中的關聯函式可讓您從另一個 related 數據表傳回 values、指定要在表達式中使用的特定關聯性,and 指定交叉篩選方向。 若要深入了解,請參閱關聯性函式

統計函式

統計函數 calculatevaluesrelated 至統計分佈 and 機率,例如標準偏差和排列數 and。 若要深入了解,請參閱統計函式

文字函式

DAX 中的文字函式與 Excel 中對應的文字函式非常類似。 您可以返回字串的一部分,如字串內的文字 search,或字串 orconcatenatevalues。 DAX 也提供函式來控制日期、時間、and 數位的格式。 若要深入了解,請參閱文字函式

Time 智能功能

DAX 中提供的 time 智能功能可讓您建立計算,以使用內建的行事曆和 and 日期知識。 藉由將 timeanddate 範圍與匯總 or 計算結合,您可以針對銷售、庫存、and 等利用可比較的 time 期間來建立有意義的比較。 若要深入瞭解,請參閱 Time 智慧函式 (DAX)

資料表操作函式

這些函式會傳回一個資料表 or,用於操作既有的資料表。 例如,藉由使用 ADDCOLUMNS,您可以將匯出數據行新增至指定的數據表,or 您可以使用 SUMMARIZECOLUMNS 函式,在一組群組上傳回摘要數據表。 若要深入了解,請參閱資料表操作函式

變數

您可以使用 VAR,在表示式內建立變數。 VAR 在技術上是 not 函式,它是將表達式的結果儲存為具名變數的關鍵詞。 然後,該變數可以當做自變數傳遞至其他 measure 表達式。 例如:

DAX
VAR
    TotalQty = SUM ( Sales[Quantity] )

Return

    IF (
        TotalQty > 1000,
        TotalQty * 0.95,
        TotalQty * 1.25
        )

在此範例中,可以將 TotalQty 作為命名變數傳遞給其他運算式。 變數可以是任何純量資料類型,包括資料表。 使用變數在您的 DAX 公式中可以極具效力。

資料類型

您可從可能支援不同資料類型的多個不同資料來源將資料匯入模型中。 當將資料匯入模型時,資料會轉換成其中一個表格式模型資料類型。 當模型數據用於計算時,數據隨後會被轉換為 DAX 數據類型,以用於計算的 durationand 輸出。 當您建立 DAX 公式時,公式中使用的詞彙會自動判斷傳回的 value 數據類型。

DAX 支援下列資料類型:

模型中的資料類型 DAX 中的數據類型 說明
Whole Number 64 位 (八位元組) 整數 value1, 2 沒有小數位數的數字。 整數可以是正數 or 負數,但必須是 -9,223,372,036,854,775,808 (-2^63) and 9,223,372,036,854,775,807(2^63-1)。
Decimal Number 64 位元 (八位元組) 實數 1、2 實數是可以有小數位數的數字。 實數涵蓋廣泛的 rangevalues:

負 values 從 -1.79E+308 到 -2.23E-308



正 values 從 2.23E -308 到 1.79E + 308

不過,有效位數的數目限制為 17 個小數位數。
Boolean Boolean 任一 TrueorFalsevalue。
Text String Unicode 字元的數據字串。 可以是字串、數位 or 以文字 format表示的日期。
Date Date/time 日期 and 和時間以接受的 date-time 表示法呈現。

有效日期是指 all 1900 年 3 月 1 日之後的日期。
Currency Currency Currency 數據類型允許 values 在 -922,337,203,685,477.5808 到 922,337,203,685,477.5807 之間,具有四位小數的 fixed 精確度。
N/A Blank blank 是 DAX 中的數據類型,代表 and 取代 SQL Null。 您可以使用 BLANK 函式建立 blank,and 使用邏輯函式測試空白,ISBLANK。

表格式數據模型也包含 數據表 數據類型,做為許多 DAX 函式的輸入 or 輸出。 例如,FILTER 函式會接受數據表做為輸入,and 輸出另一個數據表,而該數據表只 contains 符合 filter 條件的數據列。 您可以藉由結合資料表函式與彙總函式,對以動態方式定義的資料集執行複雜計算。

雖然數據類型通常會自動設定,但請務必瞭解數據類型 and 它們的應用方式,特別是在 DAX 公式中。 例如,公式中的錯誤 or 非預期的結果,通常是因為使用無法與自變數中指定的數據類型搭配使用的特定運算符所造成。 例如,公式 = 1 & 2 會傳回字串結果 12。 不過,公式 = "1" + "2" 會傳回整數結果 3。

上下文

Context 是建立 DAX 公式時要瞭解的重要概念。 背景可讓您執行動態分析,因為公式結果的變更會反映在目前選取的列 or 單元格 and,及任何 related 資料。 了解內容 and 有效地使用內容對於建置高效能、動態分析、and 以針對公式中的問題進行疑難解答至關重要。

視其他設計項目而定,可以在不同內容中評估表格式模型中的公式:

  • 在數據透視表 or 報表中套用的 Filters
  • 在公式中定義的 Filters
  • 在公式內使用特殊函式所指定的關聯性

有不同類型的內容:資料列內容查詢內容、andfilter 內容

資料列內容

「資料列內容」可以視為「目前的資料列」。 If 您在計算欄位中建立公式時,該公式的資料列上下文包含當前資料列中來自 all 欄位的 values。 If 數據表 related 至另一個數據表,內容也會包含 all 從另一個數據表 related 至目前數據列的 values。

例如,假設您建立計算結果列 = [Freight] + [Tax],從同一個數據表的兩個數據行「貨運 and 稅」,將 values 加在一起。 此公式會自動從指定數據行中的目前數據列取得 values。

資料列上下文也會遵循數據表之間定義的所有關聯,包括使用 DAX 公式在計算欄中定義的關聯,以判斷 related 表格中哪些資料列與當前資料列相關聯。

例如,下列公式會使用 RELATED 函式,根據訂單寄送到的區域,從 related 數據表擷取稅務 value。 稅 value 是透過使用目前數據表中的區域 value,然後在 related 表中查找該區域,and 最後從 related 表中取得該區域的稅務 rate 來確定的。

DAX
= [Freight] + RELATED('Region'[TaxRate])  

此公式會從 Region 數據表取得目前區域的稅務 rate,and 將它新增至 Freight 數據行的 value。 在 DAX 公式中,您 not 必須知道 or 指定連接數據表的特定關聯性。

多個資料列內容

DAX 包含可在表格中重複進行計算的函式。 這些函式可以具有多個目前的資料列,每個都有自己的資料列內容。 基本上,這些函式可讓您建立公式,以遞歸方式在內部 and 外部迴圈上執行作業。

例如,假設您的模型 containsProducts 數據表,andSales 數據表。 使用者可能會想要流覽整個銷售數據表,其中包含涉及多個產品的交易,andfind 任何交易中每個 product 訂購的最大數量。

透過 DAX,您可以建置傳回正確 value的單一公式,and 使用者將數據新增至數據表的任何 time 自動更新結果。

DAX
= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])  

如需此公式的詳細範例,請參閱 EARLIER

若要 summarize,EARLIER 函式會儲存來自當前作業之前的操作的列上下文。 all 次,函式會儲存在記憶體中兩組內容:一組內容代表公式內部迴圈的目前數據列,and 另一組內容代表公式外部迴圈的目前數據列。 DAX 會在兩個循環之間自動饋送 values,讓您可以建立複雜的匯總。

查詢內容

「查詢內容」代表針對公式隱含擷取的資料子集。 例如,當使用者將 measureor 字段放入報表時,引擎會檢查 and 欄標頭、切片器、and 報表中的 filters,以判斷上下文。 然後,針對模型數據執行必要的查詢以取得正確的數據子集、進行公式定義的計算,and 然後在報表中填入 values。

因為內容會根據您放置公式的位置而變更,所以公式的結果也會變更。 例如,假設您建立一個公式,將 銷售 資料表的 利潤 欄中的 values 加總:= SUM('Sales'[Profit])。 If 您在 Sales 表格中的計算的欄中使用此公式,則整個表格的公式結果會相同,因為公式的查詢上下文永遠是 Sales 表格的整個數據集。 結果將會為 all 地區、all 產品、all 年份,and 等等帶來利潤。

不過,使用者通常不想看到相同的結果數百次,而是希望獲得特定 year的利潤,特定國家,特定 product,or 或這些的某些組合,and 然後得到總計。

在報表中,內容會藉由篩選、新增 or 移除欄位,and 使用交叉分析篩選器來變更。 針對每個變更,會評估 measure 所處的查詢環境。 因此,在 measure中使用的相同公式會針對每個數據格中的不同 查詢內容進行評估

Filter 上下文

Filter 內容 是每個數據行中允許的一組 values,or 從 related 數據表擷取的 values。 Filters 可以套用至設計工具中的數據行,or 呈現層中(報表 and 數據透視表)。 Filters 也可以透過公式內的 filter 表示式來明確定義。

當您透過使用公式的參數,對列 or 表中的允許 values 設定 filter 約束時,就會新增 Filter 情境。 Filter 內容會套用至其他內容,例如數據列內容 or 查詢內容。

在表格式模型中,有許多方式可以建立 filter 脈絡。 在可取用模型之用戶端的內容中,例如 Power BI 報表,用戶可以在數據列 and 數據行標題上新增交叉分析篩選器 or 報表 filters,以即時建立 filters。 您也可以直接在公式內指定 filter 表示式,以指定 relatedvalues,並指定用作輸入的 filter 資料表,or 動態地獲取計算中使用的 values 的內容。 您也可以完全清除 or,或者選擇性地清除特定列上的 filters。 建立 calculate 總計的公式時,這非常有用。

若要深入瞭解如何在公式中建立 filters,請參閱 FILTER 函式 (DAX)
如需如何清除 filters 以建立總計的範例,請參閱 ALL 函式 (DAX)

要了解如何在公式中選擇性地清除 and 並套用 filters 的範例,請參閱 ALLEXCEPT

判斷公式中的內容

當您建立 DAX 公式時,公式會 first 針對有效的語法進行測試,and 然後進行測試,以確保可以在目前內容中找到公式中包含的數據行名稱 and 數據表。 If 找不到公式所指定的任何數據行 or 數據表,就會傳回 error。

驗證過程中的上下文(and 重新計算作業)如上節所述進行確定,使用模型中的可用表格,表格之間的任何關係,以及任何已套用的 andfilters。

例如,if 您剛將一些數據匯入新數據表,and 它 notrelated 至任何其他數據表(andnot 您已套用任何 filtersand),目前的內容 是數據表中的整組數據行。 If 數據表透過關係與其他數據表連結,目前的上下文包含 related 數據表。 If 您將數據表中的數據列加入到包含篩選器的報表中 and 可能某些報表 filters,在每個報表數據格中的公式內容是數據的子集。

內容是一種有力的概念,但也很難針對公式進行疑難排解。 建議您從簡單的公式 and 關聯性開始,以查看情境的運作方式。 下節提供一些範例來說明公式如何使用不同類型的內容以動態方式傳回結果。

操作員

DAX 語言在公式中使用四種不同類型的計算運算子:

  • 比較運算子用來比較 valuesand,傳回邏輯 TRUE`FALSE` value。
  • 算術運算符來執行算術計算,以傳回數值 values。
  • 要聯結兩個 or 更多文字字串的文字串連運算元。
  • 結合兩個 or 更多表達式以傳回單一結果的邏輯運算符。

如需 DAX 公式中使用的運算子詳細資訊,請參閱 DAX 運算子

使用數據表 and 數據行

表格式數據模型中的數據表看起來像 Excel 數據表,但在處理數據和公式的方式上有所不同,尤其在數據 and 的情況下。

  • 公式只適用於數據表 and 數據行,not 個別儲存格、range 參考、or 陣列。
  • 公式可以使用關聯性從 related 數據表取得 values。 擷取的 values 總是 related 到目前的資料列 value。
  • 您無法擁有像在 Excel 工作表中那樣的 or「不規則」數據。 資料表中每個資料列都必須包含相同數目的資料行。 不過,在某些欄中,可以有空白 values。 and Excel 數據表格與 not 表格式模型數據表可互換。
  • 因為針對每個數據行設定數據類型,因此該數據行中的每個 value 都必須是相同的類型。

在公式中引用數據表 and 數據列

您可以使用其名稱來參考任何資料表 and 資料行。 例如,下列公式說明如何使用「完整」名稱,從兩個資料表中參考資料行:

DAX

= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])  

在評估公式時,模型設計工具 first 檢查一般語法,and 然後檢查您提供的欄位和 and 表格名稱與當前內容中可能存在的欄位和 and 表格進行比對。 If 名稱模棱兩可 orif,找不到欄 or 表,您將會在公式中遇到 error(在發生 error 的儲存格中,您會得到 #ERROR 字串而非數據 value)。 若要深入瞭解資料表、資料行、and 其他物件的命名需求,請參閱 DAX 語法中的命名需求

資料表關聯性

藉由建立數據表之間的關聯性,您可以將其他數據表中的 related和values 用於計算。 例如,您可以使用匯出數據行來判斷 all 目前轉銷商 related 的出貨記錄,and 然後 sum 每個轉銷商的出貨成本。 不過,在許多情況下,可能需要關聯性 not。 您可以在公式中使用 LOOKUPVALUE 函式,針對符合 search_columnandsearch_value 參數所指定準則的列,從 result_columnName 中傳回 value。

許多 DAX 函式都需要數據表之間存在關聯性,or 多個數據表之間,才能找出您已參考的數據行,and 傳回有意義的結果。 其他函式將會嘗試識別關聯性;不過,為了獲得最佳結果,您應該一律盡可能建立關聯性。 表格式資料模型支援資料表之間的多個關聯性。 為了避免混淆 or 不正確結果,time 只有一個關聯性被指定為啟用的關聯性,但您可以視需要變更啟用的關聯性,以在計算中瀏覽數據中的不同連線。 USERELATIONSHIP 函式可用來指定一個 or 多個關聯性,以用於特定計算。

使用關聯性時,請務必觀察這些公式設計規則:

  • 當數據表透過關聯關係連接時,您必須確保兩個作為索引鍵使用的數據列 values 相符。 not 強制執行參照完整性,因此即使在索引鍵欄位 values 中不匹配的 and,仍然可能會建立關聯。 If 發生這種情況時,您應該注意 blankvaluesor 不相符 values 可能會影響公式的結果。

  • 當您使用關聯性連結模型中的數據表時,您可以放大範圍,or內容,在其中評估公式。 新增數據表、新關聯性、or 作用中關聯性變更所造成的內容變更,可能會導致結果以您可能 not 預期的方式變更。 若要深入了解,請參閱本文中的內容

程序 and 重新整理

進程and重新計算 是兩個獨立但 related 的操作。 設計 contains 複雜公式、大量數據、or 從外部數據源取得的數據時,您應該徹底瞭解這些概念。

「處理 (重新整理)」會使用外部資料來源的新資料來更新模型中資料。

重新計算 是更新公式結果的程式,以反映公式本身的任何變更,and 反映基礎數據中的變更。 重新計算會以下列方式影響效能:

  • 計算欄中的 values 已計算,並且 and 儲存在模型中。 若要更新匯出資料行中的 values,您必須使用下列三個處理命令之一來處理模型:處理完整、處理數據 or 處理重新計算。 每當變更公式時,公式的結果必須一律針對整個資料行重新計算。

  • 每當使用者將 measure 新增至數據透視表時,就會動態評估量值所計算的 values,or 開啟報表;當使用者修改內容時,values 由 measure 變更傳回。 measure 的結果總是會反映記憶體快取中的最新結果。

除非重新計算的結果傳回不同的 value,否則處理 and 重新計算在數據列層級安全性公式上沒有任何 effect,因此讓數據列可查詢 ornot 角色成員可查詢。

更新

DAX 正在持續改進。 新的 and 更新功能 會隨著 next 可用的更新發行,通常是每月。 服務會更新 first,後面接著已安裝的應用程式,例如 Power BI Desktop、Excel、SQL Server Management Studio (SSMS),and Visual Studio 的 Analysis Services 專案延伸模組 (SSDT)。 SQL Server Analysis Services 已使用 next 累積更新進行更新。 新函式 firstandDAX 函式參考與 Power BI Desktop 更新相吻合所述。

SQL Server Analysis Services and Excel earlier 版本中支援 Notall 函式。

疑難排解

If 您在定義公式時取得 error,公式可能包含 語法 error語意 error、or計算 error

語意錯誤是最容易解決的。 它們通常牽涉到遺漏的括號 or 逗號。

語法正確時,會發生其他類型的 error,但參考的數據行 valueor 在公式的內容中 not 有意義。 這類語意 and 計算錯誤可能是下列任一問題所造成:

  • 公式是指不存在的數據列、數據表、or 函式。
  • 公式看起來正確,但當數據引擎擷取數據時,它會發現類型不匹配,and 會導致 error。
  • 公式會將不正確的數位 or 自變數類型傳遞給函式。
  • 公式指的是一個不同欄位,其中包含 error和 and,因此其 values 是無效的。
  • 公式指的是一個已處理的 not 資料欄,這表示它具有元數據,但沒有可用於計算的實際數據。

在 first 四個案例中,DAX 會標記 contains 無效公式的整個欄。 在 last 的情況下,DAX 將欄變為灰色,以表示該欄處於未處理狀態。

應用程式 and 工具

Power BI Desktop

Power BI Desktop

Power BI Desktop 是免費數據模型化 and 報表應用程式。 模型設計工具包含用於建立 DAX 計算公式的 DAX 編輯器。

Power Pivot 在 Excel 中

Excel Power Pivot

Excel 模型設計工具中的 Pivot 包含用於建立 計算公式的 編輯器。

Visual Studio

Visual Studio

Visual Studio (具備 Analysis Services 專案延伸模組 (VSIX)) 會用來建立 Analysis Services 模型專案。 與專案擴充模組一起安裝的表格模型設計器包含 DAX 編輯器。

SQL Server Management Studio

SQL Server Management Studio

SQL Server Management Studio (SSMS) 是使用 Analysis Services 的基本工具。 SSMS 包含 DAX 查詢編輯器,用於查詢表格式 and 多維度模型。

DAX Studio

DAX Studio 圖示

DAX Studio 是一種開放原始碼用戶端工具,可用來針對 Excel 模型中的 Analysis Services、Power BI Desktop andPower Pivot and 建立執行 DAX 查詢。

Tabular Editor

Tabular Editor 圖示

表格式編輯器是一個開放原始碼工具,可提供表格式模型中繼資料中每個物件的直覺、階層式檢視。 表格式編輯器包含具有語法醒目提示的 DAX 編輯器,可讓您輕鬆編輯量值、匯出數據行 and 匯出數據表運算式。

學習資源

學習 DAX時,最好使用您將用來建立數據模型的應用程式。 Analysis Services Power BI Desktop andPower Excel 中的 Pivot all 有文章 and 教學課程,包括使用 DAX建立量值、計算結果欄、and 數據列filters 課程。 以下是一些額外資源:

Videos

在 Power BI Desktop 學習 path中使用 DAX。

阿爾貝托·法拉利 馬可·魯索(Microsoft出版社) 最終指南。 Now 在其 second 版本中,本廣泛的指南為開始數據模型 and BI 專業人員提供創新高效能技術的基本概念。

The Definitive Guide to DAX book image 書籍圖像的明確指南

社群

DAX 有一個充滿活力的社區,總是願意分享他們的專業知識。 Microsoft Power BI 社群 設有一個專門討論 DAXDAX 命令 and 技巧的特殊論壇。