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

【自记】Power BI 中 DISTINCT 和 ALLNOBLANKROW 的区别说明

        在 DAX 中,DISTINCT 和 ALLNOBLANKROW 都是用于处理表或列中数据的函数,主要用于返回去重结果或清除筛选,但二者的功能、适用场景和行为有显著差异。以下从功能定义、语法、使用场景核心区别四个方面详细说明:

一、DISTINCT 函数:返回去重后的列或表

1. 功能定义

  DISTINCT 用于返回一列或一个表中不重复的值(去重),会保留原始数据中的空白值(Blank),但去除完全重复的行或值。

2. 语法
  • 针对单列:DISTINCT(<列>)
    返回该列中所有不重复的值(包含空白值),结果是一个单列表。
  • 针对表:DISTINCT(<表>)
    返回该表中所有不重复的行(即去除完全相同的行),结果保留原表结构。
3. 示例

假设有 '销售表' 包含 [商品ID] 列,值为 {1, 2, 2, 3, BLANK, 3, BLANK}

  • DISTINCT('销售表'[商品ID]) 返回 {1, 2, 3, BLANK}(去重后保留空白值)。

若 '销售表' 有两行完全相同的记录(如两行的 [商品ID] 和 [销售日期] 均相同):

  • DISTINCT('销售表') 会去除其中一行,只保留唯一的行。
4. 适用场景
  • 统计某列的不重复值数量(配合 COUNTROWS):
    商品种类数 = COUNTROWS(DISTINCT('销售表'[商品ID]))
  • 生成去重后的子表,用于筛选或关联分析。

二、ALLNOBLANKROW 函数:清除筛选并去除空白行

1. 功能定义

  ALLNOBLANKROW 是 ALL 函数的变体,用于清除指定表或列上的所有筛选上下文,同时自动去除结果中的空白行(Blank Row)
它的核心作用是返回 “基础数据集中所有非空白的完整值集”,不受当前筛选器影响。

2. 语法
  • 针对整个表:ALLNOBLANKROW(<表>)
    返回该表中所有非空白的行(去除空白行),且忽略所有对该表的筛选。
  • 针对表中的列:ALLNOBLANKROW(<表>[列])
    返回该列中所有非空白的不重复值,且忽略所有对该列的筛选。
3. 示例

假设有 '商品表' 包含 [商品ID] 列,值为 {1, 2, 3, BLANK},且当前筛选器只显示 [商品ID] = 1

  • ALLNOBLANKROW('商品表'[商品ID]) 返回 {1, 2, 3}(清除筛选,且去除空白值)。
  • 若用 ALL('商品表'[商品ID]) 则返回 {1, 2, 3, BLANK}(保留空白值)。
4. 适用场景
  • 计算 “占比” 时排除空白值影响:
    例如计算某商品销售额占所有非空白商品总销售额的比例:

    dax

    商品销售占比 = DIVIDE(SUM('销售表'[销售额]),CALCULATE(SUM('销售表'[销售额]), ALLNOBLANKROW('商品表'[商品ID]))
    )
    

  • 清除筛选时需要自动排除空白行(避免空白值干扰计算)。

三、DISTINCT 与 ALLNOBLANKROW 的核心区别

维度DISTINCTALLNOBLANKROW
核心功能对列或表进行去重(保留空白值)清除筛选并返回非空白的完整值集(去除空白值)
筛选上下文影响受当前筛选上下文影响(只对筛选后的数据去重)忽略所有筛选上下文(返回基础数据中的非空白值)
空白值处理保留空白值(Blank)自动去除空白值(Blank)
返回结果范围仅包含当前上下文或表中实际存在的去重值包含基础数据中所有非空白值(无论是否在当前筛选中)
典型用途统计当前筛选下的不重复值(如当前分类下的商品种类)计算整体占比、基准值(如所有非空白商品的总销售额)

四、对比示例:更直观的区别

假设场景:'商品表' 有 [商品ID] = {1, 2, 3, BLANK},当前筛选器只选择了 [商品ID] = 1 和 2

  1. DISTINCT('商品表'[商品ID])

    • 结果:{1, 2}(受当前筛选影响,返回筛选后的去重值,此处无空白值)。
    • 逻辑:只对筛选后的结果去重。
  2. ALLNOBLANKROW('商品表'[商品ID])

    • 结果:{1, 2, 3}(忽略当前筛选,返回基础数据中所有非空白值)。
    • 逻辑:清除筛选,且排除空白值。
  3. 若当前筛选包含空白值(如筛选后 [商品ID] = 1, BLANK):

    • DISTINCT('商品表'[商品ID]) 返回 {1, BLANK}(保留空白值)。
    • ALLNOBLANKROW('商品表'[商品ID]) 仍返回 {1, 2, 3}(始终排除空白值)。

总结

  • DISTINCT 是 “在当前筛选范围内去重,保留空白”,用于获取可见数据中的唯一值。
  • ALLNOBLANKROW 是 “忽略所有筛选,返回基础数据中的非空白完整值集”,用于计算不受筛选影响的基准值(如总占比)。
  • 记住:DISTINCT 受筛选影响且保留空白,ALLNOBLANKROW 不受筛选影响且去除空白,这是二者最核心的区别。
http://www.lryc.cn/news/626404.html

相关文章:

  • Java:将视频上传到腾讯云并通过腾讯云点播播放
  • 通过uniapp将vite vue3项目打包为android系统的.apk包,并实现可自动升级功能
  • 【考研408数据结构-04】 栈与队列:受限的线性表
  • CentOS7.9中安装Harbor以及配置https
  • 【Linux】系统部分——磁盘存储结构与文件系统
  • 初试Docker Desktop工具
  • 如何能成功在centos7下安装nodejs18+以上版本
  • TDengine IDMP 运维指南(5. 使用 Helm 部署)
  • 不止效率工具:AI 在创意领域的 “叛逆生长”—— 从文案生成到艺术创作的突围
  • 关于AKShare接口数据,快速查询命令大全
  • 从基础到本质:文件 IO 操作全解析
  • Deepresearch Agents:下一代自动研究智能体的架构革命与产业实践
  • 源码编译部署 LAMP 架构详细步骤说明
  • 中金所股指期货交易规则
  • 微算法科技(NASDAQ: MLGO)引入高级区块链DSR算法:重塑区块链网络安全新范式
  • 从零开始的云计算生活——第四十七天,细水长流,kubernetes模块之ingress资源对象
  • day075-MySQL数据库服务安装部署与基础服务管理命令
  • ROADS案例实践:制造业的设备物联网与预测性维护
  • 有序二叉树的删除
  • python中selenium怎么使用
  • java八股文-JVM相关面试题-参考回答
  • 深入分析Linux kobject 的工作原理与实现机制
  • 模拟tomcat接收GET、POST请求
  • AI 自动化编程 trae 体验 页面添加富编辑器
  • JVM基础知识总结
  • JVM讲解
  • Next.js 监控与分析:跟踪应用健康状况
  • Seaweed-APT:AI视频生成模型,单步生成2秒钟的1280x720 24fps视频
  • 学习设计模式《二十三》——桥接模式
  • 微控制器的工作原理和应用