如何用DAX提取半整数±0.2范围内值及对应最近值?
DAX计算列实现半整数范围筛选及最近值提取
针对你提出的需求,我们可以通过两个DAX计算列分步实现:
1. 标记符合范围条件的行
首先创建IsInRange计算列,筛选出[Order]值落在{0.5,1.0,1.5,2.0,2.5,3.0}±0.2范围内的行:
IsInRange = VAR CurrentOrder = 'Table'[Order] VAR NearestHalfInteger = ROUND(CurrentOrder * 2, 0) / 2 VAR Diff = ABS(CurrentOrder - NearestHalfInteger) RETURN IF(Diff <= 0.2 && NearestHalfInteger >= 0.5 && NearestHalfInteger <= 3.0, TRUE(), FALSE())
- 核心逻辑:
- 用
ROUND(CurrentOrder * 2, 0) / 2快速定位当前[Order]值对应的最近半整数 - 计算绝对差值并判断是否≤0.2,同时限制半整数在指定集合范围内
- 用
2. 筛选每个半整数组的最近值
接着创建IsClosest计算列,在符合范围的行中,标记出每个半整数对应的最近[Order]值:
IsClosest = VAR CurrentOrder = 'Table'[Order] VAR NearestHalfInteger = ROUND(CurrentOrder * 2, 0) / 2 VAR CurrentDiff = ABS(CurrentOrder - NearestHalfInteger) VAR MinDiffInGroup = CALCULATE( MIN(ABS('Table'[Order] - NearestHalfInteger)), ALL('Table'), 'Table'[IsInRange] = TRUE(), ROUND('Table'[Order] * 2, 0) / 2 = NearestHalfInteger ) RETURN IF('Table'[IsInRange] = TRUE() && CurrentDiff = MinDiffInGroup, TRUE(), FALSE())
- 核心逻辑:
- 通过
CALCULATE配合ALL('Table'),忽略当前行上下文,筛选出同一半整数组内(且符合范围条件)的最小差值 - 对比当前行的差值与组内最小差值,相等则标记为该半整数对应的最近值行
- 通过
最终结果
筛选IsClosest = TRUE()的行,即可得到你需要的数据集:每个指定半整数±0.2范围内的最近[Order]值对应的行。
内容的提问来源于stack exchange,提问作者hic24
相关产品推荐
相关产品推荐

