基于双日期的DAX度量开发:按CYCLE_TYPE规则获取PERIOD内QTY
基于双日期逻辑的DAX度量实现(FORECAST)
这里直接给出满足需求的DAX度量实现:
FORECAST = VAR CurrentPeriod = SELECTEDVALUE('Table'[PERIOD]) VAR MaxCycleDateInPeriod = CALCULATE( MAX('Table'[CYCLE]), ALL('Table'), 'Table'[PERIOD] = CurrentPeriod ) RETURN SWITCH( TRUE(), SELECTEDVALUE('Table'[CYCLE_TYPE]) = "CURRENT", CALCULATE( SUM('Table'[QTY]), -- 若单条记录对应唯一QTY,可替换为MAX('Table'[QTY]) 'Table'[PERIOD] = CurrentPeriod ), SELECTEDVALUE('Table'[CYCLE_TYPE]) = "OTHER", CALCULATE( SUM('Table'[QTY]), -- 同上,根据实际数据结构调整聚合函数 'Table'[PERIOD] = CurrentPeriod, 'Table'[CYCLE] = MaxCycleDateInPeriod ), BLANK() -- 处理未定义的CYCLE_TYPE场景 )
关键逻辑说明:
- 变量初始化:
CurrentPeriod:捕获当前上下文选中的PERIOD日期值,确保后续筛选基于当前周期MaxCycleDateInPeriod:计算当前PERIOD范围内的最大CYCLE日期,通过ALL('Table')清除额外上下文筛选,保证取到的是整个周期的最大值
- 分支处理:
- 当
CYCLE_TYPE为"CURRENT"时,直接聚合当前PERIOD对应的所有QTY值 - 当
CYCLE_TYPE为"OTHER"时,仅筛选当前PERIOD中CYCLE日期为最大值的记录,再聚合对应QTY - 默认返回
BLANK(),避免因未匹配的CYCLE_TYPE导致错误输出
- 当
适配提示:
- 如果每个
PERIOD+CYCLE组合对应唯一QTY值,将SUM替换为MAX或MIN更合理 - 若
PERIOD是日期区间而非单个日期,需调整CurrentPeriod的获取逻辑,比如用VALUES('Table'[PERIOD])配合区间判断
内容的提问来源于stack exchange,提问作者SkyBest I
相关产品推荐
相关产品推荐

