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

Power BI直连查询中递归CTE转派生表的实现求助

Power BI直连查询递归CTE适配方案

Power BI直连查询会自动在输入SQL前拼接Select * From(,导致存储过程、变量声明、CTE表达式无法正常执行。针对提取出的递归CTE代码,可通过以下方式转换为兼容派生表的形式,完整保留递归逻辑:

原始递归CTE代码

WITH MaterialsTree(PartNo,SubPartNo,Descrip,Qty,Unit,Purchased,Vendor,TotalQty,UnitCost,UnitPrice,TotalCost,TotalPrice,TotalWt,
      StepNo,PartWt,Materials_ID,ItemNo, ParentID) AS 
(
    SELECT PartNo,SubPartNo,Descrip,Qty,Unit,Purchased,Vendor,TotalQty,UnitCost,UnitPrice,TotalCost,TotalPrice,TotalWt,
      StepNo,PartWt,Materials_ID,ItemNo, CAST(NULL AS INT) AS ParentID
        FROM Materials AS Mat
        WHERE PartNo = @PartNo
    UNION ALL
    SELECT m.PartNo,m.SubPartNo,m.Descrip,m.Qty,m.Unit,m.Purchased,m.Vendor,m.TotalQty,m.UnitCost,m.UnitPrice,m.TotalCost,m.TotalPrice,m.TotalWt,
      m.StepNo,m.PartWt,m.Materials_ID,m.ItemNo, t.Materials_ID AS ParentID
        FROM Materials AS m
        INNER JOIN MaterialsTree AS t 
            ON m.PartNo = t.SubPartNo
)
SELECT PartNo,SubPartNo,Descrip,Qty,Unit,Purchased,Vendor,TotalQty,UnitCost,UnitPrice,TotalCost,TotalPrice,TotalWt,
      StepNo,PartWt,Materials_ID,ItemNo, ParentID 
FROM MaterialsTree

转换后兼容Power BI的代码

SELECT *
FROM (
    WITH MaterialsTree(PartNo,SubPartNo,Descrip,Qty,Unit,Purchased,Vendor,TotalQty,UnitCost,UnitPrice,TotalCost,TotalPrice,TotalWt,
          StepNo,PartWt,Materials_ID,ItemNo, ParentID) AS 
    (
        SELECT PartNo,SubPartNo,Descrip,Qty,Unit,Purchased,Vendor,TotalQty,UnitCost,UnitPrice,TotalCost,TotalPrice,TotalWt,
          StepNo,PartWt,Materials_ID,ItemNo, CAST(NULL AS INT) AS ParentID
            FROM Materials AS Mat
            WHERE PartNo = ? -- 用?作为参数占位符,在Power BI中配置对应查询参数传递值
        UNION ALL
        SELECT m.PartNo,m.SubPartNo,m.Descrip,m.Qty,m.Unit,m.Purchased,m.Vendor,m.TotalQty,m.UnitCost,m.UnitPrice,m.TotalCost,m.TotalPrice,m.TotalWt,
          m.StepNo,m.PartWt,m.Materials_ID,m.ItemNo, t.Materials_ID AS ParentID
            FROM Materials AS m
            INNER JOIN MaterialsTree AS t 
                ON m.PartNo = t.SubPartNo
    )
    SELECT PartNo,SubPartNo,Descrip,Qty,Unit,Purchased,Vendor,TotalQty,UnitCost,UnitPrice,TotalCost,TotalPrice,TotalWt,
          StepNo,PartWt,Materials_ID,ItemNo, ParentID 
    FROM MaterialsTree
) AS DerivedMaterialsTree

关键说明

  • 将完整递归CTE逻辑嵌套到子查询中,确保Power BI自动添加的Select * From(不会破坏CTE语法结构
  • 把原存储过程中的变量@PartNo替换为参数占位符?,在Power BI中创建对应查询参数并绑定,实现动态传递值的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:05:19