SUMMARIZECOLUMNS 的疑似 bug(1)引言


SUMMARIZECOLUMNS 的疑似 bug(1)引言
SUMMARIZECOLUMNS 的疑似 bug(2)SUMX 在总计行
SUMMARIZECOLUMNS 的疑似 bug(3)总计行是否关键点
SUMMARIZECOLUMNS 的疑似 bug(4)验证触发条件
SUMMARIZECOLUMNS 的疑似 bug(5)最终结论


前言

与 Power Pivot in Excel 通过 MDX 计算透视表的方式不同,PowerBI 在代码层面主要是通过 SUMMARIZECOLUMNS​ 函数计算报表中各个视觉对象,它实现了 MDX 中的 auto-exist 功能并具有诸多特性,能够在许多场景中代替ADDCOLUMNS​+ SUMMARIZE​的应用。

在实践中可以发现,在特定的情况下,SUMMARIZECOLUMNS​的计算结果似乎并不符合 DAX 理论,疑似 bug。

疑似 BUG

案例文件 下载
​image​

报表环境

数据表

  • DFact, 包含两列:Date 和 Amount

​image​

  • Dates,日期表,包含 Date, Year, Month Num, Month, YM 5 列

表间关系

Dates 1 — * DFact,以 [Date] 关联 Dates 和 DFact,Dates 为一端,DFact 为多端

​image​

度量值

SumAmount = SUM('DFact'[Amount])

// 计算结果疑似 bug 的度量值
SumxBug = SUMX(VALUES(Dates[Year]),[SumAmount])
MaxxBug = MAXX(VALUES(Dates[Year]),[SumAmount])
MinxBug = MINX(VALUES(Dates[Year]),[SumAmount])
ConcatBug = CONCATENATEX(VALUES(Dates[Year]),[SumAmount],"+")

// 计算结果符合预期的度量值
SumxCorrect = SUMX(KEEPFILTERS(VALUES(Dates[Year])),[SumAmount])
MaxxCorrect = MAXX(KEEPFILTERS(VALUES(Dates[Year])),[SumAmount])
MinxCorrect = MINX(KEEPFILTERS(VALUES(Dates[Year])),[SumAmount])
ConcatCorrect = CONCATENATEX(KEEPFILTERS(VALUES(Dates[Year])),[SumAmount],"+")

报表

切片器:包含 Dates[Year] ,Dates[Month Num] ,选择 2019年1月、2019年2月、2020年11月、2020年12月

矩阵:以 Dates[Year] ,Dates[Month Num] 为行,以度量值 [SumBug] 为值

​image​

理论预期

按照 DAX 理论,上图中 Year = 2019 总计行计算SumxBug​的过程如下:

SumxBug = SUMX(VALUES(Dates[Year]),[SumAmount])

外部筛选器

  • 切片器提供筛选器A

由于选择了 2019年1、2月,2020年11、12月,形成固化筛选器(arbitrarily shaped filter),在代码层面等同于 TREATAS ({ ( 2019, 1 ), ( 2019, 2 ), ( 2020, 11 ), ( 2020, 12 ) },Dates[Year], Dates[Month Num]))​

​image​

  • 报表行标题提供筛选器B,在 Year = 2019 总计行Dates[Year] = 2019​

​image​

两个筛选器中把 Year 标记为 Year1 和 Year2 是故意的,1和2用于标记该筛选器的来源,用于在后续运算时加以区分,并不是说这是两个不同的列。这种做法在之前的 研究《白皮书-理解DAX查询计划》中的案例(四)优化方案2 一文介绍过,DAX 底层也是这么干的。

度量值内部筛选器

  • 筛选器C,由 SUMX​迭代器行上下文转换提供,Dates[Year] = 2019​

计算过程筛选上下文分析

1、外部筛选器筛选器A和筛选器B中的列都来自同一张表 Dates,Auto-Exist 机制介入,两者运算的结果为 Dates 表中存在的数据组合,并以此数据构造外部筛选上下文。

外部筛选器:[AutoExist] 筛选器A × 筛选器B = 筛选器C
​在这里插入图片描述​
2、度量值内部

1)在外部筛选上下文中计算 SUMX​ 的迭代参数 VALUES(Dates[Year])​

以筛选器 C 去筛选 Dates 表并返回 Year 列上的不重复值,得到 Dates[Year] = {2019},只有这一个值

2)迭代行上下文

​SUMX​ 迭代 Dates[Year] = {2019},从第一行(也仅有这一行)中取得行上下文 Dates[Year] = 2019

3)在外部筛选上下文、行上下文中计算 [SumAmount] = SUM('DFact'[Amount])​

