DAX实现GROUP BY与MIN:如何按年份统计首次售出产品数量?
统计每年首次售出的产品数量(DAX实现)
正确解决方案
以下是可实现需求的DAX代码,核心逻辑为:先计算每个产品的首次销售年份,再匹配当前上下文年份完成统计:
DEFINE MEASURE 'Sales'[首次售出产品数量] = VAR 产品首次销售年份 = ADDCOLUMNS( VALUES(Sales[ProductKey]), "@首次销售年", YEAR(CALCULATE(MIN(Sales[Order Date]), ALL(Sales))) ) RETURN COUNTROWS( FILTER( 产品首次销售年份, [@首次销售年] = SELECTEDVALUE('Date'[Calendar Year]) ) ) EVALUATE SUMMARIZECOLUMNS( 'Date'[Calendar Year], "首次售出产品数量", 'Sales'[首次售出产品数量] )
若模型中存在独立的Products表,也可通过「计算列+度量值」的组合实现更简洁的逻辑:
- 给Products表添加计算列
Products[首次销售年份] = YEAR(CALCULATE(MIN(Sales[Order Date]), ALL(Sales)))
- 编写度量值
Sales[首次售出产品数量] = CALCULATE( DISTINCTCOUNT(Products[ProductKey]), Products[首次销售年份] = SELECTEDVALUE('Date'[Calendar Year]) )
原代码问题分析
你之前的代码未能达成需求,核心问题如下:
- 第一个度量值
m1中,SUMMARIZECOLUMNS未筛选「首次销售年份等于当前上下文年份」的产品,反而通过ALL(Sales[Order Date])等清除了日期上下文,导致统计结果为所有曾售出的产品总数,与每年总售出产品数完全重合。 - 第二个尝试的代码里,
FILTER条件逻辑错误:未将产品首次销售年份与当前上下文年份关联,且ALL函数过度清除上下文导致筛选失效,最终仍统计了当年所有售出的产品。
内容的提问来源于stack exchange,提问作者Ahsen Majid
相关产品推荐
相关产品推荐

