需求
迭代的意思是就是逐行计算,当前行计算的时候需要依赖上一行的计算结果
实现
1 Amount_sumx 迭代 =
sumx(//遇到手套和帽子就不计算销售额
order_2,//逐行计算的是订单表
var current_type = order_2[产品子类别] //中间计算过程,计算某个参数也可以用var和return结构
return
if(current_type in{'手套','头盔'},
0,
[销售额]
)
)
2 AmountWithDiscount = //
sumx(
'客户表', //793条
sumx(
'产品表',//1862条,两次sumx类似程序中的双重循环,如果所有产品所有客户都有买,那么执行次数为1862*793 = 1476566
var productDiscount = '产品表'[折扣]
var CustomerDiscount = '客户表'[折扣2]
var amount = [TotalAmount] //每个订单的金额
return Amount*productDiscount*CustomerDiscount
)
2 AmountWithDiscount_2 = //
sumx(
'订单表',//只迭代订单表
var productDiscount = RELATED('产品表'[折扣])
VAR CustomerDiscount = RELATED('客户表'[折扣2])
VAR Amount = [TotalAmount]
return Amount*productDiscount*CustomerDiscount
)
3 AmountWithDiscount_3 = //使用summarize函数先做一次group,减少Sales表的循环次数
sumx(
summarize('订单表','产品表'[折扣],'客户表'[折扣2]),
var productDiscount ='产品表'[折扣] //从折扣出发,根据数据沿袭关系去找对应的订单金额
var CustomerDiscount = '客户表'[折扣2] //从折扣出发,根据数据沿袭关系去找对应的订单金额
var Amount = [TotalAmount] //从折扣出发,根据数据沿袭关系去找对应的订单金额
return Amount*productDiscount*customerDiscount
)
SUMMARIZE
SUMMARIZE (<table>, <groupBy_columnName>[, <groupBy_columnName>]…[, <name>, <expression>]…)
SUMMARIZE(ResellerSales_USD
, DateTime[CalendarYear]
, ProductCategory[ProductCategoryName]
, "Sales Amount (USD)", SUM(ResellerSales_USD[SalesAmount_USD])
, "Discount Amount (USD)", SUM(ResellerSales_USD[DiscountAmount])
)