​[SumAmount]​将行上下文转换为筛选上下文,得到 筛选器D

​image​

4) 筛选器D 覆盖外部筛选器
在这里插入图片描述
筛选器E 也可以写做
在这里插入图片描述
整个筛选器变化过程如下:
在这里插入图片描述
​3、在最终形成的上下文中计算 SUM('DFact'[Amount])​,即以 筛选器E 筛选 DFact,得到的数据集包括 2019年1、2月的数据
在这里插入图片描述
将该数据集中 Amount 列上的值累加,得到 2019年1、2月的 Amount 总和 1+2 = 3 。

问题描述

我们现在在 PowerBI 的报表里计算 SumxBug 得到的计算结果是 30,这与上面通过 DAX 理论得到的预期结果不符
​image​

同样 ,在 年=2020 总计行,也出现了与理论不符的结果 70。

小结

虽然官方和 sqlbi 提供了不少关于 SUMMARIZECOLUMNS​函数的文章,但很少谈及其底层实现。对于总计行中的计算不符合 DAX 理论的这个疑似 bug,官网论坛对该问题的讨论大多限于理论层面,并没有得出什么结果,Marco Russo 称其为 a bug on top of another bug , 并表示“我们没有说明过这背后到底发生了什么,因为重要的是应该使用KEEPFILTER​包裹迭代器中的表”。

​image​

本系列文章将探究这些现象背后究竟发生了什么,分析查询计划了解其底层计算过程,找出不符合 DAX 理论的部分,并尝试通过修补 DAX 理论以覆盖该现象(不一定能成功)。

局域网文件传输工具课程设计源码 这是一个基于 Python 标准库实现的局域网文件传输工具课程设计资源包,采用 C/S 架构:一台机器运行服务端监听 9527 端口,其余机器作为客户端填 IP 直连发送文件。包含实验报告三件套、全部源代码、运行截图与答辩 PPT,零第三方依赖,装好 Python 即可运行。 传输主线覆盖分块发送、断点续传、完整性校验与队列管理:文件按 64KB 分块逐块推送,进度条按已发字节实时推进;中断重连后先询问续传偏移,从已收字节位置继续,不必从头重传;收完两端各算一遍 MD5,一致才把 .part 改为正式文件名,不一致判为传输失败;多文件排队依次传输,当前任务可暂停、继续或取消。 协议层以 4 字节大端长度头加 JSON 头约定消息格式,CHUNK 消息另带二进制净荷;代码按常量层、协议层、基础层、网络层、表现层五层划分,依赖方向严格单向,协议格式调整只动 protocol.py,界面与传输逻辑互不牵连。 可靠性设计覆盖文件名超长拒收、超时退出、断线自动重连最多 3 次、握手 8 秒快速失败等情形;传输日志固定 200 行环形缓冲,记录文件名、大小、耗时与平均速率,连接错误可回看。除标准库 socket、struct、threading、hashlib、queue、tkinter 外不引入其他包,Windows、macOS、Linux 均可运行。 适合计算机网络方向的学生作为课设参考,也适合想练习 TCP 字节流协议设计与多线程文件传输落地的自学者。运行方式:接收端 python main.py --mode server 点击开始监听,发送端 python main.py --mode client 填好服务端 IP、端口与昵称连接,添加文件后开始发送,重连自动续传。 立即下载

相关推荐

科技中介服务机构如何提升客户在技术评估与需求匹配环节的服务效率与专业度.docx

科技中介服务机构如何提升客户在技术评估与需求匹配环节的服务效率与专业度

SUMMARIZECOLUMNS 的疑似 bug(5)最终结论

上一篇找到了触发 `SUMMARIZECOLUMNS`​ 计算的结果不符合 DAX 理论的充分条件,这一篇尝试探讨修正理论对其进行解释,在这一篇中,我以为找到了一个合理的理论假设,但随后一个新的发现给了我当头一棒,这一篇应该是本系列的最后一篇,我必须直面现实了。

一棵松的博客 1560

51单片机的温湿度检测报警系统仿真资料

51单片机的温湿度检测报警proteus仿真系统

6.13 PowerBI系列之DAX函数专题-summarize,rollup和summarizecolumns以及groupby

summarizecolumns(一个query)>summarize>(两个query语句)>groupby(复杂一些),powerbi视觉对象后台生成的DAX表达式也是默认使用summarizecolumns。filter(‘sales’,‘sales’[产品类别]=“配件”),5.rollup做小计在summarize中使用。4.分组函数中的列可以来自模型中的不同表;sum(‘sales’[订单金额])) //只取配件的汇总 (图4)‘sales’[产品子类别],‘sales’[产品类别],

