当前位置: 首页 > 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.dtcms.com/a/341800.html

相关文章:

  • 比特分割 + 尖峰保留:FlashCommunication V2 实现任意比特通信与 3.2× 加速
  • 一键授权登录
  • Windows暂停更新10年最简单的设置
  • UNet改进(33):基于CBAM原理与PyTorch实战指南
  • 可信数据空间关键技术和功能架构研究
  • RAG流程全解析:从数据到精准答案
  • 地区电影市场分析:用Python爬虫抓取猫眼_灯塔专业版各地区票房
  • 不止效率工具:AI 在创意领域的 “叛逆生长”—— 从文案生成到艺术创作的突围
  • 【蒸蒸日上】专栏前言
  • 我的创作纪念日-2048天
  • 动态规划----6.单词拆分
  • 关于 Flask 3.0+的 框架的一些复习差异点
  • 在 Linux 和 Docker 中部署 MinIO 对象存储
  • 深入解析:生产环境 SQL 数据库的架构设计与工程实践
  • 税务专业人员能力构建与发展路径指南
  • ubuntu系统上的conda虚拟环境导出方便下次安装
  • 【网络运维】Linux 文本搜索利器: grep命令
  • JavaBean中首字母小写第二个字母大写属性转换异常详解
  • GIT总结一键式命令清单(顺序执行)
  • redis---常用数据类型及内部编码
  • 官网SSO登录系统的企业架构设计全过程
  • 七十四、【Linux数据库】MySQL数据库存储引擎
  • 11让LLM更懂FunctionCalling返回值
  • S32K3 的图形化配置和EB配置mcal差异
  • week2-[二维数组]排队
  • MySQL/Kafka数据集成同步,增量同步及全量同步
  • Windows 如何清理右键菜单?电脑桌面右键菜单里出现一个清理内存 怎么去掉?
  • 数据结构中邻接矩阵中的无向图和有向图
  • 流固耦合|01流固耦合分类
  • 面试 TOP101 二分查找/排序专题题解汇总Java版(BM17 —— BM22)