第2章 DAX簡(jiǎn)介
2.1 理解DAX計(jì)算
2.2了解計(jì)算列和度量值
2.3 變量入門
2.4 表達(dá)式中的錯(cuò)誤處理
2.5 格式化DAX代碼
2.6 聚合函數(shù)和迭代函數(shù)
2.7 使用常見的DAX函數(shù)
使用常見的DAX函數(shù)
既然您已經(jīng)了解了DAX的基礎(chǔ)知識(shí)以及如何處理錯(cuò)誤情況,下面將簡(jiǎn)要介紹DAX的最常用函數(shù)和表達(dá)式。
聚合函數(shù)
前面部分,我們介紹了基本聚合函數(shù),例如SUM,AVERAGE,MIN和MAX,了解到SUM和AVERAGE僅適用于數(shù)字列。
DAX還為從Excel繼承的聚合函數(shù)提供了另一種語法,該語法將后綴A添加到函數(shù)的名稱中,僅僅為了獲得與Excel相同的名稱和行為。這些函數(shù)僅對(duì)包含布爾值的列有用,TRUE為1,將FALSE為0。文本列始終被視為0,因此,無論列內(nèi)容如何,??如果對(duì)文本列使用MAXA函數(shù),結(jié)果將始終為0。
此外,DAX在執(zhí)行聚合時(shí)從不考慮空單元格。盡管這些函數(shù)可以在非數(shù)字列上使用而不會(huì)出現(xiàn)錯(cuò)誤,但是它們的結(jié)果沒有用,因?yàn)椴粫?huì)自動(dòng)將文本列轉(zhuǎn)換為數(shù)字。這些函數(shù)分別命名為AVERAGEA,COUNTA,MINA和MAXA。我們建議您不要使用這些函數(shù),為了與可能依賴當(dāng)前性能的現(xiàn)有代碼兼容,這些函數(shù)的性能將來也不會(huì)改變。
注意
盡管名稱與統(tǒng)計(jì)函數(shù)相同,但是它們?cè)贒AX和Excel中的用法有所不同,因?yàn)樵贒AX中,列具有數(shù)據(jù)類型,并且其數(shù)據(jù)類型確定聚合函數(shù)的行為。Excel為每個(gè)單元格處理不同的數(shù)據(jù)類型,而DAX為整個(gè)列處理單個(gè)數(shù)據(jù)類型。DAX以表格形式處理每列具有明確定義類型的數(shù)據(jù),而Excel公式可在沒有明確定義類型的異構(gòu)單元格值上工作。如果Power BI中的列具有數(shù)字?jǐn)?shù)據(jù)類型,則所有值只能是數(shù)字或空單元格。如果列是文本類型,則對(duì)于這些函數(shù),即使文本可以轉(zhuǎn)換為數(shù)字,列始終為O(COUNTA除外)),而在Excel中,該值也被視為逐個(gè)單元格的數(shù)字。由于這些原因,這些函數(shù)對(duì)于“文本”列不是很有用。只有MIN和MAX也支持DAX中的文本值。
您先前學(xué)習(xí)的對(duì)值進(jìn)行聚合的函數(shù)很有用。有時(shí),您可能對(duì)聚合值不感興趣,而只是要進(jìn)行計(jì)數(shù)。DAX提供了一組對(duì)計(jì)數(shù)行或值有用的函數(shù):
- COUNT除* Boolean 外, COUNT可以*對(duì)任何數(shù)據(jù)類型進(jìn)行操作。
- *COUNTA *可在任何類型的列上運(yùn)行。
- *COUNTBLANK *返回一列中的空單元格(空白或空字符串)的數(shù)量。
- *COUNTROWS *返回表中的行數(shù)。
- *DISTINCTCOUNT *返回一列的不同值的數(shù)量,如果存在則包括空白值。
- *DISTINCTCOUNTNOBLANK *返回一列的不同值的數(shù)量,不包括空白值。
COUNT 和 COUNTA 在DAX中幾乎是相同的函數(shù)。它們返回不為空的列值的數(shù)量,而不管其數(shù)據(jù)類型如何。它們從Excel繼承,其中 COUNTA 接受任何數(shù)據(jù)類型,包括字符串,而 COUNT 僅接受數(shù)字列。如果我們要計(jì)算包含空值的列中的所有值,則可以使用 COUNTBLANK 函數(shù)??崭窈涂罩当籆OUNTBLANK視為空值。最后,如果我們要計(jì)算表的行數(shù),則可以使用COUNTROWS函數(shù)。請(qǐng)注意,COUNTROWS需要表作為參數(shù),而不是列。
注意
DISTINCTCOUNT是DAX的2O12版本中引入的函數(shù)。DAX的早期版本不包含DISTINCTCOUNT。要計(jì)算列中不重復(fù)值的數(shù)量,我們必須使用COUNTROWS(DISTINCT(table [column]))。盡管DISTINCTCOUNT更易于閱讀,且只需要一個(gè)函數(shù)調(diào)用,這兩種模式返回相同的結(jié)果。DISTINCTCOUNTNOBLANK是 2O19中引入的函數(shù),它提供與SQL中COUNT DISTINCT操作相同的語義,而無需在DAX中編寫更長(zhǎng)的表達(dá)式。
最后兩個(gè)函數(shù)DISTINCTCOUNT和DISTINCTCOUNTNOBLANK很有用,因?yàn)樗鼈兺耆凑掌涿Q的含義進(jìn)行操作:計(jì)算列的唯一值,該列將其作為唯一參數(shù)。DISTINCTCOUNT將BLANK值視為可能的值之一,而DISTINCTCOUNTNOBLANK則忽略BLANK值。
邏輯函數(shù)
有時(shí)我們想在表達(dá)式中建立邏輯條件---例如,根據(jù)某列的值來選擇執(zhí)行不同的計(jì)算或攔截錯(cuò)誤。對(duì)此,我們可以使用DAX中的邏輯函數(shù)。前面標(biāo)題為“處理DAX表達(dá)式中的錯(cuò)誤”的章節(jié)闡述了該組的兩個(gè)最重要的函數(shù):IF和IFERROR。本章前面的“條件語句”部分闡述了IF函數(shù)。
邏輯函數(shù)非常簡(jiǎn)單,作用如同其名字,它們是AND,FALSE,IF,IFERROR,NOT,TRUE和OR。例如,如果僅當(dāng)Price列包含數(shù)字值時(shí)才將數(shù)量乘以價(jià)格作為金額,則可以使用以下模式:
Sales[Amount] = IFERROR ( Sales[Quantity] * Sales[Price], BLANK ( ) )
如果我們不使用IFERROR,并且如果Price列包含無效數(shù)字,則計(jì)算列的結(jié)果將是錯(cuò)誤,因?yàn)槿绻麊涡猩捎?jì)算錯(cuò)誤,則該錯(cuò)誤會(huì)傳播到整個(gè)列。但是,使用IFERROR可以截獲錯(cuò)誤并將其替換為空白值。
該類別中另一個(gè)有趣的函數(shù)是SWITCH,當(dāng)列中包含少量不重復(fù)值時(shí),該函數(shù)非常有用,我們希望根據(jù)其值獲得不同的行為。例如,列Size在Product表中包含S,M,L,XL,我們可能要在另列對(duì)其進(jìn)行更明確描述。我們可以使用嵌套的IF調(diào)用獲得結(jié)果:
'Product'[SizeDesc] =
IF (
'Product'[Size] = "S",
"Small",
IF (
'Product'[Size] = "M",
"Medium",
IF (
'Product'[Size] = "L",
"Large",
IF (
'Product'[Size] = "XL",
"Extra Large",
"Other"
)
)
)
)
以下使用更方便的方法來表達(dá)相同的公式,用*SWITCH *,是這樣的:
'Product'[SizeDesc] =
SWITCH (
'Product'[Size],
"S", "Small",
"M", "Medium",
"L", "Large",
"XL", "Extra Large",
"Other"
)
后一個(gè)表達(dá)式中的代碼更具可讀性,但不是更快,因?yàn)閮?nèi)部DAX將SWITCH語句轉(zhuǎn)換為一組嵌套的IF函數(shù)。
注意
SWITCH通常用于檢查參數(shù)值和定義度量值的結(jié)果。例如,可以創(chuàng)建一個(gè)包含三行的YTD,MTD,QTD的參數(shù)表,然后讓用戶從三個(gè)可用的聚合中選擇要在度量中使用的聚合。這是2019年之前的常見情況。現(xiàn)在由于有了第9章中介紹的計(jì)算組,因此不再需要它。計(jì)算組是計(jì)算用戶可以參數(shù)化計(jì)算值的首選方式。
提示
這是一種使用SWITCH函數(shù)檢查同一表達(dá)式中多個(gè)條件的有趣方法。由于SWITCH轉(zhuǎn)換為一組嵌套的IF函數(shù),因此第一個(gè)與之匹配的函數(shù)將獲勝,您可以使用此模式測(cè)試多個(gè)條件。SWITCH ( TRUE (), Product[Size] = "XL" && Product[Color] = "Red", "Red and XL", Product[Size] = "XL" && Product[Color] = "Blue", "Blue and XL", Product[Size] = "L" && Product[Color] = "Green", "Green and L" )使用TRUE作為第一個(gè)參數(shù)表示:"條件評(píng)估為TRUE時(shí)將第一個(gè)結(jié)果返回"。
信息函數(shù)
當(dāng)需要分析表達(dá)式的類型時(shí),可以使用一個(gè)信息函數(shù)。所有這些函數(shù)都返回一個(gè)布爾值,并且可以在任何邏輯表達(dá)式中使用。它們是ISBLANK,ISERROR,ISLOGICAL,ISNONTEXT,ISNUMBER和ISTEXT。
重要的是要注意,當(dāng)將列作為參數(shù)而不是表達(dá)式傳遞時(shí),函數(shù)ISNUMBER,ISTEXT 和 ISNONTEXT 始終返回 TRUE 或 FALSE,這取決于列的數(shù)據(jù)類型以及單元格是否為空。這使得這些函數(shù)在DAX中幾乎毫無用處。DAX第一版已從Excel中繼承這些函數(shù)。
您可能想知道可不可以在文本列中使用ISNUMBER來檢查該列是否可以轉(zhuǎn)換為數(shù)字。不幸的是,這種方法是不可以的。如果要測(cè)試文本值是否可以轉(zhuǎn)換為數(shù)字,則必須嘗試進(jìn)行轉(zhuǎn)換,如果轉(zhuǎn)換失敗,則應(yīng)處理錯(cuò)誤。例如,要測(cè)試Price列(類型為string)是否包含有效數(shù)字,必須輸入
Sales[IsPriceCorrect] = NOT ISERROR ( VALUE ( Sales[Price] ) )
DAX嘗試將字符串值轉(zhuǎn)換為數(shù)字。如果成功,則返回TRUE(因?yàn)?em>ISERROR返回FALSE)。否則,它返回FALSE(因?yàn)?em>ISERROR返回TRUE)。例如,如果某些行的價(jià)格字符串值為" N / A",則轉(zhuǎn)換失敗。
但是,如果我們嘗試使用ISNUMBER,如以下表達(dá)式所示,則結(jié)果始終為FALSE:
Sales[IsPriceCorrect] = ISNUMBER ( Sales[Price] )
在這種情況下,ISNUMBER始終返回FALSE,因?yàn)榛谀P椭械亩x,Price列不是數(shù)字,而是字符串,而與每一行的內(nèi)容無關(guān)。
數(shù)學(xué)函數(shù)
DAX中可用的數(shù)學(xué)函數(shù)集與Excel中可用的函數(shù)集相似,具有相同的語法和行為。
常用的數(shù)學(xué)函數(shù)是ABS,EXP,FACT,LN,LOG,LOG10,MOD,PI,POWER,QUOTIENT,SIGN,和SQRT。隨機(jī)函數(shù)是RAND和RANDBETWEEN。通過使用EVEN和ODD,您可以測(cè)試數(shù)字。GCD和LCM可用于計(jì)算兩個(gè)數(shù)字的最大公約數(shù)和最小公倍數(shù)。QUOTIENT返回兩個(gè)數(shù)字的整數(shù)除商。
最后,是關(guān)于幾個(gè)舍入函數(shù)的示例。實(shí)際上,可以使用幾種方法來獲得相同的結(jié)果。圖2-8列出了一些計(jì)算列及計(jì)算結(jié)果:
FLOOR = FLOOR ( Tests[Value], 0.01 )
TRUNC = TRUNC ( Tests[Value], 2 )
ROUNDDOWN = ROUNDDOWN ( Tests[Value], 2 )
MROUND = MROUND ( Tests[Value], 0.01 )
ROUND = ROUND ( Tests[Value], 2 )
CEILING = CEILING ( Tests[Value], 0.01 )
ISO.CEILING = ISO.CEILING ( Tests[Value], 0.01 )
ROUNDUP = ROUNDUP ( Tests[Value], 2 )
INT = INT ( Tests[Value] )
FIXED = FIXED ( Tests[Value], 2, TRUE )

