如何在Power BI中仅通过PowerQuery实现COG坐标归属包围盒的判断功能
实现方案
完全可以在Power BI环境下全链路完成匹配,不需要Excel中转,提供两种常用实现路径:
PowerQuery实现(推荐,性能最优)
适合数据量较大的场景,在数据预处理阶段完成匹配,无需占用报表运算资源:
- 确保PowerQuery中已经加载两张表:
- 物体COG坐标表:每行对应一个物体,包含
x/y/z三个坐标字段 - 包围盒参数表:包含你示例中的
包围盒编号/Z low/Z high/Y left/Y right/X front/X aft字段
- 物体COG坐标表:每行对应一个物体,包含
- 进入COG坐标表的PowerQuery编辑界面,点击「添加列」-「自定义列」,输入公式:
= Table.SelectRows(包围盒参数表, (b) => [z] >= b[Z low] and [z] <= b[Z high] and [y] >= b[Y left] and [y] <= b[Y right] and [x] >= b[X aft] and [x] <= b[X front])
- 点击自定义列右上角的展开按钮,仅选择提取
包围盒编号字段即可,无匹配结果的行默认返回空值,你可根据业务需求自行处理空值。
DAX计算列实现
适合数据量较小、需要动态调整匹配规则的场景:
在COG坐标表中新建计算列,输入如下DAX公式:
归属包围盒编号 = CALCULATE( MAX(包围盒参数表[包围盒编号]), FILTER( 包围盒参数表, COG表[z] >= 包围盒参数表[Z low] && COG表[z] <= 包围盒参数表[Z high] && COG表[y] >= 包围盒参数表[Y left] && COG表[y] <= 包围盒参数表[Y right] && COG表[x] >= 包围盒参数表[X aft] && COG表[x] <= 包围盒参数表[X front] ) )
这里用MAX是因为你明确包围盒无重叠,最多只有1个符合条件的编号,不会影响匹配结果,无匹配行返回空值。
注意事项
- 可根据你的边界判断规则(比如左闭右开)调整公式中的
>=/<=符号 - 后续包围盒参数更新后,直接刷新Power BI数据集即可自动完成重新匹配,无需人工介入
内容的提问来源于stack exchange,提问作者Hannes Pauwelyn
相关产品推荐
相关产品推荐

