求DAX度量值:按用户/活动/国家分组的阈值达标最早日期
解决DAX累计达标最早日期问题
原度量值核心问题
你当前的代码仅判断单条记录的Acceptedrecords是否≥minimumthreshold,并未计算累计值,因此只能返回行级的达标日期,无法满足“累计达标后取最早日期”的需求。
修正后的DAX度量值
Earliest Cumulative达标日期 = VAR GroupContext = ALLEXCEPT('Table', 'Table'[userid], 'Table'[campaignid], 'Table'[Country]) VAR Threshold = SELECTEDVALUE('Table'[minimumthreshold]) VAR DateRange = VALUES('Table'[date]) -- 计算每个日期的累计Acceptedrecords VAR CumulativeByDate = ADDCOLUMNS( DateRange, "累计Accepted", CALCULATE( SUM('Table'[Acceptedrecords]), FILTER(GroupContext, 'Table'[date] <= EARLIER('Table'[date])) ) ) -- 筛选累计达标且当日dailyincreincentive不为空的日期 VAR QualifiedDates = FILTER( CumulativeByDate, [累计Accepted] >= Threshold && NOT(ISBLANK(CALCULATE(MAX('Table'[dailyincreincentive]), GroupContext, 'Table'[date] = EARLIER('Table'[date])))) ) -- 返回最早达标日期,无则为空 RETURN IF(NOT(ISEMPTY(QualifiedDates)), MINX(QualifiedDates, 'Table'[date]), BLANK())
代码说明
- GroupContext:锁定当前分组(userid、campaignid、Country)的上下文,确保累计计算仅在分组内进行。
- Threshold:提取当前分组的
minimumthreshold值(需保证每个分组内该值唯一)。 - CumulativeByDate:遍历分组内所有日期,计算截至每个日期的
Acceptedrecords累计总和。 - QualifiedDates:筛选出累计值达标且当日
dailyincreincentive不为空的日期集合。 - 返回结果:从达标日期集合中取最小值,若无达标日期则返回空值。
内容的提问来源于stack exchange,提问作者dda
相关产品推荐
相关产品推荐

