【DAX圣經(jīng)】第二章:介紹DAX(3)

常見(jiàn)的DAX函數(shù)

現(xiàn)在您已經(jīng)了解了DAX的基本原理以及如何處理錯(cuò)誤條件,接下來(lái)是對(duì)DAX最常用的函數(shù)和表達(dá)式的簡(jiǎn)要介紹。

在本章的其余部分,您將看到一些最常用的DAX函數(shù),您可能會(huì)在自己的數(shù)據(jù)模型中使用這些函數(shù)。

聚合函數(shù)

幾乎每個(gè)數(shù)據(jù)模型都需要對(duì)聚合數(shù)據(jù)進(jìn)行操作。DAX提供了一組函數(shù),這些函數(shù)聚合了表格中列的值,并返回單個(gè)值。我們稱(chēng)這組函數(shù)集合函數(shù)。例如,下面的度量值計(jì)算銷(xiāo)售表Sales amount列中所有數(shù)字的總和

Sales := SUM ( Sales[SalesAmount] )

這個(gè)表達(dá)式(SUM)如果在一個(gè)計(jì)算列中使用的話(huà),就會(huì)聚集該表的所有行,但如果使用在度量值中,則只適用于在透視表中使用切片器、行、列和過(guò)濾條件的行。

聚合函數(shù)(SUM, AVERAGE, MIN, MAX, STDEV, and VAR)只在數(shù)字和日期類(lèi)型上運(yùn)行。

注意
MIN和MAX還有另一個(gè)功能:如果使用兩個(gè)參數(shù),它們將返回兩個(gè)參數(shù)的最小值或最大值。因此,MIN(1、2)將返回1和MAX(1、2)返回2。這個(gè)功能在2015年引入,當(dāng)您需要計(jì)算復(fù)雜表達(dá)式的最小值或最大值時(shí),它非常有用,因?yàn)樗苊庠贗F語(yǔ)句中多次寫(xiě)入相同的表達(dá)式。

與Excel類(lèi)似,DAX為這些函數(shù)提供了一種可選的語(yǔ)法,以便在可以同時(shí)包含數(shù)字和非數(shù)字值的列上進(jìn)行計(jì)算,比如文本列。該語(yǔ)法只是將后綴A添加到函數(shù)名中,只是為了獲得與Excel相同的名稱(chēng)和行為。然而,這些函數(shù)只對(duì)包含TRUE/FALSE的列有用,因?yàn)門(mén)RUE被評(píng)為1和FALSE為0。文本列總是被認(rèn)為是0。因此,無(wú)論列的內(nèi)容是什么,如果您使用,例如,在文本列上的MAXA,您總是會(huì)得到0作為結(jié)果。此外,DAX在執(zhí)行聚合時(shí)從不考慮空的單元格。

即使這些函數(shù)可以在非數(shù)值列上使用,而且不會(huì)返回錯(cuò)誤,它們的結(jié)果也沒(méi)有用,因?yàn)闆](méi)有自動(dòng)轉(zhuǎn)換為文本列的數(shù)字。這些函數(shù)被命名為AVERAGEA,COUNTA,MINA,MAXA。

注意
盡管統(tǒng)計(jì)函數(shù)的名稱(chēng)相同,但在DAX和Excel中使用的方式不同,因?yàn)樵贒AX中,列有一個(gè)類(lèi)型,它的類(lèi)型決定了聚合函數(shù)的行為。Excel為每個(gè)單元處理不同的數(shù)據(jù)類(lèi)型,而DAX則為每一列處理單個(gè)數(shù)據(jù)類(lèi)型。

DAX以表格形式處理數(shù)據(jù),為每一列提供定義統(tǒng)一的類(lèi)型,而Excel公式適用于異構(gòu)單元格值,沒(méi)有定義統(tǒng)一的類(lèi)型。如果Power Pivot中的一個(gè)列有一個(gè)數(shù)字?jǐn)?shù)據(jù)類(lèi)型,那么所有的值都只能是數(shù)字或空單元格。

如果一個(gè)列是文本類(lèi)型,那么這些函數(shù)的值總是為0(除了COUNTA),即使文本可以轉(zhuǎn)換成數(shù)字,而在Excel中,值被認(rèn)為是逐個(gè)單元上的數(shù)字。由于這些原因,這些DAX函數(shù)對(duì)文本列不是很有用

