当前位置: 首页 > 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.lryc.cn/news/627051.html

相关文章:

  • Python打卡Day47 注意力热图可视化
  • 分享一个基于spark大数据的海洋塑料污染监测与可视化分析系统 基于Python的海洋塑料污染数据交互式可视化分析系统
  • Qwen Image edit的ComfyUI工作流搭建
  • 2025招商铸盾车联网CTF竞赛初赛题解
  • IT运维背锅权限泄露?集中式管控如何化解风险?
  • Docker Compose命令一览(Docker Compose指令、docker-compose命令)
  • Javascript面试题及详细答案150道之(121-135)
  • Linux Capability 解析
  • 达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
  • Java 通过 m3u8 链接下载所有 ts 视频切片并合并转换为 mp4 格式
  • 齐次线性方程组最小二乘解
  • 接美国血统(中序、后序→前序)
  • 【网络运维】Linux:正则表达式
  • 虚幻引擎目录结构
  • AGV小车cad+三维图+设计说明书
  • C++ 力扣 438.找到字符串中所有字母异位词 题解 优选算法 滑动窗口 每日一题
  • Java 线程池ThreadPoolExecutor源码解读
  • 服务器内存条不识别及服务器内存位置图
  • linux的sysctl系统以及systemd系统。
  • 【网络运维】Linux 文本处理利器:sed 命令
  • MYSQL-增删查改CRUD
  • uni-app跨端开发最后一公里:详解应用上架各大应用商店全流程
  • 生产级的雪花算法
  • 自动驾驶导航信号使用方式调研
  • C语言实现全排列(非递归法)(以猪八戒买包子的故事为例解释)
  • SpringBoot 整合 Langchain4j RAG 技术深度使用解析
  • imx6ull-驱动开发篇30——Linux 非阻塞IO实验
  • redis---常用数据类型及内部编码
  • 设计具有功能安全和网络安全能力的新型半导体芯片
  • 攻克PostgreSQL专家认证