Power BI中用DAX计算每周新增物品数量并生成柱状图的需求
按年度每周统计新增物品数量的DAX实现
核心思路
要统计每周新增物品,关键是识别每个物品的首次出现周,然后统计每个周内首次出现的物品数量,同时用「年份+周数」的组合标识周,避免跨年时第52周与第1周的统计混淆。
步骤1:计算物品首次出现日期(可选,提升性能)
在物品表中添加计算列,存储每个物品的首次报告日期:
First Report Date = CALCULATE( MIN('物品表'[report date]), ALLEXCEPT('物品表', '物品表'[item number]) )
- 这个计算列会为每个物品标记它第一次出现在报表中的日期,后续统计时无需重复计算,提升性能。
步骤2:创建「每周新增物品数」度量值
使用以下度量值来统计每周的新增物品数量:
每周新增物品数 = VAR CurrentYearWeek = SELECTEDVALUE('日期表'[year]) & "-W" & FORMAT(SELECTEDVALUE('日期表'[weekofyear]), "00") // 生成如2025-W01的唯一周标识 RETURN CALCULATE( DISTINCTCOUNT('物品表'[item number]), FILTER( ALL('物品表'), // 生成物品首次出现的周标识,与当前统计周匹配 YEAR('物品表'[First Report Date]) & "-W" & FORMAT(WEEKNUM('物品表'[First Report Date], 2), "00") // 参数2表示周一为周起始,可按需调整 = CurrentYearWeek ) )
无计算列的纯度量值方案(灵活但性能稍弱)
如果不想添加计算列,可使用纯度量值直接计算:
每周新增物品数 = VAR CurrentWeekStart = STARTOFWEEK(MIN('日期表'[Date]), 2) // 2表示周一为周起始 VAR CurrentWeekEnd = ENDOFWEEK(MAX('日期表'[Date]), 2) RETURN CALCULATE( DISTINCTCOUNT('物品表'[item number]), FILTER( ALL('物品表'), // 当前物品在本周出现 '物品表'[report date] >= CurrentWeekStart && '物品表'[report date] <= CurrentWeekEnd // 且该物品从未在本周之前出现过 && NOT EXISTS( FILTER( ALL('物品表'), '物品表'[item number] = EARLIER('物品表'[item number]) && '物品表'[report date] < CurrentWeekStart ) ) ) )
关键细节说明
- 周标识唯一性:用
年份-W周数(如2024-W52、2025-W01)的组合,彻底解决跨年时周数重复的统计问题。 - 周起始设置:WEEKNUM函数的第二个参数可调整周起始日,比如
1是周日起始,2是周一起始,根据业务需求选择。 - 日期表关联:确保物品表的
report date与日期表的Date字段建立一对一或多对一的关系,且日期表已标记为「日期表」(Power BI模型视图中右键日期表→标记为日期表)。
示例验证
针对你提供的测试数据:
- 2025年第1周(1/3):itm0001、itm0002、itm0003首次出现,统计值为3
- 2025年第2周(1/6-1/7):itm0004、itm0005、itm0006首次出现,统计值为3
完全符合你的预期结果。
内容的提问来源于stack exchange,提问作者M_66
相关产品推荐
相关产品推荐