*FLOOR , TRUNC 和 ROUNDDOWN 相似,不同之處在于我們可以指定要舍入的位數(shù)。在相反的方向上, CEILING 和 ROUNDUP 的結(jié)果相似。您會(huì)發(fā)現(xiàn) MROUND 和 ROUND *函數(shù)之間的舍入方式存在一些差異。
三角函數(shù)
DAX提供了一組豐富的三角函數(shù):COS,COSH,COT,COTH,SIN,SINH,TAN和TANH。給這些函數(shù)加前綴A即成為該函數(shù)的反函數(shù)(arcsine,arccosine等)。由于它們的用法很簡(jiǎn)單,因此我們不贅述。
DEGREES 和 RADIANS分別執(zhí)行度和弧度的轉(zhuǎn)換,* SQRTPI *將其參數(shù)乘以pi后計(jì)算平方根。
文本函數(shù)
DAX中可用的大多數(shù)文本函數(shù)與Excel中可用的文本函數(shù)相似,只有少數(shù)例外。文本函數(shù)為CONCATENATE,CONCATENATEX,EXACT,FIND,FIXED,FORMAT,LEFT,LEN,LOWER,MID,REPLACE,REPT,RIGHT,SEARCH,SUBSTITUTE,TRIM,UPPER和*VALUE *這些函數(shù)對(duì)于處理文本和從包含多個(gè)值的字符串中提取數(shù)據(jù)很有用。例如,圖2-9 顯示了一個(gè)示例示例,該示例從以逗號(hào)分隔的字符串中提取名字和姓氏,去掉中間的稱呼。

