PowerPivot的DAX函数实战
针对PowerPivot的DAX函数参考
⼀、筛选函数
1、ALL函数:返回表中的所有⾏货返回列中的所有值,同时忽略可能已应⽤的任何筛选器,此函数可⽤于清除筛选器对表中的所有⾏创建计算,返回删除了筛选器的表或列的值
语法:ALL({
| [, [, [,…]]]})
如:创建⼀个《度量值》
订单额度 = SUMX(ALL(‘订单表’),‘订单表’[amount])
虽然X轴使⽤⽇期来统计,显⽰的依然是总额度,在不使⽤ALL函数的⼀个度量值
订单额度2 = SUMX(‘订单表’,‘订单表’[amount])
没有使⽤ALL时候,时间筛选器就⽣效了,显⽰各⽇的总额。实际应⽤中可能会分析⽇订单和总额的⽐率:
计算⽇订单和总额的⽐率 = sumx(‘订单表’,‘订单表’[amount])/sumx(ALL(‘订单表’),‘订单表’[amount])
ALL (Column[, Column[, …]]) 删除表中指定列的所有筛选器,表中针对其他列的所有筛选器仍应⽤,创建⼀个度量值:
订单额度 = SUMX(‘订单表’,‘订单表’[amount])/CALCULATE(SUM(‘订单表’[amount]),ALL(‘订单表’[create_time],‘订单表’[cancel_rent_time]))
ALLEXCEPT(Table, Column1 [,Column2]…):删除表中所有上下⽂筛选器,但已应⽤于制定列的筛选器除外,创建⼀个度量值:
订单额度 = SUMX(‘订单表’,‘订单表’[amount])/SUMX(ALLEXCEPT(‘订单表’,‘订单表’[create_time],‘订单
表’[rent_pay_time],‘订单表’[deposit_withdraw_time]), ‘订单表’[amount])
ALLSELECTED:选取需要字段过滤其他,只能添加⼀个参数,同时忽略选取字段的筛选器,其他已应⽤的筛选器仍然⽣效,选取的时间仍然创建度量值的表,创建⼀个度量值:
订单额度 = SUMX(‘订单表’,‘订单表’[amount])/CALCULATE(SUMX(‘订单表’,‘订单表’[amount]),ALLSELECTED(‘订单表’[create_time]))
对⽐没有allselectd的情况下的筛选
ALLNOBLANKROW函数:从关系的⽗表中,返回除空⽩⾏之外的所有⾏,或某⼀列中除空⽩⾏之外的所有⾮重复值,并且忽略可能存在所有上下⽂的筛选器。
语法:ALLNOBLANKROW(
|)
若选table要删除其所有上下⽂筛选器的表,列同理,创建⼀个度量值
订单额度222 = CALCULATE(SUMX(‘订单表’,‘订单表’[amount]),ALLNOBLANKROW(‘订单表’))
Datekey是张时间的维度表和和订单表相关联
,选⾃⼰的表的时间,列出当前时间,
使⽤时间维度表,维度表所有的时间都会显⽰⼀个同⼀个值
2、CALCULATE函数:计算由指定筛选器修改的上下⽂中的表达式,作为表达式的结果值返回。
语法:CALCULATE(,,…)
expression要进⾏计算的表达式
filter1…N定义筛选器的布尔表达式或表表⼤师的逗号分隔的列表
创建⼀个度量值:
度量值1 = CALCULATE(SUMx(‘订单表’,‘订单表’[amount]),‘订单表’[status]=200)
限制:不能引⽤度量值、不能使⽤CALCULATE嵌套、不能使⽤扫描表或返回任何函数及聚合函数
订单额度 = CALCULATE(SUM(‘订单表’[amount]),(ALL(‘订单表’)))
CALCULATETABLE函数:在由给定筛选修改的上下⽂中计算表表达式,返回包含值得表,在BPI中的建模点新建表,此时不能使⽤新建度量值。
语法: CALCULATETABLE(,,,…)
度量值cal = CALCULATETABLE(‘订单表’,‘订单表’[status]=100)
新度量值 = SUMX(CALCULATETABLE(‘订单表’,‘PowerBi 时间维度表’[DayOfMonthFull]=“18”),‘订单表’[amount])
此时嵌套在聚合函数⾥,返回值的列表
此时说明表达式返回表的多列值,只是根据条件过滤不匹配status=100de
3、DISTINCT:返回⼀列构成的⼀个表,该表包含来⾃指定列的⾮重复值,⼀般配合其他聚合函数来使⽤
语法:DISTINCT()
度量值cal = COUNTROWS(DISTINCT(‘订单表’[status]))
4、EARLIER函数:返回提及的列的外部计算传递中指定列的当前值(在想要使⽤某个值作为输⼊并且基于该输⼊进⾏计算的嵌套计算中)
官档案例
= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])
<ProductSubcategory[TotalSubcategorySales]))+1
5、EARLIEST函数:返回指定列的外部计算传递中制定列的当前值,与4类似
6、FILTER函数:返回表⽰另⼀个表达式的⼦集的表,只包含筛选⾏的表返回值
语法:FILTER(
,)
参数:
table要筛选的表,表还可以是产⽣的结果集是表的表达式
Filter为该表的每⼀⾏计算的布尔表达式
FILTERS:返回直接作为筛选器应⽤于columnName的值
HASONEFILTER:当columnName上的直接筛选值得数⽬为⼀个值,返回TRUE否则返回FALSEfalse是什么函数
HASONEVALUE:已将columnName的上下⽂筛选为只剩下⼀个⾮重复值时返回TRUE,否则FALSE
7、RELATED函数:从另⼀个表返回相关值,与当前⾏相关的单个值
语法:RELATED()
RELATED 函数要求当前表与包含相关信息的表之间存在关系。您需要指定包含所需数据的列,该函数将通过现有的多对⼀关系从相关表中的指定列中提取值
FILTER_RELATED_1 = SUMX(FILTER(‘订单表’,RELATED(‘订单表状态维度表’[status_id])=101),‘订单表’[amount])
通过通过计算累计101值得累计和
8、RELATEDTABLE函数:由给定筛选器修改的上下⽂中计算表表达式,返回包含值得表
语法: RELATEDTABLE(,,,…)
注释
RELATEDTETABLE 函数将更改筛选数据的上下⽂,并在您指定的新上下⽂中计算表达式。对于在筛选器参数中使⽤的每⼀列,将删除该列上的现有筛选器,改为应⽤在筛选器参数中使⽤的筛选器
###此函数是 CALCULATETABLE 函数的同义词
9、VALUES函数:返回由⼀列构成的⼀个表,包含来⾃制定列的⾮重复值。
语法:values()
注释
当您在已筛选的上下⽂(例如数据透视表)中使⽤ VALUES 函数时,VALUES 返回的唯⼀值会受到筛选器的影响。例如,如果您
按 Region 进⾏筛选,并且返回针对 City 的值列表,则该列表将只包括筛选器允许的区域中的那些城市。若要返回所有城市,⽽不管现有筛选器的情况如何,您必须使⽤ ALL 函数从表中删除筛选器。第⼆个⽰例演⽰如何将 ALL 与VALUES ⼀起使⽤。
VALUES_1 = COUNTROWS(VALUES(‘订单表’[id] ))
统计函数(聚合函数):对值得聚合运算,在筛选函数中已经应⽤部分,其他类似
AVERAGE()
AVERAGE():返回列中值的平均值(算术平均值)。处理⽂本和⾮数字值
AVERAGEX(
,):计算对表进⾏求值的⼀组表达式的平均值(算术平均值)
COUNTA ()函数计算列中不为空的单元的数⽬。它不仅对包含数值的⾏进⾏计数,还对包含⾮空⽩值(包括⽂本、⽇期和逻辑值)的⾏进⾏计数
COUNTAX 函数⽤于在对表计算表达式的结果时统计⾮空结果数。即,它的作⽤与 COUNTA 函数类似,但它⽤于对表中所有⾏进⾏循环访问,并统计指定表达式计算为⾮空结果的⾏数
COUNTAX(
,)
COUNTBLANK() 计算列中空⽩单元的数⽬
COUNTROWS函数:计算制定表中的⾏数,或计算表达式定义的表中的⾏数
语法:COUNTROWS(
)
COUNTX(
,)在对表计算表达式的结果时,计算包含数字或者计算结果为数字的表达式的⾏的数⽬
MAX
MAXA 返回列中的最⼤值。逻辑值和空⽩被计算在内MAXA() MINA
MAXX为表的每⼀⾏计算表达式,并且返回最⼤的数值MAXX(
,) MINX
逻辑函数:
AND函数:检查是否两个参数均为TRUE
语法:AND(,)
注释
DAX 中的 AND 函数只接受两 (2) 个参数。如果您需要对多个表达式执⾏ AND 运算,则可以创建⼀系列计算;但更好的选择是,使⽤连接运算符 (&&) 在⼀个更简单的表达式中连接所有这些列
FALSE函数:返回逻辑值FALSE
语法:FALSE()
IF函数:检查是否满⾜作为第⼀个参数提供的条件,满⾜为TRUE,否则为FALSE
语法: IF(logical_test>,<value_if_true>, value_if_false)
计算结果可以为 TRUE 或 FALSE 的任何值或表达式。
value_if_true
在逻辑测试为 TRUE 时返回的值。如果省略,则返回 TRUE。
value_if_false
在逻辑测试为 FALSE 时返回的值。如果省略,则返回 FALSE。
=IF([Calls]<200,“low”,IF([Calls]<300,“medium”,“high”))
EGG:
新增列IF = IF([status]=101, “已付押⾦”,IF([status]=200, “租赁中”,IF([status]=300, “待付租⾦”,IF([status]=400, “已付租⾦”,IF([status]=500, “未退押⾦”,
IF([status]=600, “交易失败”,IF([status]=700,“申诉中” ,“取消”
)))))))
他的另外⼀种简洁语法:
列SWITCH = SWITCH([status],101,“已付押⾦”,200,“租赁中”,300,“待付租⾦”,400,“已付租⾦”,500,“未退押⾦”,600,“交易失败”,700,“申诉中”,“取消”)
注释
如果省略了 value_if_true 或 value_if_false 的值,则 IF 将其视为空字符串值 (""),
如果在表达式中引⽤的值是某⼀列,则 IF 将返回与当前⾏相对应的值
IF 函数尝试返回列中的单个数据类型。因此,如果 value_if_true 和 value_if_false 返回的值属于不同
的数据类型,则 IF 函数会隐式转换数据类型以便适合列中的这两种值。例如,公式 IF(,TRUE(),0) 返回由 1 和 0 组成的列,并且可以对结果求和,但公
式 IF(,TRUE(),FALSE()) 只返回逻辑值
IFERROR函数:对某⼀表达式进⾏计算,并且如果该表达式返回错误则返回指定值,否则返回该表达式本⾝的值
语法:IFERROR(value,value_if_error)##返回值类型要相同
=IFERROR(25/0,9999)
NOT函数:将FALSE改成TRUE,或者将TRUE改成FALSE
语法:NOT()
OR函数 OR(,)
IF( OR( CALCULATE(SUM(‘ResellerSales_USD’[SalesAmount_USD]), ‘ProductSubcategory’[ProductSubcategoryNa me]=“Touring Bikes”) > 1000000
,
CALCULATE(SUM(‘ResellerSales_USD’[SalesAmount_USD]), ‘DateTime’[CalendarYear]=2003) > 2500000
)
, “Circle of Excellence”
, “”
)
TRUE函数: 语法:TRUE()
= IF(SUM(‘InternetSales_USD’[SalesAmount_USD]) >200000, TRUE(), false())
⽂本函数:
BLAN() 返回空⽩。
CONCATENATE:将两个⽂本字符串连接成⼀个⽂本字符串
= CONCATENATE(sumx(‘订单表’,‘订单表’[amount])/sumx(ALL(‘订单表’),‘订单表’[amount]),"%")
EXACT函数:⽐较字符串,相同为TRUE
EXACT(,)
FIND函数: 返回⼀个⽂本字符串在另⼀⽂本字符串中的开始位置。FIND 区分⼤⼩写。
FIND(<find_text, within_text, start_num)
您要查的⽂本。使⽤双引号(空⽂本)可以匹配 within_text 中的第⼀个字符;不允许通配符。
within_text
包含要查的⽂本的⽂本。
start_num
从其开始进⾏搜索的字符;如果省略,start_num = 1。within_text 中的第⼀个字符是字符编号 1。
FIXED函数: 将数字舍⼊到指定的⼩数位数,并以⽂本形式返回结果。可以指定以带或不带逗号的形式返回结果
将数字舍⼊到指定的⼩数位数,并以⽂本形式返回结果。可以指定以带或不带逗号的形式返回结果
参数
项
定义
number
要舍⼊并转换为⽂本的数字,或包含数字的列。
decimals
(可选)⼩数点右侧的位数;如果省略,则为 2。
no_commas
(可选)⼀个逻辑值:如果为 1,则不在返回的⽂本中显⽰逗号;如果为 0 或省略,则在返回的⽂本中显⽰逗号。FORMAT函数:根据指定的格式转换为⽂本
FORMAT(, <format_string>)
参数
术语
定义
value
值或计算结果为单个值的表达式。
format_string
具有格式模板的字符串。
FORMAT函数的预定义数字格式
下表标识预定义数字格式的名称。可按名称将它们⽤作 Format 函数的样式参数。
格式规范
说明
“General Number”
显⽰不带千位分隔符的数字。
“Currency”
显⽰带千位分隔符的数字(如果适⽤);显⽰⼩数点分隔符右侧两位。输出基于系统区域设置。
“Fixed”
⼩数点分隔符左侧⾄少显⽰⼀位,右侧显⽰两位。
“Standard”
显⽰带千位分隔符的数字,其中⼩数点分隔符左侧⾄少有⼀位,右侧有两位。
“Percent”
将数字乘以 100 后显⽰,并在紧右侧追加百分号 (%);⼩数点分隔符右侧总是显⽰两位。
“Scientific”
使⽤标准的科学记数法,并且提供两个有效位数。
“Yes/No”
如果数字为 0,则显⽰ No;否则显⽰ Yes。
“True/False”
如果数字为 0,则显⽰ False;否则显⽰ True。
“On/Off”
如果数字为 0,则显⽰ Off;否则显⽰ On。
FORMAT函数的⾃定义数字格式
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论