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

如何在Power BI中实现非层级BOM表的递归查询与筛选?

在Power BI中实现BOM层级递归查询(基于切片器选择)

核心需求

基于TESTPROD表(含cod_Father、cod_Son、Qty列),通过Power BI切片器选择父物料后,自动递归展开所有层级的子物料,汇总成一张完整的BOM结构表。

实现步骤

1. 配置切片器

插入切片器控件,关联TESTPROD表的cod_Father列,用于选择需要查询的父物料。

2. 创建递归计算表

在Power BI的模型视图中,点击「新建表」,粘贴以下DAX代码,生成自动递归的BOM结果表:

BOM完整结构 = 
VAR 选择的父项 = SELECTEDVALUE('TESTPROD'[cod_Father])
VAR 递归查找 = 
    FUNCTION(当前父项)
        -- 获取当前父项的直接子项
        VAR 直接子项 = FILTER('TESTPROD', 'TESTPROD'[cod_Father] = 当前父项)
        -- 递归查询子项的下一级子项
        VAR 下级递归结果 = 
            IF(NOT ISEMPTY(直接子项),
                GENERATE(
                    直接子项,
                    递归查找([cod_Son])
                )
            )
        -- 合并当前层级子项与下级递归结果
        RETURN UNION(直接子项, 下级递归结果)
    END
-- 仅在选择父项后返回结果,否则返回空表
RETURN IF(NOT ISBLANK(选择的父项), 递归查找(选择的父项), BLANK())

3. 适配多选场景(可选)

如果需要支持切片器多选父物料,可使用以下DAX代码替代:

BOM完整结构(多选) = 
VAR 选择的父项列表 = VALUES('TESTPROD'[cod_Father])
VAR 递归查找 = 
    FUNCTION(当前父项)
        VAR 直接子项 = FILTER('TESTPROD', 'TESTPROD'[cod_Father] = 当前父项)
        VAR 下级递归结果 = 
            IF(NOT ISEMPTY(直接子项),
                GENERATE(
                    直接子项,
                    递归查找([cod_Son])
                )
            )
        RETURN UNION(直接子项, 下级递归结果)
    END
-- 遍历所有选中的父项,合并递归结果
VAR 所有选中BOM = GENERATE(选择的父项列表, 递归查找([cod_Father]))
RETURN IF(ISEMPTY(选择的父项列表), BLANK(), 所有选中BOM)

4. 可视化展示

插入表格可视化控件,选择生成的「BOM完整结构」表中的cod_Father、cod_Son、Qty列。此时在切片器中选择父物料,表格会自动展示该物料所有层级的子项及对应数量。

注意事项

  • 若TESTPROD表存在循环引用(如A是B的父项,B又是A的父项),递归会陷入死循环,需提前清理数据中的循环关系。
  • 若数据量较大,递归查询可能影响性能,建议对父项列建立索引优化查询速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:43:12