两张未直接关联表通过中间表关联时的跨表过滤实现问题
多表关联同步过滤实现方案
首先先明确通用的表关联规则假设(可根据你的实际业务主键调整):
DistSupplierName为供应商维度主表,关联键默认取通用的supplier_id,也可替换为你实际用的supplier_name等唯一标识字段- 表A包含字段:
supplier_id、Expiration_Date及其他供应商相关业务字段 - 表B包含字段:
supplier_id、Supplier Duns及其他供应商相关业务字段 - 表A、表B均通过
supplier_id字段与DistSupplierName表关联
实现核心逻辑
以
DistSupplierName作为桥接中间表,将表A的Expiration_Date过滤条件沿关联链路传递到表B,无需额外写冗余过滤规则即可实现同步筛选。
场景1:SQL查询场景直接实现
如果是直接写SQL获取过滤后的数据,可参考如下两种写法:
写法1:关联查询同时返回表A、表B的字段
SELECT a.*, b.`Supplier Duns`, d.supplier_name FROM DistSupplierName d -- 关联表A同时添加Expiration_Date过滤规则,可替换为你实际需要的区间、是否过期等判断条件 INNER JOIN 表A a ON d.supplier_id = a.supplier_id AND a.Expiration_Date >= '2024-01-01' -- 关联表B自动同步过滤符合条件的Supplier Duns INNER JOIN 表B b ON d.supplier_id = b.supplier_id
写法2:仅单独筛选表B的Supplier Duns
如果不需要返回表A的字段,用子查询简化即可:
SELECT `Supplier Duns` FROM 表B WHERE supplier_id IN ( SELECT a.supplier_id FROM 表A a INNER JOIN DistSupplierName d ON a.supplier_id = d.supplier_id WHERE a.Expiration_Date >= '2024-01-01' -- 替换为实际过滤条件 )
场景2:BI工具/数仓建模场景实现
如果是在Tableau、Power BI等BI工具或者数仓建模中配置自动同步过滤,操作步骤如下:
- 在数据模型中建立关联:将
DistSupplierName设为公共维度表,表A、表B设为事实表,三者通过公共供应商ID字段关联 - 将关联的交叉筛选方向设置为双向过滤(Power BI可直接在关联编辑页调整,Tableau勾选"关联多表"选项即可)
- 直接在过滤器面板添加表A的
Expiration_Date字段设置过滤规则,工具会自动沿关联链路同步过滤表B的Supplier Duns字段
内容的提问来源于stack exchange,提问作者Narendra Suryawanshi
相关产品推荐
相关产品推荐

