主要用于創(chuàng)建度量列(Measure),度量值是根據(jù)用戶(hù)選擇的Filter和公式,計(jì)算聚合值,DAX表達(dá)式基本上都是引用對(duì)應(yīng)的函數(shù),函數(shù)的執(zhí)行有表級(jí)(Table-Level)上下文和行級(jí)(Row-Level)上下文之別;其交互行為都是通過(guò)表之間的關(guān)系實(shí)現(xiàn)的,用戶(hù)選擇的Filter,會(huì)通過(guò)關(guān)系對(duì)數(shù)據(jù)進(jìn)行過(guò)濾,是PowerBI報(bào)表呈現(xiàn)的數(shù)據(jù)具有動(dòng)態(tài)交互的特性。
一,常用的操作符
在DAX表達(dá)式中,常用的操作符是:
- 文本使用雙引號(hào)作為界定符,
- 等號(hào)是“=”號(hào),不等號(hào)是:<>
- 賦值使用“=”號(hào),
- 布爾值使用 TRUE()和FALSE()函數(shù),
- 空值使用BLANK()函數(shù)表示,
- 集合使用大括號(hào){}表示,例如,包含三個(gè)item的集合: {1,2,3}
- 字符的連接符號(hào)是:&
- 邏輯運(yùn)算符號(hào)是:邏輯與是 &&,邏輯或是: ||
二,過(guò)濾函數(shù)
過(guò)濾函數(shù)能夠操作數(shù)據(jù)的上下文,以實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)計(jì)算,功能非常強(qiáng)大。
1,關(guān)聯(lián)函數(shù)
?Related函數(shù)返回跟當(dāng)前的數(shù)據(jù)行有關(guān)系的表的單個(gè)值,
RELATED(related_table[column])
Related函數(shù)要求當(dāng)前表和關(guān)聯(lián)表之間存在關(guān)系(Relationship),當(dāng)前表和關(guān)聯(lián)表之間存在many-to-one的關(guān)系,從關(guān)聯(lián)表中返回單個(gè)值。
Related函數(shù)運(yùn)行在行上下文(row context),因此,只能用于計(jì)算列的表達(dá)式。
示例:表InternetSales_USD和SalesTerritory之間存在關(guān)系,從表SalesTerritory獲取SalesTerritoryCountry的值,并通過(guò)FILTER函數(shù)進(jìn)行過(guò)濾,統(tǒng)計(jì)表InternetSales_USD中字段[SalesAmount_USD]的加和:
= SUMX(FILTER( 'InternetSales_USD', RELATED('SalesTerritory'[SalesTerritoryCountry]) <>"United States" ) ,'InternetSales_USD'[SalesAmount_USD])
RELATEDTABLE用于one-to-many的關(guān)系,用于返回被過(guò)濾的所有數(shù)據(jù)行組成的表。
2,過(guò)濾函數(shù)
Filter函數(shù),返回被過(guò)濾之后的表,是表數(shù)據(jù)的子集:
FILTER(<table>,<filter>)
通過(guò)過(guò)濾條件,獲取表的子集,過(guò)濾函數(shù)返回的表只能用于計(jì)算。過(guò)濾函數(shù)不是獨(dú)立的,必須嵌入(embedded)到其他函數(shù)中作為一個(gè)表值參數(shù)。
3,計(jì)算函數(shù)
Calculate函數(shù),在過(guò)濾器的上下文中計(jì)算表達(dá)式,返回單個(gè)值:
CALCULATE(<expression>,<filter1>,<filter2>…)
參數(shù)expression是計(jì)算的表達(dá)式,受到filter參數(shù)的上下文的影響,如果filter參數(shù)改變數(shù)據(jù)的上下文,那么在新的上下文中計(jì)算表達(dá)式。計(jì)算函數(shù)的最大特點(diǎn)是能夠移除過(guò)濾器,在過(guò)濾器參數(shù)列表中,如果一個(gè)數(shù)據(jù)列上存在多個(gè)過(guò)濾器,那么Calculate函數(shù)會(huì)移除前面的過(guò)濾器,而只應(yīng)用當(dāng)前的過(guò)濾器。
對(duì)于Calculate函數(shù)的Filter,有兩種表達(dá)式,一種是布爾表達(dá)式,計(jì)算的結(jié)果是布爾值;一種是只包含一列的表格表達(dá)式,是指計(jì)算該表格相關(guān)聯(lián)的數(shù)據(jù),相當(dāng)于做“相等”過(guò)濾。
示例:在計(jì)算比例關(guān)系時(shí),使用計(jì)算函數(shù)的移除過(guò)濾器的功能:
=( SUM('ResellerSales_USD'[SalesAmount_USD]))
/CALCULATE( SUM('ResellerSales_USD'[SalesAmount_USD])
,ALL('ResellerSales_USD'))
表達(dá)式中的分母,使用計(jì)算函數(shù),其中,第一個(gè)過(guò)濾器參數(shù)使用ALL過(guò)濾函數(shù),使得sum表達(dá)式統(tǒng)計(jì)所有的數(shù)據(jù)行,這種行為重寫(xiě)對(duì)數(shù)據(jù)表的隱式過(guò)濾器。
4,移除過(guò)濾器
ALL函數(shù)返回表中的所有數(shù)據(jù)行,清理任意過(guò)濾器,用于對(duì)全表執(zhí)行聚合運(yùn)算。ALL函數(shù)主要用于計(jì)算比例關(guān)系,常用于分母中。
ALL( {<table> | <column>)
5,去重函數(shù)
Distinct 返回單列的表,包含無(wú)重復(fù)的值,也就是說(shuō),從表中移除重復(fù)值,只返回列的唯一值。
DISTINCT(<column>)
6,過(guò)濾器的值
函數(shù)Values返回被過(guò)濾的唯一值,在同一個(gè)表中的其他Column被過(guò)濾,那么返回被過(guò)濾的當(dāng)前Column的唯一值。Values函數(shù)和Distinct函數(shù)很相似,唯一的不同是Values函數(shù)會(huì)返回Unknown,這是因?yàn)殛P(guān)聯(lián)的Table中包含部匹配的數(shù)據(jù)行,和Left Join的右表中包含NULL值很相似。
VALUES(<TableNameOrColumnName>)
When you use the VALUES function in a context that has been filtered, ?the unique values returned by VALUES are affected by the filter.
結(jié)合CONCATENATEX函數(shù),能夠把所有過(guò)濾器的值連接成字符串。注意,DAX表達(dá)式使用 & 進(jìn)行字符串的連接。
7,探測(cè)直接過(guò)濾(filtered directly)
如果指定的Column被直接過(guò)濾(filtered directly),函數(shù)返回True;當(dāng)同一個(gè)Table中的其他Column被過(guò)濾,切片器(Slicer)中被關(guān)聯(lián)的Column,默認(rèn)設(shè)置是全部直接過(guò)濾,函數(shù)返回True;如果Column上沒(méi)有直接的過(guò)濾,或者同一個(gè)Table中的其他Column被過(guò)濾,或者被有關(guān)系的Table過(guò)濾,函數(shù)返回False。
ISFILTERED(<columnName>)
直接過(guò)濾器的數(shù)值通過(guò)函數(shù)Filters返回:
FILTERS(<columnName>)
8,探測(cè)關(guān)聯(lián)過(guò)濾
如果同一個(gè)Table中的其他Column被過(guò)濾,或者被有關(guān)系的Table過(guò)濾,函數(shù)返回True
ISCROSSFILTERED(<columnName>)
9,保持過(guò)濾器
函數(shù) KeepFilters 的作用是保持過(guò)濾器,用于計(jì)算函數(shù)(CALCULATE 和 CALCULATETABLE)中。默認(rèn)情況下,計(jì)算函數(shù)的過(guò)濾器參數(shù)(filter argument)會(huì)對(duì)過(guò)濾表數(shù)據(jù),當(dāng)在相同的字段上設(shè)置過(guò)濾器參數(shù)(filter argument)時(shí),該參數(shù)會(huì)替換已經(jīng)存在的過(guò)濾器;當(dāng)相同的字段上沒(méi)有過(guò)濾器參數(shù)(filter argument)時(shí),已經(jīng)存在的過(guò)濾器不受影響。函數(shù)KeepFilters會(huì)改變計(jì)算函數(shù)的行為,當(dāng)在計(jì)算函數(shù)使用函數(shù)KeepFilters時(shí),表的上下文是過(guò)濾器參數(shù)(filter argument)和已經(jīng)存在的過(guò)濾器的交集,也就是說(shuō),表的上下文同時(shí)受到已經(jīng)存在的過(guò)濾器和計(jì)算函數(shù)的過(guò)濾器參數(shù)(filter argument)的影響。計(jì)算函數(shù)替換已經(jīng)存在的過(guò)濾器,而函數(shù) KeepFilters會(huì)添加已經(jīng)存在的過(guò)濾,求交集。
KEEPFILTERS(<expression>)








暫無(wú)數(shù)據(jù)