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

如何将TPC示例中的SQL关联子查询转换为Power BI实现?

解决Power BI中TPC查询的关联子查询问题

原SQL逻辑拆解

原查询核心是:筛选指定地区、零件尺寸、零件类型后缀的记录,仅保留对应零件在目标地区内供应成本最低的行。


步骤1:确保表关系正确

先在Power BI模型中建立与SQL一致的关联:

  • part[p_partkey] ↔ partsupp[ps_partkey]
  • supplier[s_suppkey] ↔ partsupp[ps_suppkey]
  • supplier[s_nationkey] ↔ nation[n_nationkey]
  • nation[n_regionkey] ↔ region[r_regionkey]

步骤2:实现"分组最小供应成本"匹配

推荐两种方案,按需选择:

方案一:用计算列预存最小成本

在partsupp表中创建计算列,预计算每个零件在目标地区的最低供应成本:

Min_SupplyCost_By_Part = 
VAR CurrentPart = partsupp[ps_partkey]
RETURN
CALCULATE(
    MIN(partsupp[ps_supplycost]),
    partsupp[ps_partkey] = CurrentPart,
    region[r_name] = ":3",  -- 替换为你的目标地区,动态场景用SELECTEDVALUE(region[r_name])
    ALL(partsupp), ALL(supplier), ALL(nation), ALL(region)
)

然后在报表筛选中添加规则:partsupp[ps_supplycost] = partsupp[Min_SupplyCost_By_Part]

方案二:用度量值动态判断(更适合参数化场景)

创建度量值,在视觉对象中动态筛选符合最小成本的行:

Is_Min_Cost = 
VAR CurrentCost = MAX(partsupp[ps_supplycost])
VAR CurrentPart = MAX(part[p_partkey])
VAR TargetRegion = ":3"  -- 动态场景替换为SELECTEDVALUE(Region_Slicer[RegionName])
VAR MinCost = 
CALCULATE(
    MIN(partsupp[ps_supplycost]),
    part[p_partkey] = CurrentPart,
    region[r_name] = TargetRegion,
    ALLSELECTED(part), ALLSELECTED(supplier), ALLSELECTED(nation)
)
RETURN
IF(CurrentCost = MinCost, 1, 0)

在视觉对象的筛选面板中,设置Is_Min_Cost = 1


步骤3:添加基础筛选与排序

  1. 基础筛选:
    • part[p_size] 等于目标尺寸:1
    • part[p_type] 以:2结尾(用筛选器的"结尾是"规则,或DAX表达式RIGHT(part[p_type], LEN(":2")) = ":2")
    • region[r_name] 等于目标地区:3
  2. 排序设置:
    在视觉对象的字段选项中,按以下顺序设置排序:
    • s_acctbal(降序)
    • n_name(升序)
    • s_name(升序)
    • p_partkey(升序)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:15:32