需求
两个切片器之间都被选中的情况下,实现符合切片器条件的并集的结果呈现,而非交集的结果呈现,
实现
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
)
)