博客:www.jiaopengzi.com

焦棚子的文章目录
请点击下载附件

一、背景

最大连续次数或者是最大连续子序列问题,在DAX中如何快速计算呢?

思路

1、N-1:按照INDEX错位

2、START:连续第一出现INDEX

3、END:最后一次出现的INDEX下一位

4、END-START刚好等于连续出现的次数

5、T8为结果

10万条数据只需要不到0.2秒,速度相当可观了,已能解决大部分实际工作场景。

二、数据源

为了方便展示,设定了7到28,1出现最大次数28-7=21;拿到文件可以自行修改再验证。

三、上DAX

分步DAX

DEFINE
VAR T0 =
ADDCOLUMNS (DATA,
"N-1",
VAR I0 = DATA[INDEX]
VAR V0 =CALCULATE ( SUM ( DATA[VALUE] ), FILTER ( DATA, DATA[INDEX] = I0- 1 ) )
RETURNV0,
"START",
VAR I1 = DATA[INDEX]
VAR V1 =CALCULATE ( SUM ( DATA[VALUE] ), FILTER ( DATA, DATA[INDEX] = I1 - 1 ) )
RETURN
IF ( V1 <> [VALUE]&& V1 = 0, [INDEX] ),
"END",
VAR I2 = DATA[INDEX]
VAR V2 = CALCULATE ( SUM ( DATA[VALUE] ), FILTER ( DATA, DATA[INDEX] = I2 - 1 ) )
RETURN
IF ( V2 <> [VALUE]&& V2 = 1, [INDEX] ))VAR T1 =
ADDCOLUMNS (
DATA,
“START”,
VAR I1 = DATA[INDEX]
VAR V1 =CALCULATE ( SUM ( DATA[VALUE] ), FILTER ( DATA, DATA[INDEX] = I1 - 1 ) )
RETURN
IF ( V1 <> [VALUE]&& V1 = 0, [INDEX] ),
“END”,
VAR I2 = DATA[INDEX]
VAR V2 = CALCULATE ( SUM ( DATA[VALUE] ), FILTER ( DATA, DATA[INDEX] = I2 - 1 ) )
RETURN
IF ( V2 <> [VALUE]&& V2 = 1, [INDEX] )
)
VAR T2 =SELECTCOLUMNS ( FILTER ( T1, [START] > 0 ), “START”, [INDEX] )
VAR T3 = SELECTCOLUMNS ( FILTER ( T1, [END] > 0 ), “END”, [INDEX] )
VAR T4 =SUBSTITUTEWITHINDEX (
ADDCOLUMNS ( T2, “S”, [START] )
, “INDEX”
, T2
,[START]
, ASC)
VAR T5 =SUBSTITUTEWITHINDEX (
ADDCOLUMNS ( T3, “E”, [END] )
, “INDEX”
, T3
, [END]
, ASC )
VAR T6 =ADDCOLUMNS (
T4,
“E”,
VAR I = [INDEX]
RETURNCALCULATE ( SUMX ( FILTER ( T5, [INDEX] = I ), [E] ) )
)
VAR T7 = ADDCOLUMNS ( T6, “MAX”, [E] - [S] )
VAR T8 =ROW ( “最大连续次数”, MAXX ( T6, [E] - [S] ) )
EVALUATE
T8

分步说明

1、T1错位找出1开始的index和结束的index

2、T4找到开始index,使用SUBSTITUTEWITHINDEX建立新index

3、T5找到结束index,使用SUBSTITUTEWITHINDEX建立新index

5、T7通过新index把1出现次数首尾老INDEX放到一起,实现“END-START刚好等于连续出现的次数”。

这里注意新老INDEX,本来可以给新的字段名,难得想名字了,使用的时候要注意有点绕。

6、最终度量:最大连续次数

最大连续次数:=
VAR T1 =ADDCOLUMNS (DATA,"START",VAR I1 = DATA[INDEX]VAR V1 =CALCULATE ( SUM ( DATA[VALUE] ), FILTER ( DATA, DATA[INDEX] = I1 - 1 ) )RETURNIF ( V1 <> [VALUE] && V1 = 0, [INDEX] ),"END",VAR I2 = DATA[INDEX]VAR V2 = CALCULATE ( SUM ( DATA[VALUE] ), FILTER ( DATA, DATA[INDEX] = I2 - 1 ) )RETURNIF ( V2 <> [VALUE] && V2 = 1, [INDEX] ))VAR T2 =SELECTCOLUMNS ( FILTER ( T1, [START] > 0 ), "START", [INDEX] )VAR T3 = SELECTCOLUMNS ( FILTER ( T1, [END] > 0 ), "END", [INDEX] )VAR T4 =SUBSTITUTEWITHINDEX (ADDCOLUMNS ( T2, "S", [START] ), "INDEX", T2,[START], ASC)VAR T5 =SUBSTITUTEWITHINDEX (ADDCOLUMNS ( T3, "E", [END] ), "INDEX", T3, [END], ASC )VAR T6 =ADDCOLUMNS (T4,"E", VAR I = [INDEX] RETURN CALCULATE ( SUMX ( FILTER ( T5, [INDEX] = I ), [E] ) ))
RETURNMAXX ( T6, [E] - [S] )

