当前位置: 首页 > news >正文

【自记】Power BI 中 ALL、ALLSELECTED、ALLEXCEPT、ALLNOBLANKROW 的区别说明

        在 DAX 中,ALLALLSELECTEDALLEXCEPTALLNOBLANKROW 均为筛选上下文控制函数,用于修改或清除筛选条件,但它们的作用范围、保留 / 清除的筛选类型及处理空白值的逻辑有显著差异。以下通过统一场景 + 示例对比说明:

统一场景

假设有两个表:

  • 商品表(维度表):含 [商品ID](101、102、103)、[类别](电子、服装、电子),无空白值。
  • 销售表(事实表):含 [商品ID](101、102、102、103、999、BLANK)、[销售额](100、200、200、300、400、50)。
    • 其中 999 是商品表中不存在的 “孤儿 ID”,BLANK 是空白值。

当前报表筛选:页面切片器选择了 [类别] = "电子"(即商品 101、103)。

四个函数的核心区别与示例

函数核心功能保留的筛选空白 / 孤儿值处理示例(计算总销售额)结果(基于场景)
ALL清除指定表 / 列的所有筛选,返回完整数据集不保留任何筛选(包括报表层面的筛选)保留空白值和孤儿记录(如 999、BLANK)dax ALL总销售额 = CALCULATE(SUM('销售表'[销售额]), ALL('商品表'))100+200+200+300+400+50=1250
ALLSELECTED保留报表层面的用户筛选(如切片器、筛选器),清除内部行 / 列筛选保留外部用户筛选(如本场景的 [类别] = "电子"),清除内部筛选保留空白值和孤儿记录dax ALLSELECTED总销售额 = CALCULATE(SUM('销售表'[销售额]), ALLSELECTED('商品表'))100(101)+300(103)=400
ALLEXCEPT仅保留指定列的筛选,清除其他所有列的筛选保留指定列的筛选(如指定 [类别],则保留 [类别] = "电子"),清除其他列筛选保留空白值和孤儿记录dax ALLEXCEPT总销售额 = CALCULATE(SUM('销售表'[销售额]), ALLEXCEPT('商品表', '商品表'[类别]))100(101)+300(103)=400
ALLNOBLANKROW清除指定表 / 列的所有筛选,排除空白行和孤儿记录(仅保留维度表中的有效值)不保留任何筛选(同 ALL排除空白值和孤儿记录(999、BLANK)dax ALLNOBLANKROW总销售额 = CALCULATE(SUM('销售表'[销售额]), ALLNOBLANKROW('商品表'))100+200+200+300=800

关键差异详解

1. ALL:完全清除筛选,保留所有值(包括无效数据)
  • 核心逻辑:无视任何筛选条件(无论是报表层面的用户筛选,还是模型内部的行筛选),返回指定表 / 列的全部数据。
  • 示例解析:场景中 ALL('商品表') 会清除 “类别 = 电子” 的筛选,同时包含销售表中所有记录(包括 101、102、103、999、空白),因此总销售额为 1250。
  • 典型场景:计算 “占总体的比例”(如某商品销售额占所有商品总销售额的比例)。
2. ALLSELECTED:保留用户筛选,清除内部筛选
  • 核心逻辑:仅保留 “用户在报表上手动选择的筛选”(如切片器、筛选器面板的选择),但清除计算内部的行 / 列筛选(如表格中的行级筛选)。
  • 示例解析:场景中用户筛选了 “类别 = 电子”,ALLSELECTED 会保留这个筛选,因此只计算 101、103 的销售额(400)。若在表格中单独筛选 101,ALLSELECTED 仍返回 400(保留用户的 “电子” 筛选)。
  • 典型场景:计算 “在当前选择范围内的总计”(如表格中每行占当前筛选总销售额的比例)。
3. ALLEXCEPT:仅保留指定列的筛选,清除其他
  • 核心逻辑:明确指定需要保留的列的筛选,其他所有列的筛选全部清除(包括报表层面的筛选)。
  • 示例解析ALLEXCEPT('商品表', '商品表'[类别]) 表示 “只保留 [类别] 列的筛选(即‘电子’),清除 [商品ID] 等其他列的筛选”,因此结果与 ALLSELECTED 相同(400)。若指定保留 [商品ID],则会保留对 [商品ID] 的筛选,清除 [类别] 筛选。
  • 典型场景:需要固定某一维度的筛选(如固定 “区域”),同时允许其他维度自由筛选。
4. ALLNOBLANKROW:清除筛选,排除无效数据
  • 核心逻辑:与 ALL 类似(清除所有筛选),但会自动排除维度表中不存在的孤儿记录和空白值,只保留维度表中的有效数据。
  • 示例解析ALLNOBLANKROW('商品表') 清除所有筛选后,仅保留商品表中存在的 101、102、103 的销售额(排除 999 和空白),因此总销售额为 800。
  • 典型场景:计算 “基于有效维度的总基准值”(如排除无效 ID 和空白后的总销售额)。

对比总结

函数筛选处理核心差异数据范围差异一句话记忆点
ALL清除所有筛选包含所有值(有效 + 无效)“全部都要,不管筛选和有效性”
ALLSELECTED保留用户筛选,清除内部筛选包含筛选范围内的所有值“尊重用户选择,不管内部细节”
ALLEXCEPT仅保留指定列的筛选,清除其他包含指定列筛选范围内的所有值“指定列留下,其他都清除”
ALLNOBLANKROW清除所有筛选仅包含维度表中的有效值“全部都要,但只保留有效数据(排除无效和空白)”

通过这个场景可以清晰看出:选择函数的核心是明确 “需要保留哪些筛选” 和 “需要包含哪些数据(是否排除无效值)”。

http://www.dtcms.com/a/340415.html

相关文章:

  • 自学嵌入式第二十三天:数据结构(3)-双链表
  • SQL四大类命令(DQL、DML、DDL、DCL)
  • 第1课_Rust基础入门
  • Rust系统编程:从入门到实战的蜕变之旅
  • MySQL 数据与表结构导出 Excel 技术文档
  • 基础笔记8.20
  • Spring Cloud Gateway 负载均衡全面指南
  • 甘特图-项目可视化引擎|Highcharts.js 模块特征
  • Linux I/O 多路复用实战:Select/Poll 编程指南
  • Java主流框架全解析:从企业级开发到云原生
  • 通过自动化本地计算磁盘与块存储卷加密保护数据安全
  • 819 机器学习-决策树2
  • 学习threejs,打造宇宙星云背景
  • 芯科科技即将重磅亮相IOTE 2025深圳物联网展,以全面的无线技术及生态覆盖赋能万物智联
  • CentOS 系统 Java 开发测试环境搭建手册
  • CentOS 7.6安装崖山23.4.1.102企业版踩坑实战记录(单机)
  • Git 新手完全指南(二):在vscode中使用git
  • Linux 文本处理与 Shell 编程笔记:正则表达式、sed、awk 与变量脚本
  • CentOS 7/8 搭建 Samba 文件共享服务并与Windows无缝集成
  • centos配置ip地址不生效
  • 关于多个el-input的自动聚焦,每输入完一个el-input,自动聚焦到下一个
  • 基于SpringBoot的校园跳蚤市场二手交易管理系统【2026最新】
  • 如何删除三星手机上的所有内容(5 种解决方案)
  • 微美全息(NASDAQ:WIMI):以区块链+云计算混合架构,引领数据交易营销科技新潮流
  • 2026 济南淀粉深加工展览会亮点:玉米科技与未来产业发展
  • Vue3 element ui 给表格的列设置背景颜色
  • vue3源码reactivity响应式之数组代理的方法
  • 解决前端项目启动时找不到esm文件的问题
  • 微算法科技(NASDAQ: MLGO)引入高级区块链DSR算法:重塑区块链网络安全新范式
  • AI时代SEO关键词优化新策略