PowerBI:单边含集合的订单与部件多对多关系建模及筛选方案问询
在PowerBI中构建订单与部件的多对多双向筛选关系
场景说明
- 订单(orders)与部件(widgets)为多对多关系:一个订单包含多个部件,一个部件可被多个订单使用。
- 源数据为两个JSON文件:
orders.json和widgets.json,关联关系由widgets中的in_orders数组字段存储(记录该部件所属的订单ID列表)。
源数据示例
// orders.json [ { "order_id": 1, ...}, { "order_id": 2, ...}, { "order_id": 3, ...}, ]
// widgets.json [ { "widget_id": 1, "in_orders": [2, 3], ...}, { "widget_id": 2, "in_orders": [1], ...}, { "widget_id": 3, "in_orders": [], ...} ]
实现双向筛选的多对多关系构建步骤
1. 拆分Widget的关联订单列表
导入widgets.json到PowerBI后,找到in_orders字段(列表类型):
- 点击字段右侧的展开到新行按钮(双箭头图标),将数组中的每个订单ID拆分为单独行,生成一个桥接表(可命名为
WidgetOrderBridge),表结构包含widget_id和order_id两个核心关联字段。 - 注意:
in_orders为空的部件(如widget_id=3)不会生成对应行,若需统计这类无关联部件,可保留原Widgets表的完整数据用于单独展示。
2. 导入订单数据
直接导入orders.json到PowerBI,得到Orders表,保留order_id及其他业务字段即可。
3. 配置双向筛选关系
切换到数据模型视图,建立以下两个关系:
- 将
WidgetOrderBridge的order_id与Orders的order_id关联,在关系设置中勾选双向筛选; - 将
WidgetOrderBridge的widget_id与Widgets的widget_id关联,同样勾选双向筛选。
此时形成Orders <-> WidgetOrderBridge <-> Widgets的关联结构,完全满足双向筛选需求:
- 筛选指定订单时,会通过桥接表自动关联到所有包含该订单的部件;
- 筛选指定部件时,会通过桥接表自动关联到所有包含该部件的订单。
4. 验证效果
- 添加订单ID切片器,选择order_id=2,部件列表应显示widget_id=1;
- 添加部件ID切片器,选择widget_id=1,订单列表应显示order_id=2和3;
- 选择widget_id=3时,订单列表无结果,符合源数据中该部件无关联订单的逻辑。
内容的提问来源于stack exchange,提问作者codeape
相关产品推荐
相关产品推荐