為了獲得結(jié)果,先計(jì)算兩個(gè)逗號(hào)的位置。然后,我們使用這些數(shù)字提取文本的右側(cè)部分。該SimpleConversion執(zhí)行計(jì)算公式,如果字符串中少于兩個(gè)逗號(hào)可能返回不正確的值,如果根本沒有逗號(hào)就會(huì)報(bào)錯(cuò)。FirstLastName執(zhí)行一個(gè)更復(fù)雜的表達(dá)式,缺少逗號(hào)的情況下也不會(huì)失敗。
People[Comma1] = IFERROR ( FIND ( ",", People[Name] ), BLANK ( ) )
People[Comma2] = IFERROR ( FIND ( " ,", People[Name], People[Comma1] + 1 ), BLANK ( ) )
People[SimpleConversion] =
MID ( People[Name], People[Comma2] + 1, LEN ( People[Name] ) )
& " "
& LEFT ( People[Name], People[Comma1] - 1 )
People[FirstLastName] =
TRIM (
MID (
People[Name],
IF ( ISNUMBER ( People[Comma2] ), People[Comma2], People[Comma1] ) + 1,
LEN ( People[Name] )
)
)
& IF (
ISNUMBER ( People[Comma1] ),
" " & LEFT ( People[Name], People[Comma1] - 1 ),
""
)
如您所見,FirstLastName列是由一個(gè)很長(zhǎng)DAX表達(dá)式定義的,必須使用它來避免可能的錯(cuò)誤,因?yàn)榧词箚蝹€(gè)值產(chǎn)生錯(cuò)誤,該錯(cuò)誤也會(huì)傳播到整個(gè)列。
轉(zhuǎn)換函數(shù)
您之前了解到,DAX會(huì)執(zhí)行數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換來滿足操作符的要求。盡管轉(zhuǎn)換自動(dòng)進(jìn)行的,但是仍然可以通過一組函數(shù)執(zhí)行顯式的數(shù)據(jù)類型轉(zhuǎn)換。
CURRENCY可以將表達(dá)式轉(zhuǎn)換為Currency類型,而INT則將表達(dá)式轉(zhuǎn)換為Integer。DATE和TIME將日期和時(shí)間部分作為參數(shù),并返回正確的DateTime。VALUE將字符串轉(zhuǎn)換為數(shù)字格式,而FORMAT將數(shù)字值作為其第一個(gè)參數(shù),并將字符串格式作為其第二個(gè)參數(shù),并且可以將數(shù)字值轉(zhuǎn)換為字符串。FORMAT通常與DateTime一起使用。例如,以下表達(dá)式返回"2019 Jan 12":
= FORMAT ( DATE ( 2019, 01, 12 ), "yyyy mmm dd" )
使用DATEVALUE函數(shù)執(zhí)行相反的操作,即將字符串轉(zhuǎn)換為DateTime值。
DATEVALUE與不同格式的日期
DATEVALUE顯示不同格式日期的特殊性。在歐洲標(biāo)準(zhǔn)中,日期以" dd / mm / yy"格式書寫,而美國(guó)人更喜歡使用" mm / dd / yy"格式。例如,2月28日在兩種文化中具有不同的字符串表示形式。如果您向DATEVALUE提供不能使用默認(rèn)區(qū)域設(shè)置進(jìn)行轉(zhuǎn)換的日期,不是立即引發(fā)錯(cuò)誤,它會(huì)嘗試第二次轉(zhuǎn)換月份和日期。DATEVALUE支持明確的格式" yyyy-mm-dd"。例如,無論您使用哪種區(qū)域設(shè)置,以下三個(gè)表達(dá)式的計(jì)算結(jié)果均為2月28日。DATEVALUE ( "28/02/2018" ) -- This is February 28 in European format DATEVALUE ( "02/28/2018" ) -- This is February 28 in American format DATEVALUE ( "2018-02-28" ) -- This is February 28 (format is not ambiguous)有時(shí),DATEVALUE在預(yù)期它會(huì)發(fā)生錯(cuò)誤的時(shí)候卻不發(fā)生錯(cuò)誤。這是設(shè)計(jì)使然。
日期和時(shí)間函數(shù)
在幾乎每種類型的數(shù)據(jù)分析中,處理時(shí)間和日期都是工作的重要部分。許多DAX函數(shù)都按日期和時(shí)間運(yùn)行。其中一些對(duì)應(yīng)于Excel中的類似函數(shù),并且可以簡(jiǎn)單地與DateTime數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換。日期和時(shí)間函數(shù)DATE,DATEVALUE,DAY,EDATE,EOMONTH,HOUR,MINUTE,MONTH,NOW,SECOND,TIME,TIMEVALUE,TODAY,WEEKDAY,WEEKNUM,YEAR和YEARFRAC。
這些函數(shù)對(duì)于基于日期計(jì)算值很有用,但是不用于執(zhí)行典型的時(shí)間智能計(jì)算,例如,按年比較匯總值或計(jì)算度量值的年初至今值。要執(zhí)行時(shí)間智能計(jì)算,可以使用另一組時(shí)間智能函數(shù),我們將在第8 章“時(shí)間智能計(jì)算”中進(jìn)行介紹。
如本章前述,DateTime數(shù)據(jù)類型在內(nèi)部使用浮點(diǎn)數(shù),其中整數(shù)部分對(duì)應(yīng)于1899年12月30日之后的天數(shù),而小數(shù)部分則表示日期中多出的時(shí)間部分,小時(shí)、分鐘和秒將轉(zhuǎn)換為小數(shù)部分。因此,將整數(shù)加到*DateTime *值將會(huì)值增加相應(yīng)的天數(shù)。你會(huì)發(fā)現(xiàn)使用轉(zhuǎn)換函數(shù)從日期中提取日期、月份和年份會(huì)更方便。
'Date'[Day] = DAY ( Calendar[Date] )
'Date'[Month] = FORMAT ( Calendar[Date], "mmmm" )
'Date'[MonthNumber] = MONTH ( Calendar[Date] )
'Date'[Year] = YEAR ( Calendar[Date] )

