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

Power BI如何基于两表创建含PCgroup分组的合并表?

Power BI实现邮编分组及城市统一方案

需求回顾

现有两个表:

  • DeliveryTable(配送数据):
Postal codeCityDelivery TimeDelivery Date...
14000Caen10:21:0212.11.2023...
14003Caen310:31:1512.11.2023...
  • GroupTable(邮编分组规则):
Postal codeCityPCgroup...
14003Caen314000...
14001Caen114000...

需要生成最终表,将子邮编归到父邮编分组下,统一使用父邮编对应的城市,并整合配送数据:

Postal codePCgroupCityDelivery TimeDelivery Date...
1400014000Caen10:21:0212.11.2023...
1400114000Caen10:28:0012.11.2023...
1400314000Caen10:31:1512.11.2023...

方法一:Power Query可视化操作(适合新手)

步骤1:补全分组表的父城市信息

  1. 进入Power Query编辑器,选中GroupTable。
  2. 点击合并查询 → 合并查询作为新查询,将GroupTable与自身合并:
    • 合并条件:GroupTable[PCgroup] 等于 GroupTable[Postal code]
    • 仅选择合并后的City列,重命名为ParentCity
  3. 此时GroupTable会新增ParentCity列,子邮编(如14003)的ParentCity会匹配到父邮编(14000)的城市Caen。

步骤2:补充父邮编的分组记录

父邮编14000不在GroupTable中,需要手动添加或通过追加查询补充:

  1. 在Power Query中,选中DeliveryTable,选择追加查询 → 将DeliveryTable的Postal code、City列追加到GroupTable。
  2. 对追加后的表去重,然后添加自定义列PCgroup:
    if [PCgroup] = null then [Postal code] else [PCgroup]
    
    同时补全ParentCity:如果ParentCity为空,就取当前行的City。

步骤3:关联配送数据

  1. 将处理后的分组表与DeliveryTable合并,合并条件为Postal code相等。
  2. 展开DeliveryTable中的Delivery Time、Delivery Date等列。
  3. 整理列:保留Postal code、PCgroup、ParentCity(重命名为City)、Delivery Time、Delivery Date,删除多余列,空值按需填充。

方法二:DAX公式创建新表

  1. 确保DeliveryTable[Postal code]与GroupTable[Postal code]建立关系。
  2. 在建模选项卡中点击新建表,输入以下DAX公式:
FinalTable = 
-- 获取所有唯一邮编(包含两个表的)
VAR AllPostalCodes = DISTINCT(UNION(VALUES(DeliveryTable[Postal code]), VALUES(GroupTable[Postal code])))
-- 为分组表添加父城市列
VAR GroupWithParent = 
    ADDCOLUMNS(
        GroupTable,
        "ParentCity",
        LOOKUPVALUE(
            COALESCE(GroupTable[City], DeliveryTable[City]),
            GroupTable[Postal code],
            GroupTable[PCgroup]
        )
    )
-- 处理父邮编的分组和城市
VAR ParentRecords = 
    ADDCOLUMNS(
        FILTER(AllPostalCodes, NOT([Postal code] IN SELECTCOLUMNS(GroupTable, "PC", [Postal code]))),
        "PCgroup", [Postal code],
        "ParentCity", LOOKUPVALUE(DeliveryTable[City], DeliveryTable[Postal code], [Postal code])
    )
-- 合并所有记录并关联配送数据
RETURN
ADDCOLUMNS(
    UNION(GroupWithParent, ParentRecords),
    "Delivery Time", LOOKUPVALUE(DeliveryTable[Delivery Time], DeliveryTable[Postal code], [Postal code]),
    "Delivery Date", LOOKUPVALUE(DeliveryTable[Delivery Date], DeliveryTable[Postal code], [Postal code])
)
  1. 右键新表,选择重命名列,将ParentCity改为City,删除不需要的列。

同类需求通用处理思路

  1. 明确关联规则:先理清数据之间的映射逻辑(如子→父的分组关系)。
  2. 优先数据补全:确保所有需要的维度(如邮编)都被覆盖,补全缺失的规则记录(如父邮编自身的分组)。
  3. 选择合适工具:新手优先用Power Query可视化操作,便于调试;复杂计算场景用DAX。
  4. 分步验证:每完成一步操作后,检查数据是否符合预期,避免后续错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:35:01