您以前學(xué)過(guò)的函數(shù)對(duì)于聚合函數(shù)值是很有用的。有時(shí),您對(duì)聚合值不感興趣,但只對(duì)計(jì)數(shù)感興趣。因此,DAX提供了一組函數(shù),這些函數(shù)對(duì)于計(jì)數(shù)行或值很有用。

  • COUNT只在數(shù)字列運(yùn)行

  • COUNTA可以在任意類(lèi)型列上運(yùn)行

  • COUNTBLANK返回一列中空單元格數(shù)量

  • COUNTROWS返回一個(gè)表中行的數(shù)量

  • DISTINCTCOUNT返回一列中不重復(fù)列的數(shù)量

COUNTA是以A為后綴函數(shù)組中唯一有趣的函數(shù),因?yàn)樗祷亓兄蟹强盏膯卧駭?shù)量,而且是在任何類(lèi)型的列上工作。如果你想計(jì)算一個(gè)包含空值的列中的所有值,你可以使用COUNTBLANK函數(shù)。最后,如果您想計(jì)算一個(gè)表的行數(shù),您可以使用COUNTROWS函數(shù)。請(qǐng)注意,COUNTROWS需要一張表作為參數(shù),而不是列

注意
對(duì)應(yīng)任意一張表中的列,counta(table[column])+countblank(table[column])總是等于countrows(table)

最后一個(gè)函數(shù) DISTINCTCOUNT,是一個(gè)非常有用的函數(shù),正如名稱(chēng)所暗示的那樣,統(tǒng)計(jì)參數(shù)列的不同值數(shù)量,DISTINCTCOUNT會(huì)統(tǒng)計(jì)BLANK(空值),并作為其中的一個(gè)可能值。

注意
在2012年的DAX版本中,DISTINCTCOUNT成為了一個(gè)函數(shù)。早期版本的DAX沒(méi)有包括DISTINCTCOUNT,為了計(jì)算一個(gè)列的不同值的數(shù)量,您必須使用COUNTROWS(DISTINCT(table[column]))。

這兩種模式返回的結(jié)果是相同的,但是DISTINCTCOUNT只需要一個(gè)函數(shù)調(diào)用,更容易閱讀。

到目前為止,您所學(xué)習(xí)的所有聚合函數(shù)都是在列上工作的(除了COUNTROWS,它在表上工作)。因此,它們只能聚合來(lái)自單個(gè)列的值。有聚合函數(shù)可以聚合一個(gè)表達(dá)式,而不是單個(gè)列。這組函數(shù)非常有用,特別是當(dāng)您想要使用不同的相關(guān)表的列進(jìn)行計(jì)算時(shí)。例如,如果一個(gè)銷(xiāo)售表包含所有的銷(xiāo)售事務(wù),并且一個(gè)相關(guān)的產(chǎn)品表包含關(guān)于產(chǎn)品的所有信息,包括它的成本,您可以通過(guò)用這個(gè)表達(dá)式定義一個(gè)度量值來(lái)計(jì)算銷(xiāo)售事務(wù)的總內(nèi)部成本

Cost := SUMX ( Sales, Sales[Quantity] * RELATED ( Product[StandardCost] ) )

該方法計(jì)算銷(xiāo)售表中每一行的數(shù)量(來(lái)自銷(xiāo)售表)和銷(xiāo)售產(chǎn)品的標(biāo)準(zhǔn)成本(來(lái)自相關(guān)產(chǎn)品表)。最后,它返回所有這些計(jì)算值的總和。

所有的聚合函數(shù)用X后綴結(jié)尾的行為如下:他們?cè)诿總€(gè)表的行(第一個(gè)參數(shù))計(jì)算一個(gè)表達(dá)式(第二個(gè)參數(shù)),并返回一個(gè)結(jié)果,最后通過(guò)與這些聚合函數(shù) (SUM, MIN, MAX or COUNT)一致的行為,將這些結(jié)果進(jìn)行聚合計(jì)算。

在第4章中,您將進(jìn)一步了解這種行為,為了正確理解他們的行為,我們將需要引入計(jì)算上下文的概念。可用的x后綴函數(shù)是 SUMX、AVERAGEX、PRODUCTX、COUNTX、COUNTAX, CONCATENATEX, MINX, and MAXX

還有一些迭代器沒(méi)有X后綴,比如FILTER和ADDCOLUMNS。所有這些都將在后面詳細(xì)解釋。

邏輯函數(shù)

