如何将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:添加基础筛选与排序
- 基础筛选:
part[p_size]等于目标尺寸:1part[p_type]以:2结尾(用筛选器的"结尾是"规则,或DAX表达式RIGHT(part[p_type], LEN(":2")) = ":2")region[r_name]等于目标地区:3
- 排序设置:
在视觉对象的字段选项中,按以下顺序设置排序:s_acctbal(降序)n_name(升序)s_name(升序)p_partkey(升序)
内容的提问来源于stack exchange,提问作者Eto
相关产品推荐
相关产品推荐

