一、CALCULATE函数
1.CALCULATE的作用
(1)核心作用
CALCULATE的核心功能是筛选控制(修改筛选上下文)
(2)什么是筛选上下文?
2. CALCULATE的标准语法
CALCULATE ( 表达式 , 筛选条件1 , 筛选条件2 , ... )3.案例回顾
CALCULATE('度量值表'[实销总金额],PREVIOUSMONTH('日期表'[Date]))(1)PREVIOUSMONTH
(2)CALCULATE
算什么?——算的是实销总金额这个度量值
计算条件?——通过修改筛选上下文,将计算的日期范围,替换为 PREVIOUSMONTH 提供的上一个完整月份,从而得到上月销售额。
二、CALCULATE 四大高频财务用法
1.CALCULATE + 固定筛选:指定维度计算
(1)案例描述
=CALCULATE('度量值表'[实销总金额],'产品信息'[品牌]="苹果")


2.CALCULATE + ALL:清除筛选
(1)作用
ALL 会主动清除当前透视表筛选,读取全量数据。
用于计算占比:主动清除某个筛选,计算对应筛选条件下的各构成的占比
比如:主动清除店员的筛选,计算各店员销售占总销售额的比例
(2)语法
=ALL(表或者列)如果参数为整个表,代表清除整个表的筛选;
如果参数为某一列,代表清除某一列的筛选
(3)案例1—计算个人销量占比
Step1:清除店员筛选
=CALCULATE('度量值表'[实销总金额],all('店员信息'[姓名]))





(4)案例2—计算品牌销量占比
=CALCULATE('度量值表'[实销总金额],all('产品信息'[品牌]))
结果:

修改品牌对应的切片器选项,金额不变


【具体用途】计算某一维度表上,某大类的占比
如:计算每月VIVO品牌占总销售额的比例

3.CALCULATE + ALLEXCEPT:保留筛选
(1)核心用途
(2)案例:保留品牌维度筛选
=CALCULATE('度量值表'[实销总金额],allexcept('产品信息','产品信息'[品牌]))






4.CALCULATE + FILTER:复杂条件筛选
(1)核心用途
(2)语法
FILTER ( 表, 筛选条件 )(3)案例:计算高单价对应的销售额占总销售额的比重
=CALCULATE('度量值表'[实销总金额],FILTER('产品信息','产品信息'[标准单价]>6000))


结果如下:

5.CALCULATE相关DAX函数总结
(1)核心语法差异

(2)财务适用场景

(3)函数使用注意事项
FILTER 适合写复杂条件(或者是维度表没有体现的维度),简单的清除/保留筛选优先用 ALL/ALLEXCEPT。
三、CALCULATE + 时间智能
1.连用的逻辑
2.案例解析
继续沿用门店手机销售案例,讲解连用的操作
(1)同比:上年同期销售额
=calculate('度量值表'[实销总金额],SAMEPERIODLASTYEAR('日期表'[Date]))

#同比变化额='度量值表'[实销总金额]-'度量值表'[上年同期销售额]
#同比=divide('度量值表'[实销总金额],'度量值表'[上年同期销售额])-1

(2)环比(和上月比)+和ALL连用
在本篇开篇,我们就讲了CALCULATE和PREVIOUSMONTH连用的逻辑,现在我们讲一个更复杂的案例,加入ALL的使用,计算品牌维度的同比占比变化
Step1:新建度量值:上月实销总金额-清除产品信息筛选
=CALCULATE('度量值表'[实销总金额],PREVIOUSMONTH('日期表'[Date]),ALL('产品信息'))

Step2:新建度量值:上月实销总金额
=CALCULATE('度量值表'[实销总金额],PREVIOUSMONTH('日期表'[Date]))
Step3:同理:创建度量值:本月实销总金额&本月实销总金额-清除产品信息筛选





【注】此案例也可只清除品牌单一列的筛选,结果不变
(3)环比(和上月比)+和ALLEXCEPT连用




四、收官实战:全自动财务分析报表
1.预实分析
(1)模型搭建
Step1:先将预算数据加载到Power Query

