PowerPivot DAX:基于另一列最常见值创建计算列
在PowerPivot中按销售额权重填充缺失的账户ID(Acct_ID)
我的PowerPivot模型内有一张交易数据表,包含Cust_ID(客户ID)、Acct_ID(账户ID)与Sales(销售额)字段,部分Acct_ID记录缺失,需要为这些缺失记录(以及同一客户的所有记录)填充该客户下按销售额统计占比最高的Acct_ID。
原始数据
| Cust_ID | Acct_ID | Sales |
|---|---|---|
| 225 | ABC | 10 |
| 225 | ABC | 50 |
| 225 | DEF | 0 |
| 225 | 10 | |
| 225 | 20 | |
| 588 | XYZ | 500 |
预期结果
| Cust_ID | Acct_ID | Sales | Final_Acct_ID |
|---|---|---|---|
| 225 | ABC | 10 | ABC |
| 225 | ABC | 50 | ABC |
| 225 | DEF | 0 | ABC |
| 225 | 10 | ABC | |
| 225 | 20 | ABC | |
| 588 | XYZ | 500 | XYZ |
解决方案:创建DAX计算列
通过嵌套DAX函数实现需求,核心逻辑是先按客户分组计算各账户的总销售额,再筛选出销售额最高的账户ID:
Final_Acct_ID = VAR CurrentCust = '交易数据表'[Cust_ID] -- 汇总当前客户下非空Acct_ID的总销售额 VAR AccountSalesSummary = SUMMARIZE( FILTER('交易数据表', '交易数据表'[Cust_ID] = CurrentCust && NOT(ISBLANK('交易数据表'[Acct_ID]))), '交易数据表'[Acct_ID], "TotalSales", SUM('交易数据表'[Sales]) ) -- 提取总销售额最高的Acct_ID(多账户销售额相同时取第一个) VAR TopAccount = MAXX( TOPN(1, AccountSalesSummary, [TotalSales], DESC), '交易数据表'[Acct_ID] ) RETURN TopAccount
逻辑拆解
- CurrentCust:锁定当前行的客户ID,确保后续计算仅针对该客户。
- AccountSalesSummary:过滤当前客户的非空账户记录,计算每个账户的累计销售额。
- TopAccount:从汇总结果中筛选出销售额最高的账户,若存在并列最高,返回排序后的第一个账户ID。
- 返回值:所有记录的
Final_Acct_ID统一为该客户的最优账户ID,完全匹配示例需求。
内容的提问来源于stack exchange,提问作者waealu
相关产品推荐
相关产品推荐