有時(shí)您想要在表達(dá)式中構(gòu)建邏輯條件——例如,根據(jù)列的值或截獲錯(cuò)誤條件來(lái)實(shí)現(xiàn)不同的計(jì)算。在這些情況下,您可以使用DAX中的一個(gè)邏輯函數(shù)。您已經(jīng)在上一節(jié)中了解到,“處理DAX表達(dá)式中的錯(cuò)誤”,IF和IFERROR是該組函數(shù)中的兩個(gè)最重要的函數(shù)。

邏輯函數(shù)非常簡(jiǎn)單,按照它們的名字所暗示的,它們是 AND, FALSE, IF, IFERROR, NOT, TRUE, and OR。例如,如果你想要只有當(dāng)價(jià)格列包含正確的數(shù)字值時(shí),計(jì)算數(shù)量乘以?xún)r(jià)格,,你可以使用以下模式:

Amount = IFERROR ( Sales[Quantity] * Sales[Price], BLANK ( ) )

如果您沒(méi)有使用IFERROR,并且Price列包含一個(gè)無(wú)效的數(shù)字,那么計(jì)算列的結(jié)果將是一個(gè)錯(cuò)誤,因?yàn)槿绻恍挟a(chǎn)生計(jì)算錯(cuò)誤,錯(cuò)誤就會(huì)傳播到整個(gè)列。然而,IFERROR的使用會(huì)攔截錯(cuò)誤并使用空白值替換它。

這個(gè)類(lèi)別中的另一個(gè)有趣的函數(shù)是SWITCH,當(dāng)你有一個(gè)數(shù)量不多的不同值的列時(shí),你想要根據(jù)這個(gè)列值得到不同的行為,這是很有用的。例如,產(chǎn)品表中的列大小包含L、M、S、XL,您可能想要

將這個(gè)值解碼成一個(gè)更有意義的列,您可以通過(guò)使用嵌套的IF調(diào)用來(lái)獲得結(jié)果:

SizeDesc =
IF (
    DProduct[Size] = "S",
    "Small",
    IF (
        Product[Size] = "M",
        "Medium",
        IF (
            Product[Size] = "L",
            "Large",
            IF ( Product[Size] = "XL", "Extra Large", "Other" )
        )
    )
)

使用SWITCH函數(shù)得到一種更方便的方式來(lái)表達(dá)相同的公式:

SizeDesc =
SWITCH (
    Product[Size],
    "S", "Small",
    "M", "Medium",
    "L", "Large",
    "XL", "Extra Large",
    "Other"
)

后一種表達(dá)式中的代碼可讀性更強(qiáng),即使速度不是更快,因?yàn)樵趦?nèi)部,DAX將SWITCH語(yǔ)句轉(zhuǎn)換為一組嵌套的IF函數(shù)。

小貼士
這里有一種有趣的方法,可以使用SWITCH函數(shù)來(lái)檢查同一個(gè)表達(dá)式中的多個(gè)條件。因?yàn)镾WITCH被轉(zhuǎn)換成一組嵌套的IF,第一個(gè)條件獲取匹配的勝出,您可以使用此模式測(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"
)

在現(xiàn)實(shí)運(yùn)用中,使用TRUE作為第一個(gè)參數(shù),它的意思是說(shuō):“返回條件計(jì)算為真的第一個(gè)結(jié)果?!?/p>

信息函數(shù)

當(dāng)您需要分析表達(dá)式的類(lèi)型時(shí),您可以使用其中一個(gè)信息函數(shù)。所有這些函數(shù)都返回一個(gè) TRUE/FALSE,并且可以在任何邏輯表達(dá)式中使用。它們是 ISBLANK, ISERROR, ISLOGICAL, ISNONTEXT, ISNUMBER, and ISTEXT

需要重點(diǎn)注意的是,當(dāng)一個(gè)列(而不是表達(dá)式)作為參數(shù)傳遞時(shí),函數(shù)ISNUMBER、ISTEXT和ISNONTEXT總是返回TRUE或FALSE,這取決于列的數(shù)據(jù)類(lèi)型和每個(gè)單元的空值情況。

您可能想知道是否可以使用ISNUMBER與一個(gè)文本列來(lái)檢查是否有可能轉(zhuǎn)換成數(shù)字。不幸的是,您不能使用這種方法;如果您想要測(cè)試文本值是否可轉(zhuǎn)換為數(shù)字,您必須嘗試轉(zhuǎn)換,并在轉(zhuǎn)換失敗時(shí)處理錯(cuò)誤。例如,為了測(cè)試列價(jià)格(即類(lèi)型文本)是否包含有效數(shù)字,您必須編寫(xiě)

