You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI:按类别计算各日期的滚动最小值

按类别计算每日最低价格(含历史值填充)

基于你的表结构需求,以下是用DAX创建计算表的实现方案,完美解决无当日数据时沿用历史最低的问题:

核心思路

  1. 先生成所有类别+所有日期的完整组合,避免遗漏任何日期的类别记录
  2. 计算每个类别每日的现有最低价格(无数据则留空)
  3. 对每个类别按日期取累计最小值,自动填充空白日期的历史最低值

分步实现代码

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,符合需求

内容的提问来源于stack exchange,提问作者Adorján László Kovács

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 14:39:55