關(guān)系函數(shù)
可用于在DAX公式內(nèi)的關(guān)系之間導(dǎo)航的兩個(gè)有用函數(shù)是RELATED和RELATEDTABLE。
您已經(jīng)知道,計(jì)算列可以引用定義它的表的列值。因此,在Sales表中定義的計(jì)算列可以引用Sales表的任何列。但是,如果必須引用另一張表中的列怎么辦?通常,除非模型在兩個(gè)表之間定義了關(guān)系,否則不能使用其他表中的列。如果這兩個(gè)表共享一個(gè)關(guān)系,您可以使用RELATED函數(shù)來訪問關(guān)聯(lián)表中的列。
例如,要計(jì)算Sales表中的計(jì)算列,以檢查已售出的產(chǎn)品是否屬于"手機(jī)"類別,如果是,將折減系數(shù)應(yīng)用于標(biāo)準(zhǔn)成本。要計(jì)算此列,必須使用一個(gè)條件來檢查產(chǎn)品類別的值,該值不在Sales表中。但是,關(guān)系鏈從Sales開始,通過Product和Product Subcategory達(dá)到*Product Category *如圖2-11 所示:

無論從原始表到相關(guān)表需要多少步驟,DAX都會(huì)遵循完整的關(guān)系鏈,并返回相關(guān)的列值。因此,AdjustedCost列的公式如下所示:
Sales[AdjustedCost] =
IF (
RELATED ( 'Product Category'[Category] ) = "Cell Phone",
Sales[Unit Cost] * 0.95,
Sales[Unit Cost]
)
在一對(duì)多關(guān)系中,RELATED可以從多側(cè)訪問一側(cè),因?yàn)樵谶@種情況下,相關(guān)表中僅存在一行(如果有)。如果不存在這樣的行,則RELATED返回BLANK。
如果表達(dá)式在關(guān)系的“一”側(cè),并且需要訪問“多”側(cè),則RELATED不會(huì)有幫助,因?yàn)榱硪粋?cè)可能有許多行可用于單個(gè)行。在這種情況下,我們可以使用RELATEDTABLE。RELATEDTABLE返回一個(gè)包含所有與當(dāng)前行相關(guān)的行的表。例如,如果我們想知道每個(gè)類別中有多少個(gè)產(chǎn)品,則可以使用以下公式在Product Category*中創(chuàng)建一列:
'Product Category'[NumOfProducts] = COUNTROWS ( RELATEDTABLE ( Product ) )
對(duì)于每個(gè)產(chǎn)品類別,此計(jì)算列顯示相關(guān)的產(chǎn)品數(shù)量,如圖2-12 所示