IsPriceCorrect = NOT ( ISERROR ( Sales[Price] + 0 ) )

DAX試圖在價(jià)格中加入數(shù)值零,以迫使從文本值轉(zhuǎn)換為數(shù)字;如果它成功了,那么它就會(huì)返回TRUE(因?yàn)镮SERROR會(huì)返回FALSE),否則它會(huì)返回FALSE(因?yàn)镮SERROR返回TRUE)。某些情況下轉(zhuǎn)換將會(huì)失敗,例如,對(duì)于某些行,價(jià)格有一個(gè)“n/a”字符串值。

但是,如果您嘗試使用ISNUMBER,就像在下面的表達(dá)式中一樣,您總是會(huì)得到錯(cuò)誤的結(jié)果:

IsPriceCorrect = ISNUMBER ( Sales[Price] )

在這種情況下,ISNUMBER總是返回FALSE,因?yàn)楦鶕?jù)元數(shù)據(jù),Price列不是一個(gè)數(shù)字,而是一個(gè)字符串,不管每一行的內(nèi)容是什么。

數(shù)學(xué)函數(shù)

在DAX中可用的數(shù)學(xué)函數(shù)集非常類(lèi)似于Excel中的同一套,具有相同的語(yǔ)法和行為。常用的數(shù)學(xué)函數(shù)是 ABS, EXP, FACT, LN, LOG, LOG10, MOD, PI, POWER, QUOTIENT, SIGN, and SQRT。隨機(jī)函數(shù)是 RAND和RANDBETWEEN。EVEN 和ODD 讓你測(cè)試數(shù)字。GCD和LCM對(duì)于計(jì)算兩個(gè)數(shù)字的最大公分母和最小公倍數(shù)是很有用的。QUOTIENT返回除法結(jié)果的整數(shù)部分。

最后,還有幾個(gè)舍入函數(shù)值得舉例;事實(shí)上,您可能使用幾種方法來(lái)獲得相同的結(jié)果??紤]這些計(jì)算列,以及它們?cè)趫D2-3中的結(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 )
圖2-3不同四舍五入函數(shù)的摘要

正如你所看到的,除了指定的數(shù)字的數(shù)量方式外,F(xiàn)LOOR, TRUNC和ROUNDDOWN 都是非常相似的。相反,CEILING和 ROUNDUP在它們的結(jié)果中非常相似。你可以看到在MROUND和 ROUND之間的舍入的方法有一些不同

三角函數(shù)

DAX提供了一組豐富的三角函數(shù),這些函數(shù)對(duì)于某些計(jì)算是有用的。我們不詳細(xì)討論這些函數(shù)的細(xì)節(jié),如果需要的話(huà),它們的用法很簡(jiǎn)單。它們是COS、COSH、COT、COTH、SIN、SINH、TAN和TANH,還有加arc前綴的版本( arcsin,arccos,等等)

文本函數(shù)

在DAX中,幾乎所有的文本功能都與Excel中可用的功能類(lèi)似,只有少數(shù)例外:它們是CONCATENATE, EXACT, FIND, FIXED, FORMAT, LEFT, LEN, LOWER, MID, REPLACE, REPT, RIGHT, SEARCH, SUBSTITUTE, TRIM, UPPER, and VALUE。這些函數(shù)對(duì)于操縱文本和從包含多個(gè)值的字符串中提取數(shù)據(jù)非常有用。例如,在圖2-4中,您可以看到一個(gè)從字符串中提取的姓和名的例子,其中包含了用逗號(hào)分隔的值,中間的標(biāo)題是我們想要?jiǎng)h除的


圖2-4,您可以看到一個(gè)使用文本函數(shù)提取姓氏和名字的示例

我們開(kāi)始計(jì)算兩個(gè)逗號(hào)的位置然后我們用這些數(shù)字來(lái)提取文本的右邊部分。SimpleConversion列實(shí)現(xiàn)了一個(gè)公式,它可能會(huì)返回錯(cuò)誤值如果字符串中有少于兩個(gè)逗號(hào)(如果沒(méi)有逗號(hào)會(huì)返回一個(gè)錯(cuò)誤),而FirstLastName列實(shí)現(xiàn)一個(gè)更復(fù)雜的表達(dá)式,在當(dāng)列中沒(méi)有逗號(hào)時(shí)不會(huì)返回錯(cuò)誤。

