
一句话核心价值点:用Excel内置的PowerPivot搭DAX数据模型,轻松把3张甚至更多表串起来做透视分析,省掉反复VLOOKUP的麻烦,让2026年的报表快到飞起,工作早点收工。
办公室常遇到:订单表、客户表、产品表各存一处,想一次透视看全貌,结果Excel透视表只认两张表的关系,第三张死活加不进来,只能来回切表、手动拼数据。
M代码示例(PowerQuery合并并加载三表):
let SourceOrders = Excel.CurrentWorkbook(){[Name="订单表"]}[Content], SourceCustomers = Excel.CurrentWorkbook(){[Name="客户表"]}[Content], SourceProducts = Excel.CurrentWorkbook(){[Name="产品表"]}[Content], MergeOrdersCustomers = Table.NestedJoin(SourceOrders, "客户ID", SourceCustomers, "客户ID", "Cust"), ExpandCust = Table.ExpandTableColumn(MergeOrdersCustomers, "Cust", {"客户地区"}, {"客户地区"}), MergeWithProducts = Table.NestedJoin(ExpandCust, "产品ID", SourceProducts, "产品ID", "Prod"), ExpandProd = Table.ExpandTableColumn(MergeWithProducts, "Prod", {"产品类别"}, {"产品类别"}), RemovedCols = Table.SelectColumns(ExpandProd,{"订单日期", "客户ID", "产品ID", "销售额", "客户地区", "产品类别"})in RemovedCols原理拆解:
PowerQuery先把三张表读进来,用NestedJoin按关键列(客户ID、产品ID)嵌套拼接。ExpandTableColumn把嵌套表里的字段平铺到主表,让三表字段同在一张表里。这样加载到数据模型后,透视表就能识别多个维度,不用再受两张表限制。在2026年,业务表往往字段多、来源杂,提前在查询里串好,后面分析像滑滑梯。省去手工复制粘贴,也不怕漏改某份表的更新,模型一次搭好长期可用。
就算表合一起,如果没在数据模型里明确关系,透视表照样乱套:比如选“产品类别”却看不到对应地区的销售,因为模型不知道它们怎么连。
DAX建立关系示意(在PowerPivot关系视图操作,可转公式思维理解):
// 假设已在模型里设好:// 订单表[客户ID] 1对多 客户表[客户ID]// 订单表[产品ID] 1对多 产品表[产品ID]// 客户表[客户地区] 可做切片维度// 产品表[产品类别] 可做列维度原理拆解:
数据模型像搭桥,把主表(订单)通过外键连到维度表(客户、产品)。关系是“一对多”,保证汇总时不重复计算维度表的记录。在2026年跨部门报表,常见一个事实表挂多个维度表,桥搭稳了透视才不乱跳。透视表拖入“客户地区”“产品类别”时,模型自动按关系找对应数据,不用写复杂公式。关系网让分析者专注问问题,而不是纠结表与表怎么拼。
老板要看“各地区某类产品的总业绩”,普通透视表得先合并列再算,步骤多还易错。用DAX直接在模型里跨表算,省事又准。
DAX度量值示例:
地区类业绩 = CALCULATE( SUM('订单表'[销售额]), '客户表'[客户地区] = SELECTEDVALUE('客户表'[客户地区]), '产品表'[产品类别] = SELECTEDVALUE('产品表'[产品类别]))原理拆解:
CALCULATE改变筛选上下文,把当前选的地区和类别条件带进SUM。SELECTEDVALUE取切片器或行标签当前值,确保只算目标组合。模型已建关系,DAX能自动沿着关系找到对应订单行的销售额。在2026年多变的分析需求下,这种写法可复用到不同维度组合,不怕临时换条件。一行度量值顶过去好几列辅助表,报表清爽,脑子也清爽。
每月汇报要切换时间范围,普通透视表得改字段或重拉数据,DAX配合日期表可实现点选就变的动态区间。
M代码生成2026年日期表(简版):
let StartDate = #date(2026,1,1), EndDate = #date(2026,12,31), DateList = List.Dates(StartDate, Duration.Days(EndDate - StartDate)+1, #duration(1,0,0,0)), ToTable = Table.FromList(DateList, Splitter.SplitByNothing(), {"日期"}), AddYear = Table.AddColumn(ToTable, "年份", each Date.Year([日期])), AddMonth = Table.AddColumn(AddYear, "月份", each Text.PadStart(Text.From(Date.Month([日期])),2,"0")), AddYM = Table.AddColumn(AddMonth, "年月", each Text.From([年份]) & "-" & [月份])in AddYMDAX度量值示例:
当月业绩 = CALCULATE( SUM('订单表'[销售额]), DATESMTD('日期表'[日期]))原理拆解:
M代码生成带年月字段的日期表,加载到模型并与订单表建立日期关系。DATESMTD取本月至今的日期集合,配合CALCULATE限定求和范围。在2026年滚动分析时,只要切到某月,业绩自动变,不用改公式。日期表让时间智能函数发挥作用,分析节奏跟着业务走。一次建好,全年月份都能点选,汇报不再临阵磨刀。
有时既要看全国总计,又要看细分到地区和产品的数字,普通透视表加总计容易因粒度不同产生重复或遗漏。DAX用ALL控制粒度超方便。
DAX度量值示例:
全国业绩无视筛选 = CALCULATE( SUM('订单表'[销售额]), ALL('客户表'[客户地区], '产品表'[产品类别]))原理拆解:
ALL清除指定列上的筛选,让SUM回到全量数据计算。在透视表里放此度量值,不论地区或类别怎么切,它始终给全国总数。在2026年多层级汇报场景,可同时呈现总体与细分,避免数字打架。粒度切换靠一个函数搞定,不必另建一张总表来对照。分析就像调焦相机,想看全景还是特写,转动一下参数即可。



↓↓↓点击“阅读原文”体系化提升