博客: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焦棚子

焦棚子的文章目录

125_Power BI 中 DAX 的性能测试的更多相关文章

  1. Power BI中DAX的动态计算方差

    我花了一点时间试图解决一个棘手的DAX表达式,那就是如何动态计算方差,下面我们认识一下这两个函数: PARALLELPERIOD  和 SAMEPERIODLASTYEAR  它能实现我们想要的结果, ...

  2. DAX和Power BI中的参考日期表

    本文使用Power BI模板描述DAX中的引用Date表,可以在Analysis Services模型中使用相同的技术.在Dax Date Template页面下载最新版本的模板. 为什么引用Date ...

  3. 数据可视化之DAX篇(二十七)半累加度量,在Power BI 中轻松处理

    https://zhuanlan.zhihu.com/p/96823622 ​开始半累加的计算之前,我们先看看什么是累加.半累加以及不可累加数据. 在含有大量行的数据表中,各种数据处理语言,包括DAX ...

  4. .NET平台开源项目速览(19)Power BI神器DAX Studio

    PowerBI更新频繁,已经有点更不上的节奏,一直在关注和学习中,基本的一些操作大概是没问题,更重要的是注重Power Query,M函数,以及DAX的使用,这才是核心.   上个月研究了DAX的一些 ...

  5. 158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能

    158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能 一.背景 最近对 Power BI 中使用 SVG 比较感兴趣,今天我们使用 DAX + SVG 复刻一下 Ze ...

  6. R语言作为BI中ETL的工具

    R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...

  7. Power BI中的QA功能预览

    微软在休斯敦的全球合作伙伴大会上发布了Power BI for Office 365,通过Excel和Office 365中的自服务式商业智能解决方案为信息工作者提供了数据分析以及可视化功能以帮助他们 ...

  8. 在Microsoft Power BI中创建地图的10种方法

    今天,我们来简单聊一聊“地图”. 在我们日常生活中,地图地位已经提升的越来越高,出门聚餐.驾驶.坐车.旅行......应运而生的就是各种Map APP. 作为数据分析师,我们今天不讲生活地图,要跟大家 ...

  9. 如何在BI中增加“路线地图”并进行数据分析?

    随着客户的需求越来越"百变",最近在做大屏设计的葡萄陷入了困境. 近期客户提出的需求是想在BI工具中增加 "路线地图"展示功能并进行数据分析. 不仅如此,这个& ...

随机推荐

  1. CSS 文本控制

    one more time one more chance. 一歩重头学前端, css入门. 学习一些 CSS 文本控制的属性,防止做傻事.请大家对照下面列表检验下: 会的.不会的.似懂非懂的.笔者是 ...

  2. 关于Css的垂直居中的一些方法

    前两种方法称为大致居中,一般误差随高度的减小而减小,不过一般来说不怎么看得出来,除非你用javascript调用offsetTop来查看.不然没有强迫症的比较难看出来.但是兼容性很好,尤其是table ...

  3. JS+CSS实现数字滚动

    最近在实现一个显示RGB颜色数值的动画效果时,尝试使用了writing-mode(书写模式)及 text-orientation来实现文字的竖直方向的排列,并借助CSS的transition(过渡)来 ...

  4. ES6-11学习笔记--对象的扩展

    属性简洁表示法 属性名表达式 Objec.is() 扩展运算符 与 Object.assign() in 对象的遍历方式   属性简洁表示法: 如果属性key跟变量名一样,可简写 let name = ...

  5. C#编写一个简易的文件管理器

    编写一个简易的文件管理器,通过本次实验,练习 TreeView.ListView 和SplitContainer 控件的使用,同时熟悉 C#文件系统的操作方法以及 File 类和 Directory类 ...

  6. java中finally块儿是怎么工作的?有什么意义?

    10.finally块 马克-to-win:finally块儿是怎么工作的?有什么意义?finally关键字创建一个代码块.没有try,finally块儿不能单独存在.该代码块在一个try/catch ...

  7. 安卓性能测试之Lint测试

    pre { direction: ltr; color: rgba(0, 0, 10, 1); text-align: left } pre.western { font-family: " ...

  8. Linux安装JDK报错

    报错内容: tar (child): jdk-8u141-linux-x64.tar.gz: Cannot open: No such file or directory tar (child): E ...

  9. 控制器全屏显示.不展示导航栏navigationbar

    有些时候需要 让控制器全屏显示 ,不需要导航栏,或者说是在导航栏底部 基本情况: >控制器全屏 ``` if (@available(iOS 11.0, *)) { self.tableView ...

  10. redis笔记补充

    redis补充 这篇文章是redis入门笔记的补充. 1.info命令 用来显示服务的信息. info命令可以跟下面的选项: server: 关于 Redis 服务器的一些信息 clients: 客户 ...