Comma1 = IFERROR ( FIND ( ",", People[Name] ), BLANK ( ) )

Comma2 = IFERROR ( FIND ( ",", People[Name], People[Comma1] + 1 ), BLANK ( ) ) 

SimpleConversion =
MID ( People[Name], People[Comma2] + 1, LEN ( People[Name] ) )
    & " "
    & LEFT ( People[Name], People[Comma1] - 1 )

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 ),
        ""
    )

正如您所看到的,F(xiàn)irstLastName列是由長(zhǎng)DAX表達(dá)式定義的,但是您必須使用它來(lái)避免可能出現(xiàn)的錯(cuò)誤,因?yàn)槿绻麊蝹€(gè)值產(chǎn)生錯(cuò)誤,則會(huì)傳播到整個(gè)列。

轉(zhuǎn)換函數(shù)

您在此之前已經(jīng)了解到,DAX執(zhí)行數(shù)據(jù)類(lèi)型的自動(dòng)轉(zhuǎn)換,調(diào)整它們以滿(mǎn)足運(yùn)算的需要。即使它是自動(dòng)發(fā)生的,一組函數(shù)仍然可以執(zhí)行顯式的類(lèi)型轉(zhuǎn)換

CURRENCY可以將表達(dá)式轉(zhuǎn)變?yōu)樨泿蓬?lèi)型,而INT則將表達(dá)式轉(zhuǎn)換為整數(shù)。 DATE 和TIME將日期和時(shí)間作為參數(shù),并返回一個(gè)正確的 DATETIME。VALUE把字符串轉(zhuǎn)換成數(shù)字格式,而格式則作為第一個(gè)參數(shù)和字符串格式獲得一個(gè)數(shù)字值,并可以將數(shù)值轉(zhuǎn)換成字符串。格式通常與DateTime一起使用。例如,下面的表達(dá)式返回“2015年1月12日”。

= FORMAT ( DATE ( 2015, 01, 12 ), "yyyy mmm dd" )

相反的操作,即將字符串轉(zhuǎn)換成DateTime值,是通過(guò)使用DATEVALUE函數(shù)來(lái)執(zhí)行的。

日期和時(shí)間函數(shù)

幾乎在每一種類(lèi)型的數(shù)據(jù)分析中,處理時(shí)間和日期都是工作的重要部分。DAX有大量的函數(shù)可以操作日期和時(shí)間。其中一些與Excel中的類(lèi)似功能相對(duì)應(yīng),并能對(duì)DateTime數(shù)據(jù)類(lèi)型進(jìn)行簡(jiǎn)單的轉(zhuǎn)換。

日期和時(shí)間函數(shù)分別是DATE, DATEVALUE, DAY, EDATE, EOMONTH, HOUR, MINUTE, MONTH, NOW, SECOND, TIME, TIMEVALUE, TODAY, WEEKDAY, WEEKNUM, YEAR, and YEARFRAC

為了能對(duì)日期做更復(fù)雜的操作,比如比較每年的聚合值,或者計(jì)算年初至今的度量值,還有另一組叫做時(shí)間智能函數(shù)的函數(shù),將在第7章“時(shí)間智能計(jì)算”中描述。

正如在本章中提到的,DateTime數(shù)據(jù)類(lèi)型在內(nèi)部使用一個(gè)浮點(diǎn)數(shù),其中整數(shù)部分對(duì)應(yīng)于1899年12月30日之后的天數(shù),而小數(shù)部分表示一天時(shí)間的分?jǐn)?shù)。小時(shí)、分鐘和秒被轉(zhuǎn)換成十進(jìn)制小數(shù)。因此,將整數(shù)值添加到DateTime值中,就會(huì)相應(yīng)地增加相應(yīng)天數(shù)的值。但是,您可能會(huì)發(fā)現(xiàn)使用轉(zhuǎn)換函數(shù)從日期中提取日、月和年更方便。在圖2-5中,您可以看到如何從包含日期列表的表格中提取這些信息:

Day = DAY ( Calendar[Date] )
Month = FORMAT ( Calendar[Date], "mmmm" ) 
Year = YEAR ( Calendar[Date] )
圖2-5,您可以看到一個(gè)使用日期和時(shí)間函數(shù)提取日期信息的示例

關(guān)系函數(shù)

