需求
实现
1 summary table = summarize(order_2,order_2[产品子类别],"订单金额",sum(order[订单金额]))
2 bottom5 table = topn(5,'summary table','summary table'[订单金额],desc)
// var v_sum_table = summarize(order_2,order_2[产品子类别],"订单金额",sum(order_2[订单金额]))
// return topn(5,v_sum_table,[订单金额],desc) --这个写法的问题在于直接用物理表取数,导致最终数据不受外部筛选器的影响
3 except top5 table = calculatetable('summary table',except('summary table','top5 table'))
// var v_sum = summarize(all(order_2),order_2[产品子类别],"订单金额",[销售额])
// var v_top5 = TOPN(5,v_sum,[订单金额])
// return except(v_sum,v_top5)
4 top5 and others table =
var top5_2 = selectcolumns('top5 rable',"产品子类型",'top5 table'[产品子类别],"总金额",'top5 table'[订单金额])
var others_2 = seleccolumns('except top5 table',"产品子类型","其他","总金额",'except top5 table'[订单金额])
return union(top5_a,others_a)
EXCEPT(<table_expression1>, <table_expression2>
备注
如果某行同时出现在两个表中,则该行及其重复项不会出现在结果集中。 如果某行仅出现在 table_expression1 中,则该行及其重复项将出现在结果集中。
列名将与 table_expression1 中的列名相匹配。
返回的表的世系基于 table_expression1 中的列,与第二个表中列的世系无关。 例如,如果第一个 table_expression 的首列有模型中基本列 C1 的世系,则 Except 将基于第二个table_expression 首列中的值的可用性来减少行,并保持基本列 C1 的世系不变。
这两个表必须具有相同的列数。
列基于位置进行比较,并且不会进行类型强制转换的数据比较。
返回的行集取决于两个表达式的顺序。
返回的表不包括与 table_expression1 相关的表中的列。
在已计算的列或行级安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。
示例