qq_33842426的博客 2020

国央企创新负责人如何通过平台识别并引进关键技术?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务机构如何打造高效、可复制的技术交易服务流程?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Power BI基础操作-SUMMARIZECOLUMNS()函数

软件打开及数据导入 打开软件之后要求登录账号或者免费试用,这时直接点击右上角叉号即可。 点击“获取数据”,选择相应的数据类型。点击“加载”。 创建新数据集 点击“输入数据”。 添加完成后,点击“加载”即可。 SUMMARIZECOLUMNS()函数 函数作用:分组聚合 语法:SUMMARIZECOLUMNS(第1参数,第2参数,第3参数,第4参数) 位置 参数 描述 第1参数 GroupBy_ColumnName 分组依据,可重复,可用于小计和总计函数 第2参数 Filt.

m0_46305747的博客 9911

windows自动连接无线网工具

手机开启连接特定蓝牙就自动开热点,windows检测手机蓝牙,检测到后连接蓝牙触发手机开热点,电脑就能自动连接手机热点,实现手机在电脑旁边时电脑能自动连接手机热点。

Power BI中summarizecolumns函数、sum函数实现SQL Server中的group by分组汇总

Power BI是微软开发的一款功能非常强大的的BI工具,可以制作非常美观的报表,但这个工具的核心是DAX,翻译为中文就是 数据分析表达式,有点类似于excel函数,但又很不一样。 DAX中的很多功能可以与SQL对应,但差异也很大。   下载Power BI 以及 输入实验数据,请参考前一篇文章: Power BI中selectcolumns函数+related函数实现SQL Server中...

SQL Server探索 1万+

国央企创新负责人如何优化科技成果转化流程的合规性与透明度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

MuMu模拟器-macos安装包

MuMu模拟器-macos安装包

SUMMARIZECOLUMNS 的疑似 bug(4)验证触发条件

上一篇发现总计行并不是关键点,并根据观察到的现象猜测了3个关键点,本篇通过单变量控制实验逐一对其进行验证,判断哪些条件会触发计算结果与 DAX 理论不符的情况,并最终确认了这些条件。

一棵松的博客 799

超全Mathcad全桥LLC谐振变换器开关电源设计mathcad计算书

内容概要:本文档为《超全Mathcad全桥LLC谐振变换器开关电源设计mathcad计算书》,系统性地围绕全桥LLC谐振变换器的开关电源设计展开,重点利用Mathcad工具进行精确的数学建模与参数计算。内容涵盖LLC谐振变换器的核心工作原理、关键参数设计(如谐振频率、励磁电感、变比、品质因数等)、增益特性分析、软开关实现机制及效率优化策略,并结合Simulink、Plecs、PSIM等主流仿真平台构建开环与闭环控制系统,实现变频控制、移相控制及混合控制等多种高级控制策略的仿真验证。文档提供完整的“计算书+仿真模型+设计报告”三位一体技术资料体系,强化理论与工程实践的深度融合。此外,资源包还整合了PFC、DC-DC变换器、双向充放电系统、微电网控制等大量电力电子相关仿真案例,突出其在科研复现、课程设计与工业研发中的高实用价值。; 适合人群:面向电力电子、电气工程及其自动化、新能源系统等相关领域的科研人员、高校研究生及从事高频开关电源设计的工程技术人员,需具备扎实的电路理论基础、自动控制原理知识以及一定的仿真软件操作能力。; 使用场景及目标:① 掌握基于Mathcad的LLC谐振变换器全流程参数设计方法与数学推导逻辑;② 构建并调试全桥LLC的闭环控制系统,实现高效ZVS/ZCS软开关、稳定输出电压与动态响应优化;③ 支持科研项目中的系统建模、仿真验证、论文复现与关键技术攻关,提升设计效率与理论深度。; 阅读建议:建议结合文档中提供的Mathcad计算书与Simulink/Plecs仿真模型同步学习,注重理论公式推导与仿真波形分析之间的对应关系。建议先深入理解LLC基本工作模态与谐振元件的影响规律,再逐步进阶至双闭环控制、恒压恒流切换、混合调制策略等复杂控制逻辑,最终实现高性能、高效率电源系统的自主设计与优化。

SUMMARIZECOLUMNS 的疑似 bug(3)总计行是否关键点

上一篇介绍了在总计行中出现与理论预期不符的结果,通过物理查询计划了解其底层计算过程,猜想是否 `SUMMARIZECOLUMNS`​函数对总计行的计算存在什么特殊算法,本篇验证在非总计行中进行计算的情况,以帮助判断总计行是否是关键点。