兩個(gè)有用的函數(shù)可以讓你在DAX公式中操作關(guān)系,這兩個(gè)函數(shù)是RELATED的和RELATEDTABLE

您已經(jīng)知道,一個(gè)計(jì)算列可以引用定義它的表的列值。因此,在銷(xiāo)售中定義的計(jì)算列可以引用同一表格中的任意一列。但是,如果您必須引用另一個(gè)表中的列,您該怎么做呢?一般來(lái)說(shuō),除非在兩個(gè)表之間的模型中定義了關(guān)系,否則不能在其他表中使用列。如果這兩個(gè)表共享一段關(guān)系,那么 RELATED函數(shù)使您能夠訪問(wèn)相關(guān)表中的列

例如,您可能想要在銷(xiāo)售表中計(jì)算一個(gè)計(jì)算列,以檢查已售出的產(chǎn)品是否在“移動(dòng)電話(huà)”類(lèi)別中。要計(jì)算這樣一個(gè)列,您必須使用一個(gè)檢查產(chǎn)品類(lèi)別的值的條件,而這不是在銷(xiāo)售表中。盡管如此,一系列的關(guān)系從銷(xiāo)售開(kāi)始,通過(guò)產(chǎn)品和產(chǎn)品子類(lèi)傳遞到產(chǎn)品類(lèi)別,如圖2-6所示。

圖2-6銷(xiāo)售與產(chǎn)品類(lèi)別之間的關(guān)系

從原來(lái)的表到相關(guān)的表需要多少步這其實(shí)并不重要,因?yàn)镈AX將遵循完整的關(guān)系鏈并返回相關(guān)的列值。因此, AdjustedCost 列的公式可以是

Sales[AdjustedCost] =
IF (
    RELATED ( 'Product Category'[Category] ) = "Cell Phone",
    Sales[UnitCost] * 0.95,
    Sales[UnitCost]
)

在一對(duì)多關(guān)系中,RELATED可以從多方訪問(wèn)一方,因?yàn)樵谶@種情況下,如果有的話(huà),相關(guān)表中只有一行存在。如果沒(méi)有這樣的行,RELATED只是返回BLANK

如果你在這段關(guān)系的一方,你想要訪問(wèn)多方,那么RELATED就沒(méi)有幫助了,因?yàn)榱硪贿叺脑S多行可能都適用于一行。在這種情況下,您可以使用RELATEDTABLE。RELATEDTABLE返回一個(gè)表格,其中包含與當(dāng)前行相關(guān)的所有行。例如,如果你想知道每個(gè)類(lèi)別中有多少產(chǎn)品,你可以用這個(gè)公式在產(chǎn)品類(lèi)別中創(chuàng)建一個(gè)列

= COUNTROWS ( RELATEDTABLE ( Product ) )

這個(gè)計(jì)算列將顯示,對(duì)于每個(gè)產(chǎn)品類(lèi)別,相關(guān)產(chǎn)品的數(shù)量,如圖2-7所示。

圖2-7通過(guò)使用RELATEDTABLE計(jì)算產(chǎn)品的數(shù)量

與RELATED的情況一樣,RELATEDTABLE可以遵循一系列的關(guān)系,并且總是從一方開(kāi)始,沿著多方的方向前進(jìn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在快速介紹前一章之后,現(xiàn)在是時(shí)候開(kāi)始討論DAX語(yǔ)言了。在這一章中,您將學(xué)習(xí)語(yǔ)言的語(yǔ)法、計(jì)算列和度量值(在Excel...
    daxbi閱讀 3,880評(píng)論 0 11
  • DAX是微軟SQL Server分析服務(wù)(SSAS)和Microsoft Power Pivot for Exce...
    daxbi閱讀 15,879評(píng)論 4 31
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評(píng)論 19 139
  • 變量 在編寫(xiě)DAX表達(dá)式時(shí),您可以通過(guò)使用變量來(lái)避免重復(fù)相同的表達(dá)式。例如,看下面的表達(dá)式: 你可以定義很多變量,...
    daxbi閱讀 3,057評(píng)論 0 12
  • 1、百度云 11月30日,百度在北京國(guó)際會(huì)議中心召開(kāi)云智峰會(huì),并發(fā)布百度云生態(tài)“云圖計(jì)劃”。在資金和資源投入方面,...
    Captain7閱讀 191評(píng)論 0 0

友情鏈接更多精彩內(nèi)容