124_Power PivotPower BI DAX优化计算最大连续次数
博客: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优化计算最大连续次数相关推荐
- 127_Power PivotPower BI DAX计算订单商品在库时间(延伸订单仓储费用)
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前面已经写过一个先进先出的库龄案例,在业务发生又有这样一个需求:先进先出前提,需要按照订单计算每个商品在库时间, ...
- 123_Power PivotPower BI DAX函数说明速查
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 说明 1.基于DAX Studio 2.9.2版本导出整理: 2.DAX Studio网站,及时更新下载,DAX学习利器: ...
- Dax动态计算最后连续缺勤天数
问题的提出 人事部门的同事可能会接触到一项基础的统计工作,就是看截至当前日期下,每个员工的连续缺勤天数. 示例数据如图,1表示当天未出勤,辅助列是姓名和日期连接: 常规思路(模拟) 实现思路先用Exc ...
- 129_Power PivotPower BI DAX不同维度动态展示动态坐标轴
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 某天在和**那还是叫我大铁吧** 交流关于季度&月度同时展示的问题,感概中国式报表真的需求很微妙. 下面 ...
- 《MATLAB 神经网络43个案例分析》:第11章 连续Hopfield神经网络的优化——旅行商问题优化计算
<MATLAB 神经网络43个案例分析>:第11章 连续Hopfield神经网络的优化--旅行商问题优化计算 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MA ...
- 连续Hopfield神经网络的优化——旅行商问题优化计算
连续Hopfield神经网络 连续Hopfield神经网络(Continuous Hopfield Network, CHN)是一种基于能量最小化原理的神经网络模型,与离散Hopfield网络相比,它 ...
- 让数据中台飞起来—— Quick BI性能优化解决方案及实践
Quick BI"数据门户"在企业数据中台建设中的重要性 企业在数据中台初步建设完成以后,怎样让客户直观感受到数据中台的价值?企业决策者.各部门管理人员.业务运营人员如何通过统一的 ...
- 让数据中台“飞“起来— Quick BI性能优化解决方案及实践
1 引言 Quick BI"数据门户"在企业数据中台建设中的重要性 企业在数据中台初步建设完成以后,怎样让客户直观感受到数据中台的价值?企业决策者.各部门管理人员.业务运营人员如何 ...
- PowerBI/DAX的计算组功能是什么?怎么用?
目录 一.前言 二.计算组与SELECTEDMEASURE 2.1 同比数据的度量值实现 2.2 同比数据的计算组实现一 2.2.1 计算组功能在哪里? 2.2.2 采用计算组快速得到同比数据 2.3 ...
最新文章
- 怎么样条件需要做屏蔽机房,屏蔽机房建设标准是什么?
- Mapreduce的序列化和流量统计程序开发
- python 调用shell 不阻塞_遇到问题---python调用shell脚本时subprocess.check_call不阻塞
- 基于自然语言处理的需求到类图转化的文献调查
- python异常数据处理_python中如何处理异常值
- 前缀、中缀、后缀表达式以及逆波兰计算器
- CCPC 合肥站 打铁记
- 微信搜一搜中的智能问答技术
- 转:查理·芒格:让打击和麻烦成为成长的契机
- AppLocker 简要实验笔记
- 微信小程序开发工具整理代码快捷键
- 绊脚石乃是进身之阶 jzoj 2017.8.15 B组
- iphone长截图哪个软件好_这应该是目前为止,iPhone上最好的长截图工具
- Apple M1 上安装tensorflow开发环境
- Scrapy糗事百科爬虫实战代码分析
- “江湖笑”-献给怀有梦想的北漂一族
- javawebJAVAJSP客户关系管理系统jsp会员信息管理系统jsp客户管理系统jsp客户登记系统
- POJ 3616 奶牛挤奶
- 伺服电机控制工程 伺服电机开发实例 modbus开发源码C# winform位置模式力矩模式
- 个人项目(2):摄像机与主角