zoukankan      html  css  js  c++  java
  • Power BI数据集内存挑战—节省40%以上!

    是不是常常有企业在和一些大数据集的客户合作的时候,我们的BI伙伴经常会面临这么一个挑战:我们是否有比较有效的的方法减少和降低内存的消耗,同时仍然可以看到应有的指标。

    01接受挑战!

     事实上,我们已经采取过多种优化措施:减少基数,删除不需要的列,并确保所需的数据加载到数据集中等。但即使我们这样做了,我们的数据集大小仍在Azure Analysis Services中消耗90GB的内存,所以并没有太大起色。

    那还有没有更好的办法呢?下面跟大家分享一个技巧,我们可以通过以下步骤将数据集的大小缩减到37GB!

     

    02原始数据集大小

     如图所示,我们原来的PBIX原始大小为5.01MB。

    当运行这个数据集时,它消耗了大约20MB的内存。

    03使用十进制减少数据集大小

     我们通过阅读有关数据类型的文档时,可以将数据类型从“十进制数”更改为“固定十进制数”,这样可以节省数据集的大小。

    我们把数据类型变为固定小数,保留4位小数。

    我们确保如果将列中的值更改为仅保留小数点后4位,总数将保持不变。

    如下所示,将列SalesAmount_EUR的数据类型设置为“十进制数”。

    接下来,我们保留4位小数的值,如下所示。

    现在,当我们保存PBIX时,它从5.01MB变为4.18MB。

    这样可以节省大约16%,最初我们认为这也还不错。

    但是我们觉得应该还有办法能让数据集内存优化到更小,是什么呢?我们继续看下文。

    04使用整数使数据集真正小而有效

     有这么一个想法:如果现在可以将SalesAmount_EUR拆分到单独的列中怎么办?

    那意味着我们可以两列整数。不仅如此,十进制值的基数也会大大减少。

    我们立即开始尝试,并使用TSQL(你可以再次使用Power Query)将列拆为2列。但现在有个问题要解决的是:当我有一个负值时,要保证我的拆分列也为负!

    拆分数据后,要确保拆分列的数据类型都设置为“整数”。

    做到这一步,真心希望这可以满足我们的需求:大大节省数据集和内存大小。

    当我保存文件时,它已降至1.75MB。

    下面我们通过一个Power BI视觉文件,来测试对比看看我们到底可以节省了多少内存资源。

    如上所示,数据集的大小减少了65%。

    内存大小也从19MB减少到2.1MB。

    现在,我需要在DAX度量中添加一些其他逻辑以将这两列组合在一起以表示相同的值。

    我们也对此进行了测试,并且由于数据集的大小要小得多,因此结果是数据集的大小,数据的大小和列的层次结构的大小都变小,这意味着超快速的SSAS引擎可以更快地处理数据。

    这是我们如何一次将这些值重新组合在一起

    1

    2

    3

    Sales Amount EUR =

    SUM ( Data[SalesAmount_EUR] )

                +   ( DIVIDE ( SUM ( 'Data'[SalesAmount_EUR_Cents] ), 10000 ) )

    05结论

    正如我们所展示的,有时可以使用一些非常有创意的方法来减少数据集的大小,你们觉得呢?

    技术交流

    1.Power BI免费下载:http://www.yeacer.com/

        Microsoft Power BI Desktop中文最新版:下载地址

    2.欢迎加入的Power BI技术群,目前正在学习阶段,有兴趣的朋友可以一起学习讨论。 

       Power Data技术交流群:702966126 (验证注明:博客园Power BI) 

       更多精彩内容请关注微信公众号:悦策PowerBI          


    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,作者博客:https://www.cnblogs.com/yeacer/ 
    Fancy
  • 相关阅读:
    javaweb中如何给自己的网站更改ico图标
    基于Zookeeper的分布式锁
    Linux 基础——权限管理命令chmod
    Java--实现单点登录
    Session和Cookie的区别与联系
    selectedIndex返回被选中的option的index.
    onchange事件可以使用于: <input>, <select>, 和 <textarea>。
    js判断字符串长度
    在容器最前面添加DOM元素 parent.insertBefore(new, parent.children[0])
    在容器末尾添加DOM元素 parent.appendChild(newChild)
  • 原文地址:https://www.cnblogs.com/yeacer/p/12090620.html
Copyright © 2011-2022 走看看