如上所示,RELATED,RELATEDTABLE可追循從“一”側(cè)開始朝著“多”側(cè)的關(guān)系鏈。RELATEDTABLE通常與迭代函數(shù)結(jié)合使用。例如,如果要計(jì)算每個(gè)類別的數(shù)量總和乘以凈價(jià),則可以編寫一個(gè)新的計(jì)算列,如下所示:
'Product Category'[CategorySales] =
SUMX (
RELATEDTABLE ( Sales ),
Sales[Quantity] * Sales[Net Price]
)
該計(jì)算列的結(jié)果如圖2-23所示:

由于該列是經(jīng)過計(jì)算的,因此結(jié)果將合并到表中,并且不會(huì)根據(jù)報(bào)告用戶的選擇而更改,就像將其寫入度量值一樣。
結(jié)論
在本章中,您學(xué)習(xí)了許多新函數(shù),并開始研究一些DAX代碼。您可能不會(huì)馬上記住所有函數(shù),但是使用的函數(shù)越多,對(duì)函數(shù)就會(huì)變得越熟悉。
您在本章中學(xué)到的更重要的主題是:
- 計(jì)算列是表中使用DAX表達(dá)式計(jì)算的列。計(jì)算列在數(shù)據(jù)刷新時(shí)計(jì)算,并且不會(huì)根據(jù)用戶選擇更改其值。
- 度量值DAX表達(dá)式定義的計(jì)算。度量值不是像計(jì)算列那樣在刷新時(shí)計(jì)算,而是在查詢時(shí)計(jì)算。因此,度量值取決于用戶在報(bào)告中的選擇。
- DAX表達(dá)式中的任何時(shí)間都可能發(fā)生錯(cuò)誤,最好事先檢測(cè)錯(cuò)誤狀況,而不是讓錯(cuò)誤發(fā)生并在事實(shí)發(fā)生后攔截它。
- 像SUM這樣的聚合函數(shù)對(duì)于聚合列很有用,而對(duì)于聚合表達(dá)式,則需要使用迭代函數(shù)。迭代函數(shù)通過掃描表并逐行評(píng)估表達(dá)式來工作。在迭代結(jié)束時(shí),迭代函數(shù)根據(jù)其語義聚合結(jié)果。
- 在下一章中,您繼續(xù)學(xué)習(xí)DAX中最重要的表函數(shù)。