暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PowerBI-Dax-TREATAS

BISeven 2021-06-06
1691

当两张表之间没有建立物理关系时,但又需要一张表筛选另一张表,可以利用treatas函数建立虚拟关系,其语法如下:

TREATAS(table, columnName, columnName…)

该函数的作用是将table中的列看作是columnName,继承ColumnName的关系(数据沿袭)

返回值为一张表

注意:

1. Table 必须为表表达式,例如利用values, distinct等函数生成的表

2. 参数columnName在建立关系的同时,会清除应用在columnName上的筛选器

 

 

两个表之间并没有建立关系,那度量值score.notreatas不能够被学生表中的StuName筛选,而利用TREATAS函数建立了虚拟关系的度量值score.treatas就能被筛选了

score.notreatas
=
SUM ( 'YiLuXiangBei Stu Score'[Score] )
score.treatas
=
CALCULATE (
SUM ( 'YiLuXiangBei Stu Score'[Score] ),
TREATAS (
VALUES ( 'YiLuXiangBei Stu Student'[StuName] ),
'YiLuXiangBei Stu Score'[Stu]
)
)

 

来自学生表的StuName不能筛选度量值score.notreatas,所以其结果都140;而利用TREATAS函数建立了虚拟关系后,学生表中的StuName继承了StuScore的关系,能够筛选度量值score.treatas,其结果为70

 

以上就是TREATAS的用法,比较简单,接下来我们看一下:参数columnName在建立关系的同时,会清除应用在columnName上的筛选器这句话该怎么理解?

我们还是来看度量值score.treatas中的TREATAS函数,此时将Student表中的StuName看作是成绩表中的Stu,因此StuName能够筛选度量值,那来自成绩表的Stu到底能不能筛选该度量值呢?

score.treatas
=
CALCULATE (
SUM ( 'YiLuXiangBei Stu Score'[Score] ),
TREATAS (
VALUES ( 'YiLuXiangBei Stu Student'[StuName] ),
'YiLuXiangBei Stu Score'[Stu]
)
)

 

结果是Stu并不能筛选度量值score.treatas'YiLuXiangBei Stu Score'[Stu]作为TREATAS函数的第二参数时,清除了该列的筛选器,所以Stu不能够起到筛选的作用,可以利用KEEPFILTERS函数保持该列的筛选作用。

 

我是BISeven,欢迎与我交流

参考:

https://www.powerbigeek.com/understanding-treatas-function/

https://www.powerbigeek.com/understanding-treatas-function/

PowerBI-Dax-KEEPFILTERS

 


文章转载自BISeven,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论