power bi 常用函数
1. LOOKUPVALUE()
- LOOKUPVALUE(要那张表的那一列的值,找哪张标的对应关系,与该表的那列有对应关系)
单价 = LOOKUPVALUE('商品表'[进价],'商品表'[品名],'销售表'[商品名称])
2. related() 函数
- 多端找一端;事实表找维度表;数据表找基础表
销售成本 = [销售数量]*related('商品表'[进价])
3. relatedtable() 函数
- 一端找多端;维度表找事实表;基础表找数据表
订单数量 = countrows(relatedtable('销售表'))
4.values() 函数
-
获取某列的唯一值,即去重,得到的是一张表
-
例一:表中的一列
表2 = values('表1'[姓名])
-
例二:表
- 根据表筛选时,返回表的所有可见行,就是复制一张表
表2 = values('表1')
5.distinct 函数
- 格式
- distinct(‘表名’)
- distinct(‘表名’[列名])
- distinct(返回表的表达式)
- 返回
- 去重后,唯一值的列
- 只包含非重复列的表
- 例子
表2 = distinct('表1'[姓名]) 表2 = distinct('表1') 表2 = distinct(FILTER('表1','表1'[性别]="男"))
6.earlier函数
- 含义:当前行
- 案例一:获取下一个订单日期
下一个订单日期=sumx(filter('表','表'[序号]=earlier('表'[序号]+1),'表'[销售日期])
- 案例二:分组累积求和
商品累计求和=sumx(filter('表','表'[序号]<=earlier('表'[序号]) && '表'[商品]=earlier('表'[商品])),'表'[销售量])
- 案例三:累计用户购买次数
第几次购买=countrows(filter('表','表'[姓名]=ealier('表'[姓名]) && '表'[序号]<=earlier('表'[序号]))
7. divide() 函数
- 防止分母为0,除法报错
- 语法:divide(分子,分母,[替换结果])
- 安全除法
安全除法=divide(分子,分母,blank()) 安全除法=divide(分子,分母,0)
8. isinscope函数
- 含义:是否在范围内
- 官方含义:当指定的列是级别层级结构中的级别时,返回true
- 例子
- 格式:isinscope(‘表’[列])
-- 如果'商品表'[商品名称]是层级关系,则返回true,计算各类商品名称在总金额的占比 isinscope('商品表'[商品名称]), divide([总金额],calculate([总金额],allselected('商品表'[商品名称])
- 例子
总金额 = sum('销售表'[销售]) 占比 层级 = switch(true(), isinscope('商品表'[商品名称]),DIVIDE([总金额],calculate([总金额],ALLSELECTED('商品表'[商品名称]))), ISINSCOPE('商品表'[产品类别]),divide([总金额],calculate([总金额],ALLSELECTED('商品表'[产品类别]))), divide([总金额],CALCULATE([总金额],ALLSELECTED('商品表'[商品名称]))))
9. isfiltered函数
含义 | 返回值 |
---|---|
当直接筛选[列名]时 | 返回TRUE |
如果列没有筛选器,或由于正在筛选同一个表或相关表中的不同列而发生筛选 | 返回FALSE |
- 代表是否受到直接筛选影响。【只能针对列】
- 用于判断某一字段是否有筛选关系
- 格式:isfiltered(列名)
10. iscrossfiltered函数
单词 | 含义 |
---|---|
is | 是 |
cross | 交叉 |
filtered | 筛选 |
- 代表是否受到交叉筛选的影响。【需要进行判断的表或列】
- 用于判断某一个表中是否含有筛选字段
- 格式:iscrossfiltered(列名)
- 当正在筛选【列名】或相同表中的其他列时,返回true;即只要有一个筛选列都返回TRUE
- 例一:iscrossfiltered 与isfiltered对比
isfiltered = isfiltered('日期表'[Date]) iscrossfiltered = iscrossfiltered('日期表'[Date])
- 例二:展示某指定年月之前12个月份的销售额
- 创建序号
年月序号 = SWITCH( TRUE(), '日期表'[年]=2019,0+[月], '日期表'[年]=2020,12+[月] )
- 创建度量值
前12月 = if( ISCROSSFILTERED('日期表'[年月]), calculate( values('表'[年月]), filter('表','表'[年月序号]<=max('日期表'[年月序号]) && '表'[年月序号]> max('日期表'[年月序号])-12) ) )
- 创建切片器
- 设置筛选器
- 结果展示
11. firstnonblank函数与lastnonblank函数
- 都属于表函数,但也可以作为"值函数"使用
- 语法:
- firstnonblanck(列,表达式):不为空的第一个值
- lastnonblanck(列,表达式):不为空的最后一个值
语法 | 含义 |
---|---|
列 | 任何列,或者具有单列的表,也可以是表达式 |
表达式 | 计算空值的表达式,即判定条件 |
返回结果 | 单列的表,只有一行数据,也就是返回一个值,只不过这个值在表中 |
- 表函数例子
表 2 = firstnonblank('表'[日期],calculate(sum('表'[销售]))) 表 2 = lastnonblank('表'[日期],calculate(sum('表'[销售])))
- 度量值函数例子
每人第一个不为空的销售 = calculate(sum('表'[销售]),FIRSTNONBLANK('表'[日期],calculate(sum('表'[销售])))) 每人最后一个不为空的销售 = calculate(sum('表'[销售]),lastNONBLANK('表'[日期],calculate(sum('表'[销售]))))
12. row函数
-
返回一个单行的表,其中包含由DAX表达式指定的新列
-
即创建一张表
-
格式:row(<name>,<expression>,[<name>,<expression>],[…])
参数 属性 描述 name 可重复 新列的名称 expression 可重复 新列使用的表达式 -
例子
查询表1 = row("总销售",sum('Row'[销售量]),"总金额",sum('Row'[销售金额]))
13. var 函数
- 可以创建度量值,也可以创建新建列
- 例子
评价 = var total='案例2'[数学]+'案例2'[英语]+'案例2'[语文] return if(total>=270,"优秀","一般")
# 3. 新建表相关函数
- calculatetable(表,条件,条件,…)
新表 = CALCULATETABLE('销售表','商品表'[品名]="A",'商品表'[进价]=0.1)