Power BI中AVERAGEX计算日平均营业额结果异常求助
问题:DAX日平均营业额计算结果不符合预期
现有数据与DAX度量值
数据表
Sales rows表
| transaction_id | OrderDate | store_id | customer_id | product_id | quantity_sold | unit_price | staff_id |
|---|---|---|---|---|---|---|---|
| 1 | 01/01/2019 | 5 | 5658 | 22 | 2 | 2 | 12 |
| 2 | 01/01/2019 | 5 | 5197 | 22 | 1 | 2 | 30 |
| 3 | 01/01/2019 | 5 | 5247 | 22 | 8 | 3 | 12 |
| 4 | 02/01/2019 | 5 | 5658 | 22 | 6 | 9 | 12 |
| 5 | 02/01/2019 | 5 | 5197 | 22 | 20 | 15 | 30 |
Calendar表(dCalendar)
| transaction_date |
|---|
| 01/01/2019 |
| 02/01/2019 |
| 03/01/2019 |
| ... |
| 28/02/2019 |
现有DAX度量值
Turnover = SUMX('Sales rows', 'Sales rows'[quantity_sold] * 'Sales rows'[unit_price]) Average Daily Turnover EXPR = AVERAGEX(VALUES(dCalendar[transaction_date]), SUMX ('Sales rows', 'Sales rows'[quantity_sold] * 'Sales rows'[unit_price])) Average Daily Turnover MEASURE = AVERAGEX(VALUES(dCalendar[transaction_date]),[Turnover])
问题现象
计算结果完全不符合预期,所有日期显示相同的错误值:
- 2019年1月1日:预期值为
10(当日总营业额30除以3笔交易),实际结果为30 - 2019年2月1日:预期值为
118(当日总营业额354除以3笔交易),实际结果为354
原因分析
- 需求理解偏差:现有度量值计算的是「所有日历日期的日均总营业额」,但实际需求是「单日平均每笔交易的营业额」(单日总营业额 ÷ 当日交易笔数)。
- 上下文过滤失效:若
Sales rows与dCalendar的日期列未建立正确关系(Sales rows[OrderDate]与dCalendar[transaction_date]列名或格式不匹配),会导致内部的SUMX无法按当前日期上下文过滤数据,每次计算都是全表总营业额,最终结果等于单日总营业额而非平均值。 - 遍历对象错误:原
AVERAGEX遍历的是所有日历日期(包括无交易日期),而非当日的交易记录,逻辑完全不符合需求。
解决方法
步骤1:确保日期表关联正确
首先确认Sales rows[OrderDate]与dCalendar[transaction_date]的格式一致,并在模型中建立一对多关系(dCalendar为一端,Sales rows为多端)。
步骤2:正确的DAX度量值
1. 单日平均每笔交易营业额(匹配预期需求)
Avg Transaction per Day = DIVIDE( [Turnover], // 单日总营业额 COUNT('Sales rows'[transaction_id]), // 当日交易笔数 0 // 当日无交易时返回0,避免错误 )
2. 若需计算「有交易日期的日均总营业额」
如果实际需求是统计所有有交易日期的日均总营业额,可使用以下度量值:
Avg Daily Total Turnover = AVERAGEX( // 仅遍历有交易的日期 FILTER(VALUES(dCalendar[transaction_date]), [Turnover] > 0), [Turnover] )
内容的提问来源于stack exchange,提问作者informer
相关产品推荐
相关产品推荐

