You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI中如何匹配两个表的最近3D点并获取对应属性

Power BI 3D空间点最近邻匹配最优方案

你之前的方案核心是通过坐标取整做等值匹配,精度受取整参数影响,属于近似匹配,无法保证拿到真正的最近邻点属性,以下是两种更优的实现方案:

方案1:DAX计算列方案(适合中小数据量,实时计算)

直接基于3D欧氏距离的平方做比较(不需要开平方,相对大小一致,可提升计算性能),直接匹配最近点:

匹配属性 = 
VAR CurrentX = '表1'[X]
VAR CurrentY = '表1'[Y]
VAR CurrentZ = '表1'[Z]
// 计算当前点到所有表2点的最小距离平方
VAR MinDisSquare = MINX(ALL('表2'), (CurrentX - '表2'[X])^2 + (CurrentY - '表2'[Y])^2 + (CurrentZ - '表2'[Z])^2)
// 提取最小距离对应点的属性
RETURN CALCULATE(SELECTEDVALUE('表2'[属性]), ALL('表2'), (CurrentX - '表2'[X])^2 + (CurrentY - '表2'[Y])^2 + (CurrentZ - '表2'[Z])^2 = MinDisSquare)

该方案适配两个表总数据量10万条以内的场景,完全无精度损失,不需要提前做坐标取整处理。如果存在多个点距离完全一致的情况,SELECTEDVALUE会返回空,可替换为FIRSTNONBLANK('表2'[属性],1)取第一个匹配值。

方案2:Power Query预处理方案(适合大数据量,加载时计算)

如果数据量较大,DAX实时计算性能不足,可以在数据加载阶段用M语言完成匹配,不占用报告运行时资源:

let
    // 缓存表2数据到内存,提升遍历效率
    BufferedTable2 = Table.Buffer(表2),
    // 为表1添加匹配列
    AddMatchCol = Table.AddColumn(表1, "匹配属性", (currentPoint) =>
        let
            // 计算当前点到所有表2点的距离平方
            AddDisCol = Table.AddColumn(BufferedTable2, "距离平方", (p) => Number.Power(currentPoint[X]-p[X],2) + Number.Power(currentPoint[Y]-p[Y],2) + Number.Power(currentPoint[Z]-p[Z],2)),
            // 按距离升序排序
            SortByDis = Table.Sort(AddDisCol,{{"距离平方", Order.Ascending}}),
            // 取最近点的属性
            MatchAttr = SortByDis{0}[属性]
        in
            MatchAttr
    )
in
    AddMatchCol

内容的提问来源于stack exchange,提问作者Fishza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:24:03