Power BI如何基于两表创建含PCgroup分组的合并表?
Power BI实现邮编分组及城市统一方案
需求回顾
现有两个表:
- DeliveryTable(配送数据):
| Postal code | City | Delivery Time | Delivery Date | ... |
|---|---|---|---|---|
| 14000 | Caen | 10:21:02 | 12.11.2023 | ... |
| 14003 | Caen3 | 10:31:15 | 12.11.2023 | ... |
- GroupTable(邮编分组规则):
| Postal code | City | PCgroup | ... |
|---|---|---|---|
| 14003 | Caen3 | 14000 | ... |
| 14001 | Caen1 | 14000 | ... |
需要生成最终表,将子邮编归到父邮编分组下,统一使用父邮编对应的城市,并整合配送数据:
| Postal code | PCgroup | City | Delivery Time | Delivery Date | ... |
|---|---|---|---|---|---|
| 14000 | 14000 | Caen | 10:21:02 | 12.11.2023 | ... |
| 14001 | 14000 | Caen | 10:28:00 | 12.11.2023 | ... |
| 14003 | 14000 | Caen | 10:31:15 | 12.11.2023 | ... |
方法一:Power Query可视化操作(适合新手)
步骤1:补全分组表的父城市信息
- 进入Power Query编辑器,选中
GroupTable。 - 点击合并查询 → 合并查询作为新查询,将
GroupTable与自身合并:- 合并条件:
GroupTable[PCgroup]等于GroupTable[Postal code] - 仅选择合并后的
City列,重命名为ParentCity
- 合并条件:
- 此时
GroupTable会新增ParentCity列,子邮编(如14003)的ParentCity会匹配到父邮编(14000)的城市Caen。
步骤2:补充父邮编的分组记录
父邮编14000不在GroupTable中,需要手动添加或通过追加查询补充:
- 在Power Query中,选中
DeliveryTable,选择追加查询 → 将DeliveryTable的Postal code、City列追加到GroupTable。 - 对追加后的表去重,然后添加自定义列
PCgroup:
同时补全if [PCgroup] = null then [Postal code] else [PCgroup]ParentCity:如果ParentCity为空,就取当前行的City。
步骤3:关联配送数据
- 将处理后的分组表与
DeliveryTable合并,合并条件为Postal code相等。 - 展开
DeliveryTable中的Delivery Time、Delivery Date等列。 - 整理列:保留
Postal code、PCgroup、ParentCity(重命名为City)、Delivery Time、Delivery Date,删除多余列,空值按需填充。
方法二:DAX公式创建新表
- 确保
DeliveryTable[Postal code]与GroupTable[Postal code]建立关系。 - 在建模选项卡中点击新建表,输入以下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]) )
- 右键新表,选择重命名列,将
ParentCity改为City,删除不需要的列。
同类需求通用处理思路
- 明确关联规则:先理清数据之间的映射逻辑(如子→父的分组关系)。
- 优先数据补全:确保所有需要的维度(如邮编)都被覆盖,补全缺失的规则记录(如父邮编自身的分组)。
- 选择合适工具:新手优先用Power Query可视化操作,便于调试;复杂计算场景用DAX。
- 分步验证:每完成一步操作后,检查数据是否符合预期,避免后续错误。
内容的提问来源于stack exchange,提问作者OneTwentyTo
相关产品推荐
相关产品推荐

