目录
一、操作表的函数
1、使用CALCULATETABLE
CALCULATETABLE返回一张表
1.1、什么时候使用?
- 当需要在模型的列上应用过滤器
- 需要使用上下文转换和筛选上下文修饰的时候
1.2、和filter的对比?
CALCULATETABLE | FILTER |
列筛选,筛选上下文 | 行上下文筛选,通过迭代逐一寻找满足条件的行 |
可以和筛选器搭配使用,如ALL,USERRELATIONSHIPS,CROSSFILTER等 | |
不可以使用度量值作为条件使用 | 可以使用度量值作为筛选条件 |
2、表的基本操作
2.1 ADDCOLUMNS
2.1.1 什么时候使用?
在原表基础上,想创造新的计算列。ADDCOLUMNS是一个迭代,行上下文。
通常和FILTER搭配使用。在进行复杂的计算时,搭配使用构建虚拟表。
2.2 SUMMARIZE
2.2.1 什么时候使用
主要用途是仅检索现有的值的组合,而不是完整的值列表,相当于GROUP BY的功能。
SUMMARIZE也可以像ADDCOLUMNS一样使用,但是用SUMMARIZE方法添加计算列不推荐使用,因为这样会导致行上下文和筛选上下文同时出现,不易于理解。如果需要使用SUMMARIZE添加列时,最好和ADDCOLUMNS搭配使用。
2.3 CROSSJOIN
2.3.1 什么时候使用?
返回卡迪尔集,排列出两个量之间所有的组合。更常用于查询而不是度量。
但是如果业务需求展示两张表中的组合数据,可以考虑使用CROSSJOIN,虽然也可以使用SUMMARIZE组合,但是SUMMARIZE扫描两张表的工作量可能会很大,性能较差,这时就考虑使用CROSSJOIN实现。
2.4 UNION
2.4.1 什么时候使用?
主要在创建计算表的时候使用,度量值中使用的情况会相对更少。注意使用的,UNION是不会去重,如果需要去重,之后使用DISTINCT达到效果,但是UNION可以保持原有的关系,使用DISTINCT只会原有的关系并不存在了,因为输入的表格是UNION之后的表,不是原有的表。这时候想要去计算总数SUM,需要相对更加复杂的代码实现(重新写SUM计算列,创建新的列)。
如果在使用DISTINCT之后想要保留原有的关系,可以使用TREATAS函数。
2.5 INTERSECT
2.5.1 什么时候使用?
返回交集。在TREATAS出现之前,INTERSECT的使用频率高很多。INTERSECT会保留原有关系,但是只保留第一个表的关系。
2.6 EXCEPT
2.6.1 什么时候使用?
取左集。针对两张表,在第一张表中去除第二张表中出现的值。to的值。同INTERSECT一样,只保留第一张表的关系。
二、表作筛选器
操作表的函数通常用于为CALCULATE参数构建复杂的筛选器。计算表最后当作一个已经筛选后的参数,传给CALCULATE使用,使用CALCULATE覆盖当前(外部筛选)类别和教育的当前筛选器。
书中例子在P384-P388
1、OR函数的使用
1.1 什么时候使用?
PBI报表上,切片器不能实现OR的功能,选择两个条件,就是两者必须成立。这时候需要借助OR函数在度量值中强制优先确定筛选。
四、创建计算表
1、SELECTCOLUMNS
1.1 什么时候使用?
和SQL中的SELECT类似。当你只想要原表中的几列当作新的表时,可以使用此函数。
SELECTCOLUMNS也可以用来新增列,必须提供每一列的名称和表达式,和sSUMMARIZE函数不同的是,SUMMARIZE函数有GROUP BY的共呢个,此函数仅仅是选中列。
2、使用ROW创建静态表
2.1 什么时候使用?
返回只有一行的表。ROW需要成对的名称和表达式,自从表构造函数表达的出现,ROW函数就较少的被使用了。
表函数构造表达: { (value1,value2) }
3、使用DATATABLE创建静态表
3.1 什么时候使用?
返回多行的表。DATATABLE创建一个表,不仅指定列名,还指定每列的数据类型及其内容。
4、使用GENERATESERIES
4.1 什么时候使用?
通常使用该函数船舰切片器的简单表,设置不同参数。