PowerBI-DAX公式常⽤函数套路
安徽二本大学⼀.筛选类函数
1.ALL, ALLEXCEPT, ALLSELECTED
ALL(table/column)--ALL⽤来清除整个表或某个字段的筛选条件,通常配合CALCULATE使⽤
ALLEXCEPT(table/column)--删除表中除已应⽤于指定列的筛选器之外的所有上下⽂筛选器
ALLSELECTED(table/column)--从当前查询的列和⾏中删除上下⽂筛选器,同时保留所有其他上下⽂筛选器或显式筛选器
2.CALCULATE(<expression>,<filter1>,<filter2>...)
--Calculate可以应⽤在多个表
Calculate使⽤AND关系时可直接在条件间加',',但表达“或”时,必须⽤'||',⽽且连接的两个条件
必须引⽤同⼀列。
demon hunterCalculate中当“[列]=固定值”这种筛选搞不定时,可⽤filter/all/values筛选器搭配使⽤
3.FILTER(table,<filter>)--返回值:只包含筛选⾏数据的表
--筛选时对表进⾏逐⾏扫描,计算量很⼤,所以选择筛选的表尽量为lookup表
4.HASONEVALUE(<columnName>)--将 columnName 的上下⽂筛选为只剩下⼀个⾮重复值时,
将返回 TRUE。否则为 FALSE。
5.RELATED(<column>)--将“⼀”端的列值添加到“多”端的表中
RELATEDTABLE(<tableName>)--将“多”端关联的表数据添加到“⼀”端的列上,
返回的是⼀张表
6.VALUES(<TableNameOrColumnName>)--返回由⼀列构成的⼀个表,该表包含来⾃指定表或列的
⾮重复值。换⾔之,重复值将被删除,仅返回唯⼀值。
7.EARLIER函数:
例如我们有“产品名称”和“销售⾦额”两列数据。基于此,我们希望计算出每个产品的销售⾦额排名。
COUNTROWS(
embarrassing
FILTER('产品销售表',
EARLIER('产品销售表'[销售⾦额])<'产品销售表'[销售⾦额])
)+1
--EARLIER=当前⾏,按照当前⾏进⾏逐⾏扫描,SUMX+FILTER+EARLIER
是Power Pivot中⽐较常⽤的函数组合,由于Earlier针对每⼀⾏数据都进⾏计算,
所以理论上计算量相当于数据⾏数的平⽅。如果有10⾏数据,则需要计算100次,
所以数据量⼤的时候⼤家使⽤要⼩⼼,有可能会造成模型计算缓慢。
⼆.逻辑与逻辑判断函数wheneverwherever
1.IF(logical_test>,<value_if_true>, value_if_fal)
--检查是否满⾜作为第⼀个参数提供的条件。如果该条件为 TRUE,则返回⼀个值;
上海宠物美容培训
如果该条件为 FALSE,则返回另⼀个值,⽤法与excel类似
2.SWITCH(<expression>,条件1,值1,条件2,值2)--根据值列表计算表达式,
并返回多个可能的结果表达式之⼀。
3.CONTAINS(InternetSales,[ProductKey],214,[CustomerKey],11185)
--是否同时存在销售给客户11185的产品214的任何 Internet 销售额。
奥运会口号4.ISBLANK(column)--判断该列中某个值是否为空
5.ISNONTEXT(column)--检查某个值是否不是⽂本
6.ISNUMBER(column)--检查某个值是否为数字
7.ISTEXT(column)--检查某个值是否为⽂本
8.ISLOGICAL(column)--检查某个值是否是逻辑值
三.时间⽇期类函数
1.计算年初⾄今累计--TOTALYTD函数
例如计算年初⾄今累计的销售⾦额:
favorite sport[年累计⾦额]:=
TOTALYTD([销售⾦额],
'⽇历年'[⽇期])
# 如果要加上⼀个时间截⽌点,则写为:
[年累计截⽌⾦额]:=
TOTALYTD([销售⾦额],
'⽇历年'[⽇期],
'⽇历年'[⽇期]<DATE(2016,6,1))
# 同理计算季度初⾄今累计--TOTALQTD, 计算⽉初⾄今累计--TOTALMTD
2.计算上⼀年/季度/⽉的销售额--DATEADD函数
[上⼀年销售额]:=
CALCULATE([销售⾦额],
DATEADD('⽇历年'[⽇期],-1,YEAR))--YEAR可改为QUARTER,MONTH,DAY
--将-1改为+1则时间后移
3.计算同⽐/环⽐
# ⽉同⽐--今年每⽉的销售⾦额相⽐去年同⽉份增长的⽐率
[上⼀年销售额]:=
CALCULATE([销售⾦额],
DATEADD('⽇历年'[⽇期],-1,YEAR))
[同⽐]:=
DIVIDE([销售⾦额]-[上⼀年销售额],
[上⼀年销售额])
# ⽉环⽐--这⽉与上⽉相⽐销售额增长的⽐率
[上⼀⽉销售额]:=
CALCULATE([销售⾦额],
DATEADD('⽇历年'[⽇期],-1,MONTH))
[环⽐]:=
DIVIDE([销售⾦额]-[上⼀⽉销售额],
[上⼀⽉销售额])
4.计算两个⽇期之间间隔--DATEDIFFdeny是什么意思
[时间间隔]:=
DATEDIFF([开始⽇期],
[结束⽇期],
'Y')--参数"Y"换成"M"或"D",则分别对应⽉和⽇
--也可以改成HOUR,MINUTE,SECOND计算⼩时,分,秒
5.其他⽇期时间函数:
DATE(2009,7,8)--结果返回'2009/7/80:00:00'
DATEVALUE("8/1/2009")--将⽂本形式的⽇期转换为⽇期时间格式的⽇期,结果返回
'2009/8/10:00:00'
DATEADD([⽇期],3,DAY)--⽇期加减函数
EOMONTH([⽇期],3)--返回指定⽉份数之前或之后的⽉份的最后⼀天的⽇期
EDATE([⽇期],3)--返回在开始⽇期之前或之后指⽰的⽉数的⽇期
YEAR(),MONTH(),DAY(),HOUR(),MINUTE(),SECOND()
NOW()--返回当前的⽇期时间TODAY()--返回当前的⽇期
WEEKDAY([⽇期],1)--⼀周中的第⼏天,参数1代表从星期⽇开始计数,参数2代表从星期⼀开始计数参数3代表从星期⼀开始计数,但到星期六结束
WEEKNUM([⽇期],1)--⼀年中的第⼏周,1代表从周⽇开始计数,2代表从周⼀开始计数
四.统计聚合函数
1.SUMX(table,<expression>)--SUMX与CALCULATE功能类似,但SUMX属于迭代函数,计算量⼤
--同理AVERAGEX,MINX.MAXX⽤法相同
2.SUM(),MAX(),MIN(),SQRT()
DISTINCTCOUNT()--计算去重后列所包含的元素个数
COUNTROWS()--计算表的⾏数
COUNT()--计算列中包含数字的单元的数⽬
COUNTA()--计算列中不为空的单元的数⽬
COUNTBLANK()--计算列中空⽩单元的数⽬
3.DIVIDE(分⼦,分母)--在DAX中涉及到除法必须⽤DIVIDE
4.CROSSJOIN(<table1>,<table2>)--⽣成笛卡尔积表
SUMMARIZE(<table>,<groupBy_columnName>,<name>,<expression>)
--table,任何返回数据表的 DAX 表达式。英文好听的名字
groupBy_columnName将使⽤该列中找到的值创建摘要组,此参数不能是表达式。
name,给予总计或汇总列的名称,包含在双引号内。
expression,任何返回单个标量值的 DAX 表达式,其中,表达式将计算多次(针对每⾏/上下⽂)。GENERATE(<table1>,<table2>)--⽣成笛卡尔积表
五.⽂本函数
1.LEFT(),RIGHT(),MID(),FIND(),SEARCH(),LEN()---字符串提取函数
2.REPLACE(),SUBSTITUTE()--字符串替换函数
3.TRIM(),LOWER(),UPPER()
architectural4. FORMAT函数,对于⽇期格式的⾃定义设置如下图: