Power Pivot 数据分析表达式(DAX)

官方参考:DAX 函数参考 - DAX | Microsoft Learn

数据分析表达式 (DAX) 是在 Excel 中的 Analysis Services、Power BI 和 Power Pivot 中使用的公式表达式语言。 DAX 公式包括**函数、运算符和值,**用于对表格数据模型中相关表和列中的数据执行高级计算和查询。


练习题

一、DAX表达式

1. DAX表达式基础

  • 定义:Power Pivot特有的函数集(250+函数),中文称数据分析表达式
  • 类比:书写与使用方法类似Excel基本函数,比Power Query的M函数简单
  • 应用场景:在Power Pivot编辑器内为数据透视表创建规则新增字段

1)核心特点

  • 结果载体:运算结果直接应用于数据透视表
  • 作用范围:计算结果作用于整列表中所有行(不同于Excel的单元格计算)

2)使用规范

  • 引用规则:
    • 表名用单引号:'表名'
    • 字段名用中括号:[字段名]
  • 数据类型:需区分表结构数据 (表/字段)与常规数据(文本/数值)
  • 输入方式:
    • 直接公式栏输入
    • 通过"fx"图标调用函数对话框
  • 大小写规则:函数名不区分大小写(如ALL可写作all),与Excel一致但不同于区分大小写的M函数

3)DAX表达式的介绍与用途

  • 函数分类:
    • 行上下文计算函数:针对单行数据计算
    • 筛选上下文计算函数:针对整个字段汇总

**函数数量:**提供250+内置函数,涵盖日期、数学、统计等类别

  • **特殊类别:**筛选器函数(如FILTER、ALL等)可实现灵活的数据筛选规则

2. 实战案例应用

1)题目要求

商机金额百分比计算

计算销售人员高赢单率(赢单率=0.75\text{赢单率}=0.75赢单率=0.75)且低风险

  • (拖欠还款="无"\text{拖欠还款}="无"拖欠还款="无")的商机金额占比

解题步骤

  • 表关联:连接商机记录表与企业信息表
  • 数据转换:使用SWITCH函数将数值赢单率转为文本描述:
  • 字段合并:用RELATED函数跨表获取拖欠还款情况字段
  • 条件计算:嵌套使用CALCULATE与FILTER:
  • 百分比计算:条件金额总和 / 总金额
  • 透视呈现:创建以销售人员为行标签的透视表

关键函数解析

  • SWITCH:多条件替换(优于Excel的IF嵌套)
  • RELATED:跨表字段引用(效率远高于VLOOKUP)
  • FILTER:按条件筛选表数据
  • CALCULATE:动态计算规则制定

2)注意事项

  • 性能优势:处理数万行数据时,DAX运算效率显著高于Excel原生函数
  • 逻辑重点:理解"先筛选后计算"的DAX计算流程
  • 学习建议:通过官方文档系统学习250+函数的应用场景

3)操作步骤

1、使用的数据:DAX表达式练习数据
  • 数据来源:Power Pivot DAX表达式文件夹下的Excel文件
  • 文件信息:
    • 主数据文件:DAX表达式练习数据.xlsx(15KB)
    • 答案文件:DAX表达式练习数据答案.xlsx(333KB)

1、商机记录表介绍

  • 表内容:记录每条商机的详细信息
  • 关键字段:
    • 商机性质:指尚未完成的商业机会,金额为预测预估金额
    • 赢单率:表示商机成功可能性,数值越高赢单可能性越大
    • 客户ID:用于连接商机相关企业信息表
    • 销售人员:包含三个销售(Sales A、Sales B、Sales C)
  • 分析目标:计算高赢单率低风险商机金额占总商机金额的百分比

2、商机相关企业信息表介绍

  • 表内容:记录商机对应客户的企业属性信息
  • 关键字段:
    • 连接字段:客户ID(与商机记录表关联)
    • 客户属性:包含客户名称、所在城市、大区、企业规模、所属行业等
    • 风险判断指标:
      • 有无交易:记录是否与公司有过交易历史
      • 有无拖欠还款:判断客户风险等级的关键字段("无"为低风险,"有"为高风险)
  • 风险定义:高风险客户指有拖欠还款记录的客户,可能导致现金流问题

2、Power Pivot文件操作

数据导入操作

  • 新建空白文件:首先需要创建一个空的Excel工作簿作为数据导入的基础
  • 导入位置:所有数据导入操作都在Power Pivot功能模块中进行管理

数据导入步骤

  • 文件选择:
    • 连接类型:选择"连接到Microsoft Excel文件"
    • 文件路径:通过浏览按钮选择需要导入的Excel文件
  • 导入设置:
    • 标题处理:勾选"使用第一行作为列标题"选项
    • 表选择:在导入向导中勾选需要导入的具体数据表
    • 注意事项:备选数据表可以忽略,只需导入主数据表

导入结果确认

  • 导入状态:
    • 显示导入操作是否成功完成
    • 显示已传输的行数统计信息
  • 操作按钮:
    • 可随时点击"停止导入"中断操作
    • 导入完成后点击"关闭"退出向导

数据表关联

  • 关联创建:
    • 在"关系图视图"中建立表间关联
    • 使用共同字段(如客户ID)作为关联键
  • 主从关系:
    • 明确主表(如商机记录)和从表(如商机相关企业信息)
    • 关联方向应从主表指向从表

数据视图操作

  • 视图切换:完成关联后需切换回"数据视图"
  • 函数编写:在数据视图中可以开始编写所需的计算函数
  • 表格结构:数据视图显示完整的表格结构和字段内容

3、Switch函数的运用
(1)Power Pivot数据视图结构

界面分区: Power Pivot数据视图分为三部分:左侧数据预览区、右侧表达式编辑区和下方表达式编辑区

区域功能区别:

  • 右侧区域: 针对左侧数据预览区内某个字段的每一行值进行计算
  • 下方区域: 针对上方某个字段创建汇总规则时使用

(2)Switch函数语法与应用
  • 基本语法: =SWITCH(表达式, 值1, 结果1, 值2, 结果2, ..., [其他情况结果])
  • 参数说明:
    • 表达式: 需要进行条件判断的字段
    • 值-结果对: 当表达式等于某个值时返回对应的结果
    • 其他情况: 可选的默认返回值
  • 应用场景: 用于将数值描述替换为文字描述

(3)赢单率文字替换实例

具体实现:

  • 表达式: [赢单率]字段(自动生成格式为'表名'[字段名])
  • 替换规则:
    • 0.15 → "低"
    • 0.25 → "低"
    • 0.5 → "中"
    • 0.75 → "高"
    • 其他情况 → "-"

注意事项:

  • 文本结果需要用双引号括起来

  • 数值参数直接书写,不加引号

  • 默认返回值建议设置,避免出现空值

    =SWITCH('商机记录'[赢单率],0.15,"低",0.25,"低",0.5,"中",0.75,"高","-")

操作步骤详解

  • 编写位置: 应选择数据视图右侧的表达式编辑区
  • 字段引用: 通过点击字段自动生成'商机记录'[赢单率]格式
  • 结果验证: 回车后立即显示每行数值对应的替换结果
  • 列重命名: 双击计算列标题可修改为"赢单率文字替换"

相关知识点

字段引用格式

  • 表名用单引号括起
  • 字段名用中括号括起

数据类型处理

  • 数值型直接书写
  • 文本型需加双引号

错误预防

  • 建议为所有可能情况设置返回值
  • 使用"-"等占位符避免空值

4、Related函数的运用
复制代码
=RELATED('商机相关企业信息'[有无拖欠还款情况])

函数基本用法

  • 语法结构:RELATED(列名),仅需一个参数,即要合并的字段名
  • 前提条件: 必须 在关系图视图中预先创建好两个表的连接关系
  • 功能说明: 将关联表中的指定字段内容匹配到当前表中

实际操作步骤

  • 在商机记录表中新建列
  • 输入公式**=RELATED('商机相关企业信息'[有无拖欠还款情况])**
  • 将字段重命名为"有无拖欠"

注意事项

  • 若无法输入中文,可通过外部复制粘贴或改用拼音/英文替代
  • 必须确保两表已建立正确的关系连接

5、Calculate与Filter函数的嵌套使用
  • 核心结构: CALCULATE函数嵌套SUM和FILTER,形成**CALCULATE(SUM(字段), FILTER(表,条件1), FILTER(表,条件2))**的三层结构

  • 条件设置要点:

    • 高赢单率条件:[赢单率文字替换]="高"
    • 低风险条件:[有无拖欠]="无"
  • 书写规范: **汇总规则应写在要汇总字段的正下方单元格,**保持公式结构的可视化对齐

    高赢单率低风险商机金额加总值:=CALCULATE(SUM('商机记录'[商机金额(M)]),FILTER('商机记录','商机记录'[赢单率2]="高"),FILTER('商机记录','商机记录'[欠款情况]="无"))

度量值创建:

  • 系统自动生成"度量值1"字段,需手动修改为有意义的名称如"高赢单率低风险商机金额加总值"
  • 修改时保留冒号及后续内容,仅修改冒号前的字段名部分

常用汇总函数:

  • 加总:SUM(字段)
  • 平均:AVERAGE(字段)
  • 计数:COUNT(字段)
  • 极值:MAX(字段)/MIN(字段)

6、计算总商机金额与百分比
  • 分母计算: 直接使用SUM([商机金额])计算所有商机金额总和
  • 百分比公式: = [高赢单率低风险商机金额加总值] / [总商机金额]
  • 命名规范: 百分比度量值建议命名为"高赢单率低风险商机金额百分比"
  • 应用说明: Power Pivot编辑器中的计算规则需应用到数据透视表才能显示实际效果,编辑器仅用于定义计算逻辑

7、创建数据透视表

字段布局:将销售人员字段拖拽到行标签区域,将高赢单率低风险百分比字段放入值区域

显示问题:默认显示为小数形式而非百分比,需要后续调整格式

返回Power Pivot界面,在"主页"选项卡下找到"格式"设置,将数据类型从"常规"改为"百分比"

验证方法:可将加总值和总商机值同时拖入透视表进行交叉验证

感叹:普通数据透视表难以实现此类复杂汇总规则


二、知识小结

|-----------------|-------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------|----------|
| 知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
| DAX表达式概述 | Power Pivot特有函数集,含250+函数,语法类似Excel函数 | 区分表名(单引号)和字段名(中括号)的引用方式 | ⭐⭐ |
| 函数特性 | 1. 结果应用于数据透视表; 2. 作用于整列/所有行; 3. 函数名不区分大小写 | 与Power Query的M函数区分(M函数区分大小写) | ⭐⭐ |
| RELATED函数 | 跨表关联字段(需预先建立表关系) | 比VLOOKUP效率更高,适合大数据量 | ⭐⭐⭐ |
| SWITCH函数 | 多条件值替换:SWITCH(表达式,值1,结果1,值2,结果2,...,其他结果) | 替代复杂的IF嵌套,参数成对出现 | ⭐⭐⭐ |
| CALCULATE函数 | 核心筛选函数:CALCULATE(计算规则,筛选条件1,筛选条件2...) | 必须配合SUM等聚合函数使用 | ⭐⭐⭐⭐ |
| FILTER函数 | 条件筛选:FILTER(表,筛选条件) | 常作为CALCULATE的筛选参数 | ⭐⭐⭐⭐ |
| 实战案例 | 计算高赢单率(≥0.75)+低风险(无拖欠)商机占比: 1. 用SWITCH转换赢单率为文本; 2. 用RELATED关联风险字段; 3. 嵌套CALCULATE+FILTER计算条件求和; 4. 创建百分比度量值 | 关键公式: CALCULATE(SUM([金额]), FILTER(表,[赢单率]="高"), FILTER(表,[风险]="无")) | ⭐⭐⭐⭐ |
| 函数分类 | 1. 行级计算函数; 2. 聚合计算函数; 3. 特殊筛选器函数(FILTER/ALL等) | 筛选器类函数是DAX特有功能 | ⭐⭐ |