Step2:将预算数据作为事实表,与日期表、产品信息表等维度表建立关系
【❗️出现问题❗️】
预算数据有很多重复的月份和品牌,而维度表也有很多重复的月份和品牌(注:日期和SKU作为唯一值;其他值均是重复的)
导致两表形成了多对多的关系,无法创建关系。

【解决方案】创建辅助表(过渡表):品牌、年月(如:2026-01)
一是使用品牌表的品牌列分别连接产品信息表和预算表的品牌
品牌表:

二是将日期表、预算表分别添加列字段“年月”(可以直接在数据源中添加,也可以在Power Pivot或者Power Query中添加),并使用年月表的年月分别连接日期表和预算表的年月
年月表:

预算表-年月字段:
添加方式:直接在数据源中添加,再加载到Power Query

日期表-年月字段:
添加方式:Power Pivot中使用DAX函数(FORMAT)添加:

通过过渡表(辅助表)实现了关系的成功创建

【注意事项】在多对一的模型关系中,“一”对应维度表,故在上述日期(月份)的关系中,年月表是维度表,日期表和预算表都是事实表(事实表、维度表是相对的概念,不是绝对的概念)
Step3:建立度量值:预算数

(2)创建透视
创建数据透视表,年月来自日期表

发现如下问题:预算数没有按月汇总,而是都以总计列示,不符合预期
原因是年-月这一维度字段来自日期表(本关系中为事实表),故需要将年月字段进行调整,取自年月表
结果如下:

2.可视化呈现
(1)预期效果

上述可视化图表均在Excel中完成,使用Excel的一个工作表完成了6个细分模块的可视化呈现。
至此,我们实现了在Excel中完成从Power Query数据清洗,到Power Pivot模型搭建、度量值建立,再到动态可视化的全流程。
下面我们来具体讲下每个图的关键步骤(具体的图表操作细节可以参见本合集的可视化部分)
Excel财务小技巧之19「Excel可视化:基础图表+图表设置」
(2)26年1-3月预实分析

基础数据:
其中达成率计算:=实际数/预算数

(3)预算达成&实际销售卡片图

核心思路:
使用文本框链接公式
可适当对文本框进行修饰,比如:加边框、阴影等
(4)同比分析


其中,上年同期销售额:
=calculate('度量值表'[实销总金额],SAMEPERIODLASTYEAR('日期表'[Date]))
(5)销售员月度趋势

基础数据:

(6)品牌实销占比


(7)品牌实际/预算/同比







五、核心知识点总结
1.CALCULATE 核心
作用:改写筛选上下文,控制计算范围
语法:CALCULATE(度量值, 筛选条件1, 条件2...)
必须搭配:ALL / ALLEXCEPT / FILTER / 时间智能
2.四大高频用法(财务 90% 场景)
(1)固定筛选(算指定品牌 / 区域)
CALCULATE([实销总金额],'产品信息'[品牌]="苹果")
(2)清除筛选(算占比)
CALCULATE([实销总金额],ALL('产品信息'[品牌]))
(3)保留筛选(同表保留指定维度)
CALCULATE([实销总金额],ALLEXCEPT('产品信息','产品信息'[品牌]))
(4)复杂条件(逐行判断)
CALCULATE([实销总金额],FILTER('产品信息','产品信息'[单价]>6000))
3.高频时间智能函数
上月:PREVIOUSMONTH('日期表'[Date])
上年同期:SAMEPERIODLASTYEAR('日期表'[Date])
同比公式:DIVIDE([本月],[上年同期])-1
4.财务经典组合
销售额占比 = [销售额] / CALCULATE([销售额],ALL(维度))
品类内占比 = [销售额] / CALCULATE([销售额],ALLEXCEPT(表,保留列))
预算达成率 = DIVIDE([实际],[预算])
5.注意事项
FILTER / ALLEXCEPT 第一个参数必须是表
ALL 清除筛选,切片器字段要与 ALL 字段一致
多对多关系 → 用品牌表、年月表做过渡
夜雨聆风