Excel多维交叉分析难?DAX轻松对应
一句话核心价值点:不用装额外软件,只用Excel365自带的PowerPivot,就能把乱成一团的表格数据,按多维度灵活切分、交叉比对,像搭积木一样拼出你要的分析视角,让重复劳动一次做完、长期复用,2026年也能轻松提速办公。
目录
多表东拼西凑?一键关联省时
办公室常遇到:销售表、产品表、客户表各自孤立,做分析得来回VLOOKUP,改一处就崩一片。用PowerPivot建关系,DAX直接跨表算,省去手工对位。
M代码示例(PowerQuery合并三表):
letSource = Excel.CurrentWorkbook(),Sales = Source{[Name="销售表"]}[Content],Product = Source{[Name="产品表"]}[Content],Customer = Source{[Name="客户表"]}[Content],MergeProd = Table.NestedJoin(Sales,{"产品ID"},Product,{"产品ID"},"NewCol"),ExpandProd = Table.ExpandTableColumn(MergeProd, "NewCol", {"产品类别"}, {"产品类别"}),MergeCust = Table.NestedJoin(ExpandProd,{"客户ID"},Customer,{"客户ID"},"NewCol2"),ExpandCust = Table.ExpandTableColumn(MergeCust, "NewCol2", {"地区"}, {"地区"})inExpandCust
DAX公式(跨表求和销售额):
总销售额 = SUM(Sales[金额])品类销售额 = CALCULATE([总销售额], Product[产品类别] = "电子")地区销售额 = CALCULATE([总销售额], Customer[地区] = "华东")双维筛选额 = CALCULATE([总销售额], Product[产品类别]="电子", Customer[地区]="华东")跨表均单价 = AVERAGEX(RELATEDTABLE(Product), Sales[金额] / Sales[数量])
原理解析:M先物理合并表,把不同来源字段拉到同一张明细;DAX靠关系模型在内存里虚拟联结,CALCULATE可同时锁定多个维度条件,不必反复筛选源表,计算一次套用到任意透视组合。
日期切片太死板?动态区间拿捏
做月度或滚动分析时,手动改日期范围很磨人,一不留神就漏数据或重算。
DAX公式(动态近30天销售额):
今日 = TODAY()近30天销售额 =CALCULATE([总销售额],DATESBETWEEN(Sales[日期], [今日]-30, [今日]))上月同期额 =CALCULATE([总销售额],DATEADD(Sales[日期], -1, MONTH))本季累计 =CALCULATE([总销售额],DATESINPERIOD(Sales[日期], STARTOFMONTH(TODAY()), 3, MONTH))年初至今 =CALCULATE([总销售额],DATESYTD(Sales[日期]))最近12月均 =CALCULATE(AVERAGE(Sales[金额]),DATESINPERIOD(Sales[日期], [今日]-365, 365, DAY))
原理解析:DATESBETWEEN按起止点截取区间,DATEADD整体平移月份,DATESINPERIOD按跨度取连续段,STARTOFMONTH与TODAY配合定位时间锚点,这些函数让区间随系统日期自动滑动,不用每月重写条件。
部门人员交叉看?矩阵秒显全貌
老板要看各部门下每个人的业绩分布,普通透视表行列固定,换角度就得重拖字段。
DAX公式(部门人均业绩 & 人员贡献率):
部门人均 = AVERAGEX(VALUES(Sales[人员]), [总销售额])人员贡献率 = DIVIDE([总销售额], CALCULATE([总销售额], ALL(Sales[人员])))部门排名 = RANKX(ALL(Sales[部门]), [部门人均])人员双维占比 =CALCULATE([总销售额],ALLEXCEPT(Sales, Sales[部门], Sales[人员]))交叉份额 =DIVIDE([总销售额],CALCULATE([总销售额], ALL(Sales[人员])))
原理解析:VALUES取出当前上下文唯一人员列表,AVERAGEX逐人算再平均;RANKX在部门间比指标大小;ALLEXCEPT保留指定维度屏蔽其他,让占比固定在想要的交叉格子里,矩阵想怎么转就怎么转。
累计趋势算到头?自动滚动无脑
年底做累计曲线,每次加新数据都要改公式范围,手滑就错。
DAX公式(累计销售额 & 滚动12月):
累计销售 =CALCULATE([总销售额],FILTER(ALL(Sales[日期]),Sales[日期] <= MAX(Sales[日期])))滚动12月 =CALCULATE([总销售额],DATESINPERIOD(Sales[日期], MAX(Sales[日期]), -12, MONTH))累计日均 =DIVIDE([累计销售], COUNTROWS(FILTER(ALL(Sales[日期]), Sales[日期] <= MAX(Sales[日期]))))环比累计 =DIVIDE([累计销售], CALCULATE([累计销售], DATEADD(Sales[日期], -1, YEAR)))-1累计目标差 = [累计销售] - [年度目标]
原理解析:FILTER配ALL让日期无视透视切片,MAX取当前轴最大日期作界;DATESINPERIOD往回取固定跨度;COUNTROWS统计天数求均值;DATEADD跨年对比,累计值随数据增长自动延伸。
条件排名不混乱?同维智能排座
同一张表里按品类排业绩,有时全表排、有时分部门排,结果混在一起看不清。
DAX公式(分组排名 & 条件前N):
品类内排名 =RANKX(FILTER(Sales, Sales[部门] = SELECTEDVALUE(Sales[部门])),[总销售额])部门内前3 =IF([品类内排名] <= 3, [总销售额], BLANK())跨品对比额 =CALCULATE([总销售额],TOPN(1, VALUES(Product[产品类别]), [总销售额]))分组百分位 =PERCENTILE.INC(FILTER(Sales, Sales[部门] = SELECTEDVALUE(Sales[部门]))[金额],0.9)动态TopN =CALCULATE([总销售额],TOPN(SELECTEDVALUE(参数表[N]), Sales, [总销售额]))
原理解析:RANKX可在筛选后的子集里排,SELECTEDVALUE锁定当前维度值;TOPN取前几名或按参数动态定;PERCENTILE.INC找组内高位阈值;这样排名只在你想的范围里比,不会被其他维度干扰。
多条件占比直给?比例洞察上屏
分析时常问“某地区某品类占整体多少”,一步步除容易乱,且换条件要重写。
DAX公式(多条件占比 & 差幅洞察):
地区品类占比 =DIVIDE([总销售额],CALCULATE([总销售额], ALL(Sales[地区], Sales[产品类别])))双维差幅 =[地区品类占比] - CALCULATE([地区品类占比], ALL(Sales[产品类别]))占比趋势 =[地区品类占比] - CALCULATE([地区品类占比], SAMEPERIODLASTYEAR(Sales[日期]))条件占比 =CALCULATE([总销售额],Sales[地区]="华北",Sales[产品类别]="家电") / CALCULATE([总销售额], ALL(Sales))占比排序 =RANKX(ALL(Sales[产品类别]), [地区品类占比])
原理解析:ALL清除指定列筛选保留其余,SAMEPERIODLASTYEAR做同比;DIVIDE防除零更安全;在透视里切换维度,占比跟着自动换算,不必另建辅助列。
金句收尾:
- • 学会用DAX,重复活一次做对,2026年照样早下班。
更多干货点我头像进主页,每天更新