博客:www.jiaopengzi.com

焦棚子的文章目录

请点击下载附件

一、背景

最近在看DAX“圣经”第二版《The Definitive Guide to DAX (2nd ed.)》的时候,迭代函数并不慢。所以今天我们来用实验来验证一把。

二、实验过程

1、一个1000万的数据,数据好看出差异。


看到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焦棚子

焦棚子的文章目录

最新文章

  1. 联想笔记本如何开启笔记本的VT-x虚拟化技术功能
  2. 在db2数据库上模拟死锁场景 还是z上的
  3. 核心动画与UIView的区别
  4. 用gameMaker做个小游戏
  5. php和java的memcached使用的兼容性问题解决过程
  6. linux kernel thread(Daemons)
  7. 微信公众平台开发(十) 消息回复总结——用其xml模板
  8. Java-马士兵设计模式学习笔记-观察者模式-模拟Awt Button
  9. Build Firefox 编译Firefox
  10. GPRS连接失败问题
  11. linux deepin 12.12.1和Windows 7双系统修改默认启动项
  12. Python中的变量
  13. 关于input标签无法对齐的解决方法!
  14. 【Android 应用开发】Android 平台 HTTP网速测试 案例 API 分析
  15. Self Host 使用 Exceptionless 实时监控程序运行日志服务
  16. svn错误:更新源码出现校验和不匹配问题
  17. web框架开发-快速认识Django中间件
  18. java版数据结构与算法第二章数组
  19. 20155330 《网络对抗》 Exp6 信息搜集与漏洞扫描
  20. c++11 强类型枚举

热门文章

  1. 在原生CSS中使用变量
  2. Vue.js 开发实践:实现精巧的无限加载与分页功能
  3. 记一次曲折的CVE-2018-1270复现分析
  4. Photoshop之用“色彩范围”命令抠像
  5. LC-35
  6. Kubernetes构建云原生架构-图解
  7. 帝国cms7.5忘记登录密码以及多次登录失败被锁定终极解决办法
  8. 搭建springboot集成mybatis
  9. 在网站copy时自带的版权小尾巴以及“复制代码“,可以怎么实现
  10. python基础练习题(题目 输出一个随机数。)