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

PowerBI计算组的选择表达式的应用

前言

PowerBI的计算组是一个很强大的功能,它能够批量更改度量值的计算逻辑,并提供了动态数据格式功能,能够帮助我们实现许多技巧,在某些场景下具有不可代替的作用。而在2025年5月18日的更新中,计算组又迎来了一次增强,新增的选择表达式能够对计算组的计算行为进行更精细的控制。

在以前,计算组只有当单个计算项被选中时才会生效,计算项被多选或未选时都不会生效。而现在有了选择表达式后,就可以为计算项的多选或未选的情况引入额外的计算逻辑,在某些场景中能够带来更友好的交互体验。比如在单位切换或货币切换等单选才有意义的场景中,就可以在多选或未选时提供人性化提示或执行默认计算逻辑。

目前计算组的选择表达式共有两种类型,如下表所示:

选择表达式的类型 生效条件
multipleOrEmptySelectionExpression 已选择多个计算项、已选择非现有计算项、或已选择了有冲突的选项
noSelectionExpression 未选择任何计算项

再加上原来计算组的计算项被单选时才生效的情况,现在有了选择表达式后,计算组的计算项无论是被单选、多选、或未选时都可以分别执行对应的计算逻辑,大大提高了灵活性。

而且选择表达式的计值流程与之前计算项的计值流程是一致的,区别只在于生效的条件不一致,因此在已经掌握了计算组的前提下,也能够快速掌握选择表达式的使用。

如果对计算组的功能不了解,那么可以先阅读这篇文章:PowerBI的计算组功能是什么?怎么用?

选择表达式的设置

目前选择表达式的设置并没有集成在PowerBI Desktop中,但可以通过TMDL视图或外部工具进行定义。如下图所示的就是通过TMDL视图进行定义的计算组和选择表达式:

但TMDL视图还是太过硬核了,不方便编辑,因此还是使用外部工具来编辑会更简单一点,目前最新版的 Tabular Editor 2 或 Tabular Editor 3 都已经支持该选择表达式的编辑。

无论是Tabular Editor 2或3,在编辑选择表达式前都需要稍微设置一下,具体如下:

1、首先在Tabular Editor的设置中,将“允许未支持的PowerBI特性”选项打开,如下图所示:

2、然后将模型的兼容性级别设置为:1609

经过上面的设置后,就可以在计算组的属性中看到选择表达式的属性和编辑栏了,如下图所示:

选择表达式的应用

下面创建一个增加数值的计算组,稍微演示一下选择表达式的作用。计算组的计算项和两个选择表达式的设置如下所示:

1、计算项:+10

// 计算项:+10
Expression = SELECTEDMEASURE()+10
Format String Expression = """增加数值-计算项(+10):""0;""增加数值-计算项(+10):""-0"

2、计算项:+20

// 计算项:+20
Expression = SELECTEDMEASURE()+20
Format String Expression = """增加数值-计算项(+20):""0;""增加数值-计算项(+20):""-0"

3、选择表达式:No Selection Expression

// 选择表达式:No Selection Expression
No Selection Expression = SELECTEDMEASURE()+80
No Selection Format String Expression = """增加数值-未选(+80):""0;""增加数值-未选(+80):""-0"

4、选择表达式:Multiple Or Empty Selection Expression

// 选择表达式:Multiple Or Empty Selection Expression
Multiple Or Empty Selection Expression = SELECTEDMEASURE()+90
Multiple Or Empty Selection Format String Expression = """增加数值-多选(+90):""0;""增加数值-多选(+90):""-0"

设置完成后,保存并返回PowerBI,然后效果如下图所示:

1、计算项单选+10时的结果:

2、计算项单选+20时的结果:

3、计算项未选时的结果:

需要注意的是,未选时并不需要添加计算组的切片器或筛选器,未选的选择表达式一样会生效的。如下图所示,将计算项的切片器去掉,一样可以得到同样的结果:

