Excel透视表不能跨表关联?DAX轻松联多表!
一句话核心价值点:
用Excel内置PowerPivot的DAX,把散落各表的资料像拼图一样连起来,让透视表也能跨表分析,告别反复复制粘贴,2026年照样高效省时。
目录:
多表各自为政?DAX来牵线
办公室常遇到:订单表在A表、产品表在B表,想一起看就卡壳。透视表只能绑一个表,来回VLOOKUP累到怀疑人生。
用PowerPivot建模型,再用DAX定义关系,就能让表与表手拉手。
M代码示例(PowerQuery合并来源示意):
let
Source = Excel.CurrentWorkbook(),
Orders = Source{[Name="订单表"]}[Content],
Products = Source{[Name="产品表"]}[Content],
Combined = Table.NestedJoin(Orders, "产品ID", Products, "产品ID", "产品信息"),
Expand = Table.ExpandTableColumn(Combined, "产品信息", {"产品名称", "类别"}, {"产品名称", "类别"})
in
Expand
DAX关系建立(模型视图里点选字段拖拽即可,逻辑等同):
// 在模型中设定:订单表[产品ID] 1对多 产品表[产品ID]
// 此关系让跨表字段可直接用于透视表
原理拆解:
- • DAX在模型层建立逻辑连线,保持原表独立又互通;
- • 透视表调用时,自动按关系找对应值,不用手写查找;
- • 2026年数据再多,也只需一次建模,多次复用。
销量客户分离?关系一键搭
销售同事抱怨:订单表记了销量,客户表记了地区,想看各地区销量得来回折腾。
把订单表和客户表用DAX关系串起来,就能透视表直接拖地区看销量。
M代码示例(清洗并留关键列):
let
Source = Excel.CurrentWorkbook(),
Sales = Source{[Name="订单表"]}[Content],
Customers = Source{[Name="客户表"]}[Content],
FilterSales = Table.SelectColumns(Sales,{"订单ID", "客户ID", "销量"}),
FilterCust = Table.SelectColumns(Customers,{"客户ID", "地区"})
in
{FilterSales, FilterCust}
DAX关系逻辑(模型里设定):
// 订单表[客户ID] 多对1 客户表[客户ID]
// 多张表共享维度字段,实现分组汇总
原理拆解:
- • 关系确定“谁属于谁”,比如多个订单归属一个客户;
- • 透视表拖“地区”与“销量”,DAX自动按关系匹配;
- • 2026年换数据源,只要字段名不变,关系依旧生效。
日期表缺位?虚拟表来补
做时间序列分析时,原始表只有订单日期,没有完整的年、季、月维度,透视表分组总缺东少西。
DAX能当场造一张日期表,让分析维度齐全。
DAX造日期表示例(新建表):
日期表 =
ADDCOLUMNS (
CALENDAR ( DATE(2026,1,1), DATE(2026,12,31) ),
"年", YEAR([Date]),
"季度", "Q" & FORMAT([Date], "Q"),
"月份", FORMAT([Date], "YYYY-MM")
)
与事实表建立关系:
// 订单表[订单日期] 多对1 日期表[Date]
原理拆解:
- • CALENDAR生成连续日期,不怕原始表有空缺;
- • ADDCOLUMNS顺手加分析维度,一次成型;
- • 关系让时间维度可切片,透视表按月、季、年随意切换;
- • 2026全年日期一键生成,跨年分析也可扩展上限。
汇总遇阻?跨表度量破局
有时要在透视表里同时显示销量和客户数,但客户数在客户表,透视表只绑一个表就难办。
DAX度量值能跨表抓取信息并汇总。
DAX度量示例:
总销量 = SUM('订单表'[销量])
客户数 = DISTINCTCOUNT('客户表'[客户ID])
在透视表使用:
原理拆解:
- • DISTINCTCOUNT直接算唯一客户,无视重复订单;
- • 跨表引用靠模型关系自动定位,不用手动关联合并;
- • 2026年业务增加字段,度量只需微调字段名即可。
部门数据孤岛?模型一统看全
公司各部门表格结构不一,财务表有成本,运营表有访客数,想一起评估ROI就难。
用PowerPivot建统一模型,DAX关系织成网,各表数据同框呈现。
M代码示例(多表导入并规范列名):
let
Source = Excel.CurrentWorkbook(),
Finance = Source{[Name="财务表"]}[Content],
Ops = Source{[Name="运营表"]}[Content],
RenameFin = Table.RenameColumns(Finance,{{"部门编号", "部门ID"}}),
RenameOps = Table.RenameColumns(Ops,{{"部门码", "部门ID"}})
in
{RenameFin, RenameOps}
DAX关系设定:
// 财务表[部门ID] 1对多 运营表[部门ID]
原理拆解:
- • 度量可跨财务与运营表取数,算利润/访客转化等复合指标;
分析维度随心切?双向筛选亮招
默认关系只让一侧表筛另一侧,有时需要互相筛选,比如从客户表点某地区,订单表明细跟着动,反之亦然。
DAX可设双向交叉筛选。
DAX关系设置(模型属性勾选双向):
// 客户表[地区] <-> 订单表[地区] (需有地区字段并通过ID关联)
// 双向让两侧表互为过滤器
原理拆解:
金句收尾:
更多干货点我头像进主页,每天更新