Power BI按供应商计算平均日期差的技术问题咨询
事实表
采购表(Purchase)
| Purchase_ID | Purchase_Date | Supplier_ID |
|---|---|---|
| 1 | 16.01.2023 | a4 |
| 2 | 18.01.2023 | a8 |
| 3 | 20.01.2023 | a8 |
供应表(Supply)
| Purchase_ID | Supply_Date | Supplier_ID |
|---|---|---|
| 1 | 19.01.2023 | a4 |
| 2 | 23.01.2023 | a8 |
| 3 | 27.01.2023 | a8 |
供应商维度表
| Supplier_ID | Supplier_Name |
|---|---|
| a4 | Example_Name_1 |
| a8 | Example_Name_2 |
问题解答
你写的
TimeDiff度量值不正确。
这个度量值用MAX取当前筛选上下文里采购日期和供应日期的最大值再计算差值,根本没有按Purchase_ID做一对一的订单匹配。比如筛选供应商a8时,它会取采购日期最大值20.01.2023和供应日期最大值27.01.2023,算出7天,但实际a8的两笔订单差值是5天和7天,完全偏离了按单订单计算差值的需求。如果两表行号不一致(比如某Purchase_ID在其中一张表缺失),这个度量值还会直接忽略不匹配的行,结果完全不可靠。正确的做法是按订单行匹配计算:
- 先通过
Purchase_ID建立Purchase表和Supply表的关系,然后计算单条订单的差值:OrderTimeDiff = DATEDIFF(RELATED('Purchase'[Purchase_Date]), 'Supply'[Supply_Date], DAY) - 再基于单条差值求平均:
AvgTimeDiff = AVERAGE('Supply'[OrderTimeDiff])
或者直接用迭代度量值一步完成:
AvgTimeDiff = AVERAGEX( 'Supply', DATEDIFF(RELATED('Purchase'[Purchase_Date]), 'Supply'[Supply_Date], DAY) )这样能保证每笔订单的采购、供应日期正确匹配,计算结果符合预期。
- 先通过
可以筛选供应商后再计算日期差的平均值。
只要建立供应商维度表和采购、供应表的关联(通过Supplier_ID),使用上面的AvgTimeDiff这类度量值时,可视化筛选供应商后,计算逻辑会自动限定在筛选出的供应商范围内,只计算该供应商所有订单的日期差平均值。比如筛选Example_Name_1时,只会计算a4的订单差值(3天)的平均;筛选Example_Name_2时,会计算5天和7天的平均值(6天)。
内容的提问来源于stack exchange,提问作者RuddThreeTrees
相关产品推荐
相关产品推荐

