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

Power BI如何创建返回层级且保留关联关系的自定义列

Power BI 成本科目层级标识自定义列实现方案

实现前先确认你的成本科目维度表已具备三个基础字段:科目唯一ID、父级科目ID、科目名称,这是父子层级追溯的必要前提,两种可落地的实现方案如下:


方案1:Power Query 自定义列(推荐,刷新性能更优)

适合数据量大、需要固定计算逻辑的场景,计算在数据刷新阶段完成,不会占用报表运行时资源:

  • 打开Power Query编辑器,定位到你的成本科目表
  • 选择「添加列」-「自定义列」,列名设为层级标识,将以下代码粘贴到公式框,替换代码中对应的表名、字段名为你实际使用的名称即可:
let
  CurrentID = [科目ID],
  CurrentParentID = [父级科目ID],
  CurrentName = [科目名称],
  // 递归向上追溯当前节点的所有父级链路
  LevelPath = List.Generate(
    () => [NodeID = CurrentID, PNodeID = CurrentParentID, NodeName = CurrentName, NodeLevel = 0],
    each [NodeID] <> null,
    each [
      NodeID = [PNodeID],
      PNodeID = try 源表{Table.PositionOf(源表[科目ID], [PNodeID])}[父级科目ID] otherwise null,
      NodeName = try 源表{Table.PositionOf(源表[科目ID], [PNodeID])}[科目名称] otherwise null,
      NodeLevel = [NodeLevel] + 1
    ],
    each [NodeName, NodeLevel]
  ),
  RootNode = List.Last(LevelPath),
  SiteWorksLevelGap = if RootNode[NodeName] = "SITE WORKS" then RootNode[NodeLevel] else null
in
  if SiteWorksLevelGap = 0 then "Level 0"
  else if SiteWorksLevelGap = 1 then "Level 1"
  else if SiteWorksLevelGap = 2 then "Level 2"
  else if not IsNull(SiteWorksLevelGap) then "Level " & Text.From(SiteWorksLevelGap)
  else null

代码说明:逻辑会自动沿父级ID向上追溯到根节点,只要节点链路最终挂载在SITE WORKS节点下,就会自动计算相对层级,不会修改原有表的关联结构,你提到的ID为762的项只要父级链路匹配,就会正确返回归属762父级对应的Level 1标识。


方案2:DAX 计算列(适合快速调整场景)

不需要进入Power Query,直接在报表建模视图新建计算列即可,适合数据量较小的场景:

层级标识 = 
VAR NodePath = PATH('成本科目表'[科目ID], '成本科目表'[父级科目ID])
VAR SiteWorksID = LOOKUPVALUE('成本科目表'[科目ID], '成本科目表'[科目名称], "SITE WORKS")
VAR SiteWorksPos = FIND(SiteWorksID, NodePath, , 0)
VAR LevelCount = 
    IF(
        SiteWorksPos > 0,
        (LEN(NodePath) - LEN(SUBSTITUTE(NodePath, "|", ""))) -
        (LEN(LEFT(NodePath, SiteWorksPos - 1)) - LEN(SUBSTITUTE(LEFT(NodePath, SiteWorksPos - 1), "|", "")))
    )
RETURN
    IF(NOT ISBLANK(LevelCount), "Level " & LevelCount, BLANK())

结果校验规则

两种方案的返回结果完全匹配你的需求:

  • SITE WORKS节点返回Level 0
  • SITE WORKS的直接子项(含Substructure、你提到的762对应父级下的子项)返回Level 1
  • Level 1节点的直接子项(含Excavation in unclassified soil/非分类土开挖)返回Level 2
  • 所有计算完全基于原有表的父子ID关联,不会破坏表和其他事实表的现有关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:39:16