8.2 PowerBI系列之DAX函数专题-进阶-实现切片器筛选之间的or逻辑

需求

两个切片器之间都被选中的情况下,实现符合切片器条件的并集的结果呈现,而非交集的结果呈现,
在这里插入图片描述
在这里插入图片描述

实现

or #1 =
var occupations = values('customer'[occupation]) --获取到当前切片器选中的值
var bands = values('product'[brand])
return sumx( --sumx将calculatetable返回的表,根据当前年份的上下文,计算累加销售额
					calculatetable(
						filter(--获取到当前两个切片器or条件的所有sales记录
						'sales',
						or(related('customer'[occupation]) in occupations,--由于occupation不是sales的字段,所以需要related一下,注意,这里related的时上面取到的切片器中的值
							related('product'[brand]) in bands
							)
						),
						all('customer'[occupation]),--在caculatetable计算中获取所有的记录,排除当前两个切片器的and关系,然后再与上面filter中获得的记录取交集
						all('product'[brand])
					),
				'sales'[net price]
)
or #2 =
var occupations = values('customer'[occupation]) --获取到当前切片器选中的值
var bands = values('product'[brand])
return  calculate(
						sum('sales'[net price]),
						calcultaetable(
						filter(--获取到当前两个切片器or条件的所有sales记录
						'sales',
						or(related('customer'[occupation]) in occupations,--由于occupation不是sales的字段,所以需要related一下,注意,这里related的时上面取到的切片器中的值
							related('product'[brand]) in bands
							)
						),
						all('customer'[occupation]),--在caculatetable计算中获取所有的记录,排除当前两个切片器的and关系,然后再与上面filter中获得的记录取交集
						all('product'[brand])
					)
)
or #3 =
var occupations = values('customer'[occupation]) --获取到当前切片器选中的值
var bands = values('product'[brand])
return  calculate(
						sum('sales'[net price]),
						calcultaetable(
						filter(--获取到当前两个切片器or条件的所有sales记录
						summarize('sales','customer'[occupation],'product'[brand]),
						or('customer'[occupation] in occupations,--由于上面提前准备好了一个包含需要列的table,这里不需要related
							'product'[brand] in bands
							)
						),
						all('customer'[occupation]),--在caculatetable计算中获取所有的记录,排除当前两个切片器的and关系,然后再与上面filter中获得的记录取交集
						all('product'[brand])
					)
)
or #4 =
var occupations = values('customer'[occupation]) --获取到当前切片器选中的值
var bands = values('product'[brand])
return  calculate(
						sum('sales'[net price]),
						filter(--获取到当前两个切片器or条件的所有sales记录
						crossjoin(all(customer[occupation]),all('product'[brand])), --利用crossjoin组装包含两个字段的笛卡尔积的表
						or('customer'[occupation] in occupations,--由于上面提前准备好了一个包含需要列的table,这里不需要related
							'product'[brand] in bands
							)
						)
)
or #5 =
return  calculate(
						sum('sales'[net price]),
						union(--获取到当前两个切片器or条件的所有sales记录
						crossjoin(values('product'[brand]),all('customer'[occupation])), --相当于SQL做一次left join,对所有选中的brand匹配所有的occupation
						crossjoin(all('product'[brand],values('customer'[occupation])), --对选中的occupation匹配所有的brand
						)
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值