需求
需求1:
需求2:
实现
1.需求1实现:
(1)在power query中添加列-添加索引列;
(2)根据索引列进行累加计算。
度量值 累计聚合销售额 =
var current_pro_type = selectedvalue('product type'[index])
return calculate(sum(order_2[订单金额],'product type'[index]<=current_po_type,all(order_2))
2.需求2实现:
(1)在product表中添加按照产品名称加总的金额列,命名为"amt";
(2)计算位次
1)按照product表里的"amt"列计算按照销售金额排名的位次度量值 cnt大于等于current(有多少产品的销售金额大于当前商品);
2)按照当前筛选上下文计算位次度量值 cnt大于等于current2;
(3)按照位次计算累计销售额。
方式1:
product = addcolumns(values(order_2[产品名称]),"amt",[total amount])
度量值 cnt大于等于current =
var v_current_amt=[total amount]
return
calculate(countrows('product'),filter('product','product'[amt]>= v_current_amt)) //筛选出对应物理表中大于等于当前行次的记录,并计数,此时,外部筛选条件只传递给了视觉对象,未传递给物理表
注意,上述实现方式在创建该度量值时使用了实现创建好的产品表,由于该表的上下文是创建时的上下文,即计算销售额排名是以原表为基础,而非外部筛选器筛选过的表为基础,因此在存在其他外部筛选器的情况下,这种无法合并外部上下文的特性会导致度量值的计算错误。如下图
方式2:
度量值 cnt大于等于current2 =
var v_product_table = //内存中生成一个包含所有产品名称及销售金额的表,而不是提前生成一个物理表
addcolumns(calculatetable(values(order_2[产品名称]),
all(order_2[产品名称]) // 首先移除原表产品名称列外部筛选器
),
"amt2",
[total amount]
)
var v_current_amt = [total amount]
return
calculate(countrows(values(order_2[产品名称])), //calculate 会传入计算时的外部筛选上下文,影响到values中的计算结果
filter(v_product_table,[amt2] >= v_current_amt) //按照目前的上下文,筛选出变量表中金额大于等于当前行的记录
)
Accumualte amt2 =
var v_product_table = addcolumns(
calculatetable(
values(order_2[产品名称],removefilters(order_2[产品名称])
),
"amt2",
[total amount])
var v_current_amt = [Total Amount]
return calculate([Total Amount],filter(v_product_table,[amt2] >= v_current_amt)) //外部筛选条件传递给变量表
Accumulate Percent 2=
var v_totale_amt = calculate([Total Amount], Allselected(order_2))
return divide([accumulate amt 2],v_total_amt)