4、计算项多选时的结果:

以上就是设置了选择表达式后的计算组的效果,无论计算项是被单选、多选、或未选时,都可以针对不同的选择情况来执行不同的计算逻辑,使得灵活度大大增加。

再比如以下单位切换的场景中,当用户未选或多选单位时,就可以在未选时使用默认的单位,在多选时则可以给出人性化提示,如下图所示:

1、未选时使用默认单位:

2、单选时则使用所选的单位:

3、多选时则给出提示:

那么关于计算组的选择表达式的应用就介绍到这里,更多的应用技巧可以自行发掘。

计算组的优先级影响

选择表达式只是计算组中的一部分,如果存在多个计算组时,选择表达式的应用顺序也与之前的计算项一样,同样会受到计算组的优先级的影响。

在考虑计算组的优先级问题时,将选择表达式当作之前的计算项来理解即可,计算组的优先级的计值流程还是一致的,并没有发生变化。具体可参考这篇文章:PowerBI的计算组之间的优先级设置

下面来看一个案例。在前面增加数值的案例中,再添加一个正负切换的计算组,使用到的计算项和选择表达式如下:

// 计算组-正负切换
计算项:+ = ABS(SELECTEDMEASURE())
计算项:- = -ABS(SELECTEDMEASURE())
No Selection Expression = -ABS(SELECTEDMEASURE())
No Selection Format String Expression = "正负切换-未选(-):0;正负切换-未选(-):-0"
Multiple Or Empty Selection Expression = ABS(SELECTEDMEASURE())
Multiple Or Empty Selection Format String Expression = "正负切换-多选(+):0;正负切换-多选(+):-0"

然后,将计算组-增加数值的优先级设置为10,计算组-正负切换的优先级设置为20,如下图所示:

此时,报表的结果如下图所示:

由于两个计算组都未选择任何计算项,因此两个计算组都使用未选时的选择表达式,计算组-正负切换的未选行为是将度量值的结果更改为负数,而计算组-增加数值的未选行为是将度量值的结果增加80。

又因为计算组-正负切换的优先级数值较大,因此最终的计算逻辑等于如下:

-ABS( [度量值-销售数量] + 80 )

再然后,如果反过来,将计算组-增加数值的优先级设置为20,计算组-正负切换的优先级设置为10,则报表结果如下图所示:

此时的计算逻辑等于如下:

-ABS( [度量值-销售数量] ) + 80

由于计算组间的优先级的计值流程没变化,因此就简单介绍到这里。如果对计算组的优先级不太了解,那么可以避免同时使用多个计算组。

但也要注意,未选时的选择表达式是不需要添加筛选器的,只要定义了计算组,未选表达式就会生效,如果定义了多个计算组,那么可能也需要考虑计算组的优先级的影响。

SelectionExpressionBehavior 模型设置

随着计算组选择表达式的推出,还新增了一个模型级别的属性:selectionExpressionBehavior,它可以用来控制模型中的计算组的选择表达式的行为,该属性可以设置为以下三个值:

  • Automatic,这是默认值,目前与 Nonvisual 相同,这可确保现有模型不会更改行为,将来兼容级别设为自动的模型将改用Visual, 届时将会有公告。
  • Nonvisual,如果计算组未定义 multipleOrEmptySelection 表达式,则计算组返回 SELECTEDMEASURE(),并在按计算组分组时隐藏分类汇总值。
  • Visual,如果计算组未定义 multipleOrEmptySelection 表达式,则计算组返回 BLANK()。 按计算组分组时,小计值根据计算组上下文中的所选度量值来确定。

目前,该属性可以在 Tabular Editor 3 中进行编辑,Tabular Editor 2 还不支持该属性,如下图所示:

总结

计算组的选择表达式能够对计算组的计算行为进行更精细的控制,在某些场景中能够带来更友好的交互体验,建议掌握。

未经允许不得转载:夕枫 » PowerBI计算组的选择表达式的应用