四、总结

1、本案例中使用INDEX错位,从结构上去优化计算效率;

2、对SUBSTITUTEWITHINDEX的熟悉;

3、类似案例要多思考计算的本质。

by 焦棚子

焦棚子的文章目录

124_Power PivotPower BI DAX优化计算最大连续次数相关推荐

  1. 127_Power PivotPower BI DAX计算订单商品在库时间(延伸订单仓储费用)

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前面已经写过一个先进先出的库龄案例,在业务发生又有这样一个需求:先进先出前提,需要按照订单计算每个商品在库时间, ...

  2. 123_Power PivotPower BI DAX函数说明速查

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 说明 1.基于DAX Studio 2.9.2版本导出整理: 2.DAX Studio网站,及时更新下载,DAX学习利器: ...

  3. Dax动态计算最后连续缺勤天数

    问题的提出 人事部门的同事可能会接触到一项基础的统计工作,就是看截至当前日期下,每个员工的连续缺勤天数. 示例数据如图,1表示当天未出勤,辅助列是姓名和日期连接: 常规思路(模拟) 实现思路先用Exc ...

  4. 129_Power PivotPower BI DAX不同维度动态展示动态坐标轴

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 某天在和**那还是叫我大铁吧** 交流关于季度&月度同时展示的问题,感概中国式报表真的需求很微妙. 下面 ...

  5. 《MATLAB 神经网络43个案例分析》:第11章 连续Hopfield神经网络的优化——旅行商问题优化计算

    <MATLAB 神经网络43个案例分析>:第11章 连续Hopfield神经网络的优化--旅行商问题优化计算 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MA ...

  6. 连续Hopfield神经网络的优化——旅行商问题优化计算

    连续Hopfield神经网络 连续Hopfield神经网络(Continuous Hopfield Network, CHN)是一种基于能量最小化原理的神经网络模型,与离散Hopfield网络相比,它 ...

  7. 让数据中台飞起来—— Quick BI性能优化解决方案及实践

    Quick BI"数据门户"在企业数据中台建设中的重要性 企业在数据中台初步建设完成以后,怎样让客户直观感受到数据中台的价值?企业决策者.各部门管理人员.业务运营人员如何通过统一的 ...

  8. 让数据中台“飞“起来— Quick BI性能优化解决方案及实践

    1 引言 Quick BI"数据门户"在企业数据中台建设中的重要性 企业在数据中台初步建设完成以后,怎样让客户直观感受到数据中台的价值?企业决策者.各部门管理人员.业务运营人员如何 ...

  9. PowerBI/DAX的计算组功能是什么?怎么用?

    目录 一.前言 二.计算组与SELECTEDMEASURE 2.1 同比数据的度量值实现 2.2 同比数据的计算组实现一 2.2.1 计算组功能在哪里? 2.2.2 采用计算组快速得到同比数据 2.3 ...

最新文章

  1. 怎么样条件需要做屏蔽机房,屏蔽机房建设标准是什么?
  2. Mapreduce的序列化和流量统计程序开发
  3. python 调用shell 不阻塞_遇到问题---python调用shell脚本时subprocess.check_call不阻塞
  4. 基于自然语言处理的需求到类图转化的文献调查
  5. python异常数据处理_python中如何处理异常值
  6. 前缀、中缀、后缀表达式以及逆波兰计算器
  7. CCPC 合肥站 打铁记
  8. 微信搜一搜中的智能问答技术
  9. 转:查理·芒格:让打击和麻烦成为成长的契机
  10. AppLocker 简要实验笔记
  11. 微信小程序开发工具整理代码快捷键
  12. 绊脚石乃是进身之阶 jzoj 2017.8.15 B组
  13. iphone长截图哪个软件好_这应该是目前为止,iPhone上最好的长截图工具
  14. Apple M1 上安装tensorflow开发环境
  15. Scrapy糗事百科爬虫实战代码分析
  16. “江湖笑”-献给怀有梦想的北漂一族
  17. javawebJAVAJSP客户关系管理系统jsp会员信息管理系统jsp客户管理系统jsp客户登记系统
  18. POJ 3616 奶牛挤奶
  19. 伺服电机控制工程 伺服电机开发实例 modbus开发源码C# winform位置模式力矩模式
  20. 个人项目(2):摄像机与主角

热门文章

  1. 对象的使用 java 1613806439
  2. 谷歌浏览器安装过程-0223
  3. python-函数的嵌套调用
  4. ERROR! The server quit without updating PID file解决办法
  5. UserInfoActivity用户图像修改和退出登录
  6. C#中判断字符串相等的方法
  7. 容器编排技术 -- Kubernetes 设计理念
  8. Java Singleton类中的线程安全性的示例代码
  9. Debian Linux安装OpenSSH(sshd-server)
  10. 微软发布Windows 11测试版开始菜单和任务栏等区域无响应的解决办法