Excel多表关联烧脑?PowerBI自动构建数据模型
一句话核心价值点:
用Excel365自带的PowerQuery与PowerPivot,把零散表格自动串成能算会想的模型,让2026年的你告别手拉手复制粘贴,分析像聊天一样轻松。
目录
跨表找对象?合并查询来牵线
办公室常遇到:订单表有客户编号,客户表有姓名地址,要对号入座得来回VLOOKUP,还怕列错位。
PowerQuery用合并查询,一次把两表按编号捆一起,后续刷新全自动。
M代码示例:
let
源 = Excel.CurrentWorkbook(){[Name="订单表"]}[Content],
客户 = Excel.CurrentWorkbook(){[Name="客户表"]}[Content],
合并 = Table.NestedJoin(源, "客户编号", 客户, "客户编号", "新列"),
展开 = Table.ExpandTableColumn(合并, "新列", {"客户姓名", "所在城市"}, {"客户姓名", "所在城市"})
in
展开
原理拆解:
- •
Table.NestedJoin像媒婆,把订单表和客户表按“客户编号”撮合,生成嵌套列。 - •
Table.ExpandTableColumn把嵌套列拆开,变成普通列,就像把介绍信换成名片。 - • 2026年数据新增时,只要刷新查询,新订单自动带上客户信息,不怕漏也不怕错。
重复列烦死人?去重映射更清爽
做产品价格对照时,同一产品因渠道不同出现多次价格,直接关联会算出一堆重复值。
用PowerQuery先拎出唯一产品清单,再映射最新价格,表格干净得像刚擦的玻璃。
M代码示例:
let
源 = Excel.CurrentWorkbook(){[Name="价格表"]}[Content],
去重 = Table.Distinct(源, {"产品编号"}),
排序 = Table.Sort(去重,{{"更新日期", Order.Descending}}),
取首 = Table.Group(排序, {"产品编号"}, {{"最新价格", each List.First([价格]), type number}})
in
取首
原理拆解:
- •
Table.Distinct先把相同产品编号的行压成一行,去掉表面重复。 - •
Table.Sort按更新日期倒排,确保最新的记录排前面。 - •
Table.Group配合List.First抓每组的第一条价格,就是我们要的最新价。 - • 这样关联后不会因旧价拖后腿,2026年调价也只需追加数据即可。
日期拆成年月?时间智能秒分组
销售表只有具体交易日期,想按月看业绩还得手动拆列或透视,步骤多还易出错。
PowerQuery一步把日期拆成年、月,还能拼成“2026-02”这种好认的标签。
M代码示例:
let
源 = Excel.CurrentWorkbook(){[Name="销售表"]}[Content],
加年 = Table.AddColumn(源, "年份", each Date.Year([交易日期]), Int64.Type),
加月 = Table.AddColumn(加年, "月份", each Date.Month([交易日期]), Int64.Type),
组合 = Table.AddColumn(加月, "年月", each Text.PadStart(Text.From([月份]),2,"0") & "-" & Text.From([年份]), type text)
in
组合
原理拆解:
- •
Date.Year和Date.Month像日历放大镜,分别抽出年、月数字。 - •
Text.PadStart给月份补零,保证“2月”变“02”,排序不乱。 - • 拼出的“年月”直接可做分组依据,2026年跨年统计也稳当。
多表关系乱成麻?模型自动理清线
人事表、考勤表、绩效表各自独立,想同时看人、出勤、得分就得反复切表。
PowerPivot在Excel里建数据模型,点几下就把表连成网,像搭积木一样稳。
操作步骤对应逻辑(无代码但可转DAX验证):
- • 在关系视图里,把人事表“工号”拖到考勤表“工号”,再拖到绩效表“工号”。
原理拆解:
- • 关系是模型的筋骨,一端唯一(如工号在人事表只出现一次),多端可重复(考勤表每日一条)。
- • 建好后,透视表或DAX能跨表抓取字段,比如直接用“部门”筛考勤天数。
- • 2026年换人加数据时,关系依旧管用,不必重写逻辑。
汇总缺维度?DAX一算就见真章
有了模型,想算各部门平均绩效,透视表只能按现有字段加总,平均值得另算。
DAX度量值一句搞定,还能随筛选动态变,像请了位实时会计。
DAX公式示例:
部门均绩 =
AVERAGE(绩效表[得分])
加权均绩 =
DIVIDE(
SUMX(绩效表, 绩效表[得分] * 绩效表[权重]),
SUM(绩效表[权重])
)
累计均绩 =
CALCULATE(
AVERAGE(绩效表[得分]),
DATESYTD(日期表[日期])
)
环比均绩 =
VAR 当月 = AVERAGE(绩效表[得分])
VAR 上月 = CALCULATE(AVERAGE(绩效表[得分]), PREVIOUSMONTH(日期表[日期]))
RETURN IF(ISBLANK(上月), BLANK(), (当月 - 上月)/上月)
达标率 =
DIVIDE(
COUNTROWS(FILTER(绩效表, 绩效表[得分] >= 90)),
COUNTROWS(绩效表)
)
原理拆解:
- •
AVERAGE直接求均值,SUMX可带权重,灵活应对不同算法。 - •
CALCULATE配DATESYTD能按年到当日累计,PREVIOUSMONTH拿上月对比,做环比很顺手。 - • 这些公式在工作表函数里要层层嵌套,DAX一句就通,2026年指标变化改参数即可。
动态筛选太慢?度量值替你跑全场
领导随时问“华东区本月高绩效人数”,若每次都现场筛表,慢又易漏。
把条件写成度量值,透视表或图表点选即显,像装了搜索快键。
DAX公式示例:
华东高绩人数 =
CALCULATE(
COUNTROWS(绩效表),
人事表[区域] = "华东",
绩效表[得分] >= 90,
日期表[年] = 2026,
日期表[月] = MONTH(TODAY())
)
原理拆解:
- •
CALCULATE圈定筛选范围:区域、分数、年份、月份。 - • 条件可随切片器或筛选框变,2026年当前月自动锁定,不用天天改公式。
- • 度量值在模型里预算,响应比现场算快得多,适合频繁问答场景。
金句收尾:
- • DAX不是咒语,是把业务问句翻译成模型的直通车。
- • 模型建得好,报表自己会说话,你要做的只是提问。
- • 2026年的效率,不是拼手速,是让工具替你记得该记的一切。
更多干货点我头像进主页,每天更新