一棵松的博客 1087

【rt-thread实战解析】从零到一:基于STM32与LAN8720A的以太网驱动配置全流程

本文详细解析了在RT-Thread操作系统上为STM32F407配置LAN8720A以太网驱动的全流程。从硬件连接自查、CubeMX工程创建、PHY复位函数编写,到RT-Thread工程配置、LwIP协议栈集成,最后进行实际上电测试与网络调试,手把手指导开发者避开常见陷阱,实现稳定的以太网连接。

m2n3b4v5c6的博客 525

谷歌浏览器崩溃排查:闪退、卡死、网页打不开的修复指南

浏览器多进程架构通过进程隔离、GPU加速和扩展沙箱提升网页渲染效率,但配置损坏、扩展冲突、显卡驱动异常或系统资源不足时,常会以闪退、卡死、白屏、内存占用飙升和能上微信却打不开网页等形式暴露。排查价值在于先分层定位系统、进程、配置扩展与网页内容,再用无痕模式、chrome://crashes、chrome://gpu和浏览器任务管理器收集证据,避免盲目重装。对办公、开发运维和日常维护场景,禁用扩展、关闭硬件加速、刷新DNS缓存、重置配置文件乃至干净重装,都是可复用的工程化处置手段。围绕谷歌浏览器崩溃的典型症状

weixin_34138056的博客 426

SUMMARIZECOLUMNS 的疑似 bug(2)SUMX 在总计行

上一篇介绍了 SUMMARIZECOLUMNS 在特定情况下计算出的结果不符合 DAX 理论预测,这一篇我们开开始探究 DAX 在底层究竟是如何计算出这些结果的,主要的方法是用 DAX 查询复现该现象,通过观察物理查询计划了解底层计算步骤,试图从中定位到问题所在。

一棵松的博客 717

[RK3588-Android12] 深入解析USB Type-C PD充电功能的DTS配置与内核驱动修改

本文深入探讨了在RK3588 Android12平台上禁用USB Type-C PD充电功能的实现方法。通过分析设备树(DTS)配置与内核驱动(TCPM框架)的联动修改,详细解读了如何通过添加`pd-disable`属性及修改`tcpm.c`驱动代码,使Type-C端口绕过PD协议协商,仅工作在传统电源模式,以满足工控等特定场景对供电稳定性和成本控制的需求。

9o8p7i6u5y的博客 994

powerbi学习笔记(day1)构建环境&进行练习

本文记录Power BI第1课学习过程:下载Power BI Desktop,通过AI生成测试数据集并导入,完成数据清洗与星型模型构建(事实表+三张维度表),建立DAX度量值,最终在报表视图中实现包含卡片、切片器、折线图、地图、条形图、环形图及矩阵表的完整可视化看板,掌握从环境搭建到数据建模与展示的全流程。

sealaugh32的专栏 300

给MATLAB安装runtime插件

输入你刚刚下载压缩包的位置(小白提示:在 此电脑 中找到压缩包位置,右键属性复制位置)(!设置好以后然后填写下面输出exe文件的信息,包括文件的名字、作者、Email、公司、概述、描述,下面还可以选择额外的安装选项,exe文件运行需要的其他文件(图像、子程序等)、提供给用户的文件(readme.txt等)(很多方法是官网下载,但在官网下载还是会版本不对应,所以直接在你所用的MATLAB里搜索安装链接最靠谱)(!5.可以打包程序了(你发送文件的人电脑里没有MATLAB也可以查看运行你的程序了)

Pei_hua100的专栏 1万+

IEEE 754浮点数与十六进制转换:从原理到实战避坑指南

在计算机系统中,数据的二进制表示与内存布局是底层开发的核心基础。IEEE 754标准定义了浮点数在内存中的精确格式,包括符号位、指数位和尾数位的分工,以及零、无穷大和NaN等特殊值的编码。理解这一原理对于处理原始字节流至关重要,尤其是在涉及跨平台或跨设备通信时。其技术价值在于,它能帮助开发者从根本上解决数据解析错误、通信协议不一致以及程序调试中的“灵异”问题。在嵌入式开发、网络通信(如Modbus协议)和固件解析等应用场景中,浮点数与十六进制的转换是高频操作。然而,字节序(大端/小端)是转换过程中最常见的“

weixin_33835103的博客 430
上一篇: 研究《DAX查询计划 白皮书》中的案例(五)优化方案3
下一篇: SUMMARIZECOLUMNS 的疑似 bug(2)SUMX 在总计行
apinerand
博客等级 码龄9年 201粉丝 11原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值