125_Power BI 中 DAX 的性能测试
2024-10-20 01:46:38
博客:www.jiaopengzi.com
一、背景
最近在看DAX“圣经”第二版《The Definitive Guide to DAX (2nd ed.)》的时候,迭代函数并不慢。所以今天我们来用实验来验证一把。
二、实验过程
1、一个1000万的数据,数据好看出差异。
2、把度量写好。
//1、基础度量
total = SUM(data[NUM]) //2、SC
_sum_calculate =
CALCULATE ( SUM ( data[NUM] ), 'dim'[DIM] = "A", 'data'[ID] < 50000001 ) //3、SCV
_sum_calculatetable_var =
VAR T1 =
CALCULATETABLE ( 'dim', 'dim'[DIM] = "A" )
VAR T2 =
CALCULATETABLE ( 'data', 'data'[NUM] < 5000001 )
VAR V =
CALCULATE ( SUM ( data[NUM] ), T1, T2 )
RETURN
V //4、SF
_sum_filter =
CALCULATE (
SUM ( data[NUM] ),
FILTER ( 'dim', 'dim'[DIM] = "A" ),
FILTER ( 'data', 'data'[NUM] < 5000001 )
) //5、SFV
_sum_filter_var =
VAR T1 =
FILTER ( 'dim', 'dim'[DIM] = "A" )
VAR T2 =
FILTER ( 'data', 'data'[NUM] < 5000001 )
VAR V =
CALCULATE ( SUM ( 'data'[NUM] ), T1, T2 )
RETURN
V //6、TC
_total_calculate =
CALCULATE ( 'measure'[total], 'dim'[DIM] = "A", 'data'[ID] < 50000001 ) //7、TCV
_total_calculatetable_var =
VAR T1 =
CALCULATETABLE ( 'dim', 'dim'[DIM] = "A" )
VAR T2 =
CALCULATETABLE ( 'data', 'data'[NUM] < 5000001 )
VAR V =
CALCULATE ( 'measure'[total], T1, T2 )
RETURN
V //8、TF
_total_filter =
CALCULATE (
'measure'[total],
FILTER ( 'dim', 'dim'[DIM] = "A" ),
FILTER ( 'data', 'data'[NUM] < 5000001 )
)//9、TFV
_total_filter_var =
VAR T1 =
FILTER ( 'dim', 'dim'[DIM] = "A" )
VAR T2 =
FILTER ( 'data', 'data'[NUM] < 5000001 )
VAR V =
CALCULATE ( 'measure'[total], T1, T2 )
RETURN
V
3、每个度量都拉到画布中,同时打开性分析器,测试了20组。(visual名称是度量首字母简写,难得写。)
4、把测试数据导出,得到我们要的实验数据。
5、同时我们看到了底层计算逻辑其实都一样,只有一点细微的差别。
6、数据导回PBI,我们看看最后的结果怎么样。
三、总结
1、加入测试:calculate第一参数用基础度量更快,还是用直接聚合更快;
2、无论是单纯的查询时间还是总的时间,calculate第一参数用基础度量会更快(如:TF,SF;TC,SC);
3、在查询中迭代函数的速度并不慢(如:TC,TF);
4、用var要比直接套用慢(如果:TF,TFV)
5、最后我们看到底层计算逻辑都是一样,还是有细微差别,在做pbi项目的时候,动辄上百个的度量,一点点效率的累计,最终会有很大的时效收益。
by焦棚子
最新文章
- 联想笔记本如何开启笔记本的VT-x虚拟化技术功能
- 在db2数据库上模拟死锁场景 还是z上的
- 核心动画与UIView的区别
- 用gameMaker做个小游戏
- php和java的memcached使用的兼容性问题解决过程
- linux kernel thread(Daemons)
- 微信公众平台开发(十) 消息回复总结——用其xml模板
- Java-马士兵设计模式学习笔记-观察者模式-模拟Awt Button
- Build Firefox 编译Firefox
- GPRS连接失败问题
- linux deepin 12.12.1和Windows 7双系统修改默认启动项
- Python中的变量
- 关于input标签无法对齐的解决方法!
- 【Android 应用开发】Android 平台 HTTP网速测试 案例 API 分析
- Self Host 使用 Exceptionless 实时监控程序运行日志服务
- svn错误:更新源码出现校验和不匹配问题
- web框架开发-快速认识Django中间件
- java版数据结构与算法第二章数组
- 20155330 《网络对抗》 Exp6 信息搜集与漏洞扫描
- c++11 强类型枚举