重点函数 | TREATAS 函数介绍

本期重点:
通过TREATAS建立虚拟筛选
对TREATAS参数的理解及优化

小伙伴们好啊,今天我们介绍的函数是TREATAS。该函数在虚拟关系的筛选中被广泛使用,相信不少小伙伴早有耳闻。接下来,就随我一起学习这个函数吧。

语法

TREATAS(table_expression, <column>[,<column>[, <column>[,…]]]} )

官方文档对该函数的描述是,将表表达式的结果作为筛选器应用于不相关表中的列。还是太抽象了点,一起通过案例来了解吧。

数据模型

file

在我们的模型中,一共有两张表——日期和销售目标。在销售目标中,只有年份和月份字段,而详细的日期字段缺失,无法直接与日期表建立直接的物理关系。

案例一:单列筛选(求各年份的销售目标)

不通过辅助列建立物理关系,我们如何通过日期表的年份求得对应的销售目标呢。一起来看下TREATAS的实现方式,代码如下:

 年度销售目标 =
CALCULATE (
    SUM ( '销售目标'[销售目标] ),
    TREATAS ( VALUES ( '日期'[年份序号] ), '销售目标'[年份] )
)

结果如下图示:

file

正如TREATAS这个函数名的字面意思描述的那样,意即把当作。关键在于,把什么当作什么呢。简单的说,就是把一参当作二参的筛选器,通过一参筛选二参。
在这个案例中,我们希望通过日期表中的年份序号筛选销售目标中的年份,所以我们把日期表的年份序号用作筛选条件(一参),而销售目标的年份则是被一参筛选的列(二参)。至此,相信大家对这个函数已经有了初步的认识。

案例二:多列筛选(求各年份月份的销售目标)

稍微复杂点的情况是,求每一年中的各月份的销售目标,效果图如下:
file

代码如下:

 年月销售目标 V1 =
CALCULATE (
    SUM ( '销售目标'[销售目标] ),
    TREATAS ( VALUES ( '日期'[年份序号] ), '销售目标'[年份] ),
    TREATAS ( VALUES ( '日期'[月份序号] ), '销售目标'[月份] )
)

对于这段代码的理解思路同案例一,用当前上下文的年份序号和月份序号充当销售目标表的年份和月份筛选器,最后计算销售目标。
多列筛选时,如考虑代码运行速度,可以通过SUMMARIZE优化,代码如下:

 年月销售目标 V2 =
CALCULATE (
    SUM ( '销售目标'[销售目标] ),
    TREATAS ( SUMMARIZE ( '日期', '日期'[年份序号], '日期'[月份序号] ), '销售目标'[年份], '销售目标'[月份] )
)

回顾一下我们在文章开始部分对TREATAS函数的语法介绍和函数描述,相信大家会有豁然开朗的感觉。
V2中的TREATAS的一参是通过SUMMARIZE函数返回的表表达式(table_expression),而后面的参数([, [,[,…]]]}),则是和SUMMARIZE返回的表中的列一一对应的需被筛选的列。
好了,今天的分享就到这里了。小伙伴们如有问题或者有想了解的函数,请留言说明吧。祝大家学习愉快。

  • PowerPivot工坊原创文章,转载请注明出处!

    如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。


长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~

Power Pivot工坊