Power BI:按类别计算各日期的滚动最小值
按类别计算每日最低价格(含历史值填充)
基于你的表结构需求,以下是用DAX创建计算表的实现方案,完美解决无当日数据时沿用历史最低的问题:
核心思路
- 先生成所有类别+所有日期的完整组合,避免遗漏任何日期的类别记录
- 计算每个类别每日的现有最低价格(无数据则留空)
- 对每个类别按日期取累计最小值,自动填充空白日期的历史最低值
分步实现代码
1. 生成完整的类别-日期组合表
首先创建一张包含所有可能的类别和日期组合的基础表:
AllCategoryDates = CROSSJOIN( DISTINCT(Table1[Category]), // 提取所有不重复类别 DISTINCT(Table2[Date]) // 提取所有不重复日期 )
2. 计算每个类别每日的当前最低价格
基于上面的组合表,关联原数据计算当日有价格商品的最低值:
CategoryDailyPrices = ADDCOLUMNS( AllCategoryDates, "DailyMinPrice", VAR CurrentCategory = [Category] VAR CurrentDate = [Date] RETURN CALCULATE( MIN(Table2[Price]), Table1[Category] = CurrentCategory, Table2[Date] = CurrentDate )
说明:如果某类别当日无任何商品价格数据,
DailyMinPrice会返回BLANK()
3. 生成最终带历史填充的计算表
通过累计最小值逻辑,将空白日期的价格替换为该类别到当前日期的历史最低:
FinalCategoryMinPrices = ADDCOLUMNS( CategoryDailyPrices, "CategoryMinPrice", VAR CurrentCategory = [Category] VAR CurrentDate = [Date] RETURN CALCULATE( MIN(CategoryDailyPrices[DailyMinPrice]), FILTER( ALLSELECTED(CategoryDailyPrices), CategoryDailyPrices[Category] = CurrentCategory && CategoryDailyPrices[Date] <= CurrentDate ) )
示例验证
针对你提到的场景:
- 类别X下,1月1日A商品价格$10,1月2日仅B商品价格$12
- 最终表中:
- 1月1日的
CategoryMinPrice为$10 - 1月2日的
CategoryMinPrice为MIN($10, $12) = $10,符合需求
- 1月1日的
内容的提问来源于stack exchange,提问作者Adorján László Kovács
相关产品推荐
相关产品推荐

