人生没有彩排
每一天都是现场直播

37、理解ADDCOLUMNS函数

ADDCOLUMNS函数是一个表函数,同时也是迭代函数,它会像计算列一样,迭代表的每一行并计算所给的表达式,最后给表添加一个新列。


语法和作用

语法:

ADDCOLUMNS(table_expression, name, expression[, name, expression]…)

作用:给第一参数指定的表添加派生列,派生列将在第一参数的表提供的行上下文和外部计值上下文中进行计算,最终返回包含第一参数的表的所有列和新添加的派生列的新表。

注意:添加的派生列不存在数据沿袭,也就是不能用于筛选。此外,如果第一参数所指定的表包含扩展表,那么ADDCOLUMNS函数返回的新表也会包含该扩展表,但扩展表上的列不可见。


辅助理解的例子

1、给指定的表添加新列,如下图所示:

注意,由于派生列将在ADDCOLUMNS函数的第一参数的表提供的行上下文和外部计值上下文中进行计算,因此上面的派生列中需要添加CALCULATE函数来进行行上下文转换,才可以计算得到每一行所对应的产品的数。如果去掉CALCULATE函数,则由于不存在任何筛选器,那么订单表的可见数据为所有数据,最终派生列整列都会返回全部销售额或数量的总计,如下图所示:

2、ADDCOLUMNS函数的第一参数的表可以是返回表的表函数,如果直接使用基础表,那么是含有该基础表的扩展表的,因此在派生列中可以使用存在扩展表时才能使用的函数,比如RELATED函数等,另外其返回的结果也会含有扩展表。具体如下图所示:

3、ADDCOLUMNS函数添加的派生列并不会永久保存在模型中,它只在当前度量值或查询等对象的计算中临时存在。另外由于派生列的计值环境包括外部计值环境,所以派生列的计算其实是动态的,可以根据外部计值环境的变化而变化,比如切片器的改变等。比如下图所示的,可以动态汇总切片器未选择的产品的销量:

注意:ADDCOLUMNS函数添加的派生列只能使用非限定性的列引用。

4、ADDCOLUMNS函数中添加的任何派生列都是不具有数据沿袭的,即使是直接的列引用,如下图所示:

其中使用了SELECTCOLUMNS函数去提取ADDCOLUMNS函数添加的派生列,然后SELECTCOLUMNS函数中是直接引用列的,因此会继承数据沿袭,但是由于ADDCOLUMNS函数添加的所有派生列都是无数据沿袭的,也就是说源头本身就无数据沿袭,因此后边继承得到的也是无数据沿袭,所以行上下文转换后得到的筛选器无法筛选模型中的数据,最终返回了总销售额。


总结

ADDCOLUMNS函数可以像计算列那样,给指定的表添加新的派生列,并且可以根据外部计值环境进行动态计算,是使用频率非常高的一个函数,建议掌握。

未经允许不得转载:夕枫 » 37、理解ADDCOLUMNS函数
订阅评论
提醒
guest
0 评论
最新
最久 最赞
内联反馈
查看所有评论