惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
L
LINUX DO - 热门话题
S
Secure Thoughts
TaoSecurity Blog
TaoSecurity Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threat Research - Cisco Blogs
AI
AI
B
Blog RSS Feed
S
Schneier on Security
雷峰网
雷峰网
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Cloudbric
Cloudbric
L
LINUX DO - 最新话题
罗磊的独立博客
有赞技术团队
有赞技术团队
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
The Hacker News
The Hacker News
博客园 - Franky
Attack and Defense Labs
Attack and Defense Labs
The Cloudflare Blog
Webroot Blog
Webroot Blog
Last Week in AI
Last Week in AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 叶小钗
美团技术团队
L
Lohrmann on Cybersecurity
T
The Blog of Author Tim Ferriss
The Last Watchdog
The Last Watchdog
T
Troy Hunt's Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Vercel News
Vercel News
Know Your Adversary
Know Your Adversary
O
OpenAI News
博客园 - 【当耐特】
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
PCI Perspectives
PCI Perspectives
H
Heimdal Security Blog
I
InfoQ
GbyAI
GbyAI
T
Threatpost
C
Cisco Blogs

博客园 - 哥本哈士奇(aspnetx)

Raw Data Vault vs Business Data Vault Neo4j 多跳查询实战:从社交网络场景理解图遍历 Git 本地版本管理学习笔记 看完《低智商犯罪》,学习Cypher构建知识图谱 LangChain DeepAgents 学习笔记 LangChain Deepagent 版本0.6.1中间件一个bug Neo4j笔记(五):查询的处理流程 微软 SQL Server 版本演进史:从诞生到 SQL Server 2025 提升 Text2SQL 准确率 SQLServer Management Studio(SSMS) 22 Copilot 最佳实践学习笔记 SQLServer RAG笔记4:从服务层到前端交互 SQLServer RAG笔记5:为SQLServer 2025配置Ollama SQL Server RAG 笔记3:SQLServer2025 向量数据库 详解传统RAG、Text2SQL、Graph RAG:适用场景与问题示例汇总 SQL Server RAG 笔记2:图数据库服务层与前端可视化构建 SQL Server RAG 笔记1:图数据库构建 Neo4j 笔记(四):一篇文章如何入库的 数据仓库笔记 第六篇:PSA 层 SCD2 处理方式 数据仓库笔记 第五篇:Data Mart 层(数据集市) 数据仓库笔记 第四篇:Star Schema 层(维度建模) 数据仓库笔记 第三篇:常用缓慢变化维处理方式介绍 数据仓库笔记 第二篇:PSA 层(持久化暂存区)详解 数据仓库笔记 第一篇:数据仓库的定义、历史与意义 Neo4j 笔记(三):数据建模与程序连接实战 Neo4j 基础教程(二):Cypher CRUD 完全指南 Neo4j 基础教程(一):安装与快速入门 Power BI学习笔记第20篇:面试题汇总 · 第三篇:高级应用与最佳实践篇 Power BI学习笔记第19篇:面试题汇总 · 第二篇:数据建模与 DAX 篇 Power BI学习笔记第18篇:面试题汇总 · 第一篇:基础概念篇 Power BI学习笔记第15篇:企业级报表开发与最佳实践 Power BI学习笔记第13篇:高级可视化与自定义图表 Power BI学习笔记第14篇:Power Query 高级数据处理 Power BI学习笔记第12篇:DAX 高级计算与性能优化 Power BI学习笔记第11篇:高级数据建模与关系设计 Power BI学习笔记第10篇:实战案例 — 销售数据分析仪表板 Power BI学习笔记第08篇:报表交互与筛选器 Power BI学习笔记第09篇:Power BI Service 发布与共享 Power BI学习笔记第07篇:可视化图表设计与最佳实践 Power BI学习笔记第06篇:DAX 进阶:时间智能与复杂计算 Power BI学习笔记第04篇:数据建模与关系管理 Power BI学习笔记第03篇:Power Query 数据清洗与转换 Power BI学习笔记第02篇:数据获取与连接数据源 Power BI学习笔记第01篇:Power BI 简介与环境搭建 Power BI Dashboard 常用布局方案推荐 Power BI 示例一览 OpenClaw 核心八大 MD 文件 Microsoft Agent Framework 智能体调用工具 Microsoft Agent Framework 创建智能体 一个简单案例理解OpenClaw的做梦过程 SQLAlchemy 学习笔记 LangChain RAG索引与查询 - 学习笔记 LangChain使用deep agent并且加载SKILL 本地系统对接大模型智能体的若干尝试 财务分析报告 - 常用Power BI DAX公式详解 用SKILL实现请假流程信息收集 使用小龙虾来操作猿编程的遥控车 使用OpenClaw的Skills对接本地系统 OpenClaw必装Skill全指南 Dify Agentic RAG 笔记 # 简单的神经网络计算过程 - 正负判断 使用Gradio构建AI前端 - RAG的QA模块 使用Gradio构建AI前端 - RAG召回测试 Streamlit + LangChain 1.0 简单实现智能问答前后端 利用AI Agent,辅助销售团队制定培训和考试内容 实现AI和BI整合的初步思路和探索-Part3 实现AI和BI整合的初步思路和探索-Part2 实现AI和BI整合的初步思路和探索 以《出师表》作为例子,对比通用分块和父子分块的区别 LangChain RAG 学习笔记:从文档加载到问答服务 记录无法修改OneDrive文件的解决方法 Power BI制作指标达成跟踪器 Power BI学习笔记-周报销售数据分析
Power BI学习笔记第05篇:DAX 基础:计算列与度量值
哥本哈士奇(aspnet · 2026-04-25 · via 博客园 - 哥本哈士奇(aspnetx)

第05篇:DAX 基础:计算列与度量值

1. DAX 是什么

DAX(Data Analysis Expressions)是 Power BI 内置的数据分析表达式语言,类似于 Excel 公式但远比 Excel 强大。它用于创建计算列、度量值和自定义表。

简单理解:DAX 就是 Power BI 中的"公式",让你在数据模型上进行各种复杂的计算和分析。


2. 计算列 vs 度量值

这是 DAX 中最核心的概念,必须彻底理解两者的区别。

特性 计算列 度量值
计算时机 数据刷新时(静态) 报表查询时(动态)
存储位置 存储在数据模型中 不存储,运行时计算
计算上下文 当前行上下文 筛选上下文
对文件大小的影响 增加文件体积 不增加文件体积
适用场景 需要按行筛选的基础字段 聚合计算、比率计算

2.1 计算列示例

创建一个"利润率"计算列:

利润率 = (销售表[销售额] - 销售表[成本]) / 销售表[销售额]

计算列会在每行数据中存储结果,适合用作筛选条件或需要固定值的场景。

2.2 度量值示例

创建一个"总销售额"度量值:

总销售额 = SUM(销售表[销售额])

度量值在报表中被引用时才会计算,会根据用户选择的筛选条件动态变化。


3. DAX 基础语法

3.1 基本结构

DAX 公式以"列名/度量值名 = 表达式"的形式存在:

度量值名称 = DAX表达式

3.2 常用运算符

运算符 说明 示例
+ 加法 [销售额] + [成本]
- 减法 [销售额] - [成本]
* 乘法 [数量] * [单价]
/ 除法 [利润] / [销售额]
&& 逻辑与 [类别] = "电子产品" && [销售额] > 1000
` `
IN 多值匹配 [产品] IN {"产品A", "产品B"}

3.3 常用聚合函数

函数 说明 示例
SUM 求和 SUM(销售[销售额])
AVERAGE 平均值 AVERAGE(销售[销售额])
COUNT 计数(数字) COUNT(销售[订单ID])
COUNTA 计数(非空) COUNTA(销售[备注])
COUNTROWS 计行数 COUNTROWS(销售)
MAX 最大值 MAX(销售[销售额])
MIN 最小值 MIN(销售[销售日期])
DISTINCTCOUNT 去重计数 DISTINCTCOUNT(销售[客户ID])

4. 筛选函数

4.1 CALCULATE(DAX 最强大的函数)

CALCULATE 是 DAX 中最核心、最重要的函数,用于在指定筛选条件下计算表达式。

语法

CALCULATE(<表达式>, <筛选器1>, <筛选器2>, ...)

示例:计算电子产品类别的总销售额

电子产品销售额 = 
CALCULATE(
    SUM(销售[销售额]),
    销售[产品类别] = "电子产品"
)

示例:计算包含多个条件的销售额

高价值销售 = 
CALCULATE(
    SUM(销售[销售额]),
    销售[销售额] > 5000,
    销售[地区] = "北京"
)

4.2 FILTER

FILTER 返回一个按条件过滤后的表,常与 CALCULATE 配合使用。

高端产品销售 = 
CALCULATE(
    SUM(销售[销售额]),
    FILTER(
        ALL(产品[产品名称]),
        [销售额] > 10000
    )
)

4.3 ALL 系列函数

函数 说明
ALL() 移除所有筛选器,返回完整表/列
ALLEXCEPT() 移除指定列之外的所有筛选器
ALLSELECTED() 移除当前视觉对象的筛选器,保留页面/报表级筛选
总销售额(忽略所有筛选) = 
CALCULATE(
    SUM(销售[销售额]),
    ALL()
)

5. 上下文的概念

理解"上下文"是掌握 DAX 的关键。

5.1 行上下文(Row Context)

计算列内部的上下文,指当前行。

利润率 = DIVIDE([销售额] - [成本], [销售额])

在第5行计算时,[销售额][成本] 取的是第5行的值。

5.2 筛选上下文(Filter Context)

度量值被计算时,报表中所有筛选条件(切片器、视觉对象筛选、页面筛选等)的组合。

把"筛选上下文"理解为:度量值计算时,当前的"分析视角"是什么。

5.3 迭代函数

SUMXAVERAGEXCOUNTX 等带 X 的函数称为迭代函数,它们会对表中的每一行进行计算,然后汇总结果。

示例

订单利润 = SUMX(
    销售,
    销售[销售额] - 销售[成本]
)

等价于为每行计算 销售额 - 成本,然后求和。


6. 常用 DAX 函数分类速查

数学与统计

函数 说明
DIVIDE 安全除法(避免除零错误)
ROUND 四舍五入
SUMX 求和(支持表达式)
RANKX 排名

逻辑函数

函数 说明
IF 条件判断
SWITCH 多条件分支
AND / OR 逻辑运算

文本函数

函数 说明
CONCATENATE 拼接文本
LEFT / RIGHT 截取文本
UPPER / LOWER 大小写转换
FORMAT 格式化数字/日期

日期函数

函数 说明
YEAR / MONTH / DAY 提取日期部分
DATEDIFF 计算日期间差
FORMAT 格式化日期

7. 创建度量值的最佳实践

  1. 使用度量值而非计算列:对于聚合计算,优先使用度量值,文件更小、性能更好
  2. 命名规范:建议使用中文命名,前面加上类别前缀,如:
    • 销售额 - 总计
    • 销售数量 - 月度累计
  3. 使用 DIVIDE 代替除法:避免除零导致空白或错误
    利润率 = DIVIDE([利润], [销售额])
    
  4. 善用变量:使用 VAR 提升可读性和性能
    总利润 = 
    VAR TotalRevenue = SUM(销售[销售额])
    VAR TotalCost = SUM(销售[成本])
    RETURN
        DIVIDE(TotalRevenue - TotalCost, TotalRevenue)
    

8. 小结

本篇介绍了:

  • ✅ 计算列与度量值的核心区别
  • ✅ DAX 基本语法和常用运算符
  • ✅ 聚合函数(SUM、AVERAGE、COUNT 等)
  • ✅ CALCULATE、FILTER、ALL 等筛选函数
  • ✅ 行上下文与筛选上下文的概念
  • ✅ 迭代函数(带 X 的函数)
  • ✅ DAX 最佳实践与命名规范

个人的一些经验:

  • DAX很常用,但有时也有点复杂,不过其门槛并没那么高,毕竟DAX的可读性还是很高的,基本上看公式就能理解其功能。
  • 可以借助AI工具对报告的公式进行解读,或者让AI工具直接读报告,根据你的提示词来生成相应的公式。
  • 关于常用的DAX,建议参考阅读我另外一篇笔记,它根据一个具体的实例来汇总常用的DAX:https://blog.csdn.net/aspnetx/article/details/159894938?spm=1001.2014.3001.5502

下一篇:我们将深入 DAX 进阶,学习时间智能函数(如同比、环比计算)以及 CALCULATE 的高级用法。