返回Excel催化剂目录

产品文档 / Excel催化剂

第5波-使用DAX查询从PowerbiDeskTop中获取数据源

PowerbiDeskTop可以连接几乎一切的数据源,并且可以存储几乎无限大的数据量,在powerbi建模过程中,Excel的powerpivot与PowerbiDeskTop对比,首先是PowerbiDeskTop,无论性能上还是功能上都处于优势,PowerbiDeskTop每个月不断地迭代更新,

PowerbiDeskTop可以连接几乎一切的数据源,并且可以存储几乎无限大的数据量,在powerbi建模过程中,Excel的powerpivot与PowerbiDeskTop对比,首先是PowerbiDeskTop,无论性能上还是功能上都处于优势,PowerbiDeskTop每个月不断地迭代更新,除了在可视化组件方面有更新,在SSAS的建模内核上也是处于最新。

Excel2013的SSAS级别是1103,对标Sqlserver2012/2014Excel2016的SSAS级别是1200,对标Sqlserver2016poweribDeskTop是最新的1400。对标Sqlserver2017若需要进行数据建模,没有理由不使用PowerbiDeskTop而退而使用Excel。

当然问题来了,PowerbiDeskTop的使用广度和使用深度,都远远没法和Excel相提并论,为了单纯的建模方便或用户使用方便而需要在Excel和PowerbiDeskTop之间做二选一的抉择的确让人非常左右为难。自从Excel催化剂的诞生,问题已经从二选一变成了强强联手,各自做各自最擅长的,鱼和熊掌都可兼得的理想人生从此拉开了帷幕!

视频演示

此篇文章功能较多,请仔细阅读文字,并结合实操练习,视频演示打算后续弄个直播之类的方式供大家现场观看,重点演示大家感兴趣或有疑问的部分,后续有视频后再提供出来。

Excel透视表向PowerbiDeskTop发出MDX查询

当关系型数据库可以使用SQL和数据库内的表进行查询时,数据从数据库存储到最终查询使用提供了很大的便利性,而且SQL查询也因其简单易学,功能强大,在数据工作者群体中风靡全球。

从第3波功能中,大家已经见识到Excel可以和PowerbiDeskTop进行数据交互的方式是以透视表的方式查询PowerbiDeskTop,通过透视表的字段拖拉,立马生成相应的查询结果,已经解决了大部分的分析场景需求。

因实在没有什么比透视表更容易使用的同时又可以快速实现所需的数据结果,说句不过份的话,比开发人员亲手写SQL查询得到的结果还要方便快捷。因透视表访问的是PowerbiDeskTop的多维数据模型,多个表之间已经建立好关系和复杂的度量值已经在模型中生成,直接从透视表字段中拖出即可得到最终结果。

若只是用SQL查询的话,不知道需要写出多复杂的SQL语句才能得到透视表简单透视一下就能得到的数据结果,而且可以随时进行多维度切换查看、筛选、汇总等,SQL语句也只能望洋兴叹的份上了。

说了这么多,的确很兴奋了,有了透视表似乎已经得数据天下的感觉,但接下来有点泼冷水地说一点透视表差强人意的地方,这点的不如意,也就让今天的DAX查询能够显出威力的时候。

透视表向PowerbiDeskTop发出的查询是MDX查询,而非PowerbiDeskTop原生的DAX查询,MDX查询是传统的SSAS多维模型的查询语言,其对数据的聚合效率是很高,但一面对需要查询的颗粒度数据较细,即拖拉到透视表的行或列区域的字段的项目数量很多时。

如查询不同区域的销售额,是一个很不错的MDX查询,区域最多就10多个区域分区,但如果查询的是每个店铺(假设500家店铺)下每个商品SKU(假设1000个SKU),最终就出来最多50万条的记录,这个查询在透视表上拖拉字段出来,让透视表自动向PowerbiDeskTop发出MDX查询,将是很漫漫漫漫漫漫长的等待。

透视表向PowerbiDeskTop发出明细查询很慢,并不代表PowerbiDeskTop的多维数据模型查询明细数据就很慢,相反PowerbiDeskTop查询明细数据是很快的,只要是用DAX查询,甚至可能比SQL查询更快,因其所有数据都在内存里查询,索引也是优化得很棒的。

但Excel透视表却无法向PowerbiDeskTop发出DAX查询,而只能是MDX查询。目前可以向PowerbiDeskTop发出DAX查询的客户端就PowerbiDeskTop一个,在PowerbiDeskTop上拖拉字段所发出的查询是DAX查询,也就是速度和性能杠杠的。

Excel催化剂向PowerbiDeskTop发出DAX查询

以上提到,Excel自身是无法向PowerbiDeskTop发出DAX查询的,就算用了第3波的功能,也只能让透视表顺利连接上PowerbiDeskTop发出MDX查询,用来做一些汇总统计分析的交互最为便利。


今天插件再上一超级功能,让Excel顺利向PowerbiDeskTop发出DAX查询,而且不单单可以手动写DAX查询,还可以像操作透视表一样只需通过拖拉字段的方式,自动生成所需的DAX查询并返回查询数据结果,同时这个查询还可以保存下来,供下次重新打开Excel和PowerbiDeskTop时重复使用,功能体验,再次达到国际领先水平!!

功能详细介绍

查询界面总览

  • 下图序号1pbix文件清单,若需要打开多个pbix文件,此处显示多个pbix供选择,需要先选择对哪个pbix文件进行查询

  • 下图序号2pbix文件最后一次查询的DAX语句,有时会有多条记录,需要选择自己最终想要的记录,选取的记录的DAX查询内容将显示在序号3和序号4的区域供进一步识别是否所需内容在PowerbiDeskTop的可视化区域中进行图表组件的字段选择(需要生成较多字段的查询最后用表组件)后,PowerbiDeskTop将自动生成DAX查询语句向SSAS模型发出查询请求,最终把数据结果返回到可视化组件中,同时还可以配合字段的筛选功能,当数据量大时只选取所要符合条件的数据子集。利用此自动生成DAX查询的功能,配合在Excel催化剂上可检测出此最后一次提交的DAX查询的内容的功能,可轻松实现如透视表一般地拖拉字段即出结果的最终效果。

  • 下图序号3此区域是前面序号2的DAX查询语句的优化版本,删除不必要的TOPN等限制返回数据数量的语句,精简出真正符合要求的DAX查询。同时此区域可直接粘贴自己写好的DAX查询语句,不必只用自动生成的简单的DAX查询。DAX查询是个很庞大的复杂的查询,好比SQL查询也可以写出很复杂的查询语句,比自动生成的语句更能满足查询结果,有写DAX查询语句能力的,可写好DAX语句直接粘贴到序号3的位置即可。-下图序号4若使用的是自动生成的DAX语句,序号4的位置将显示此DAX查询语句的小范围数据预览,方便查看DAX查询结果是否是所需的结果。

    内容插图

额外辅助功能

前面提到的DAX查询界面的功能是本次主要功能,有了DAX查询语句,只需简单点击新表查询或覆盖现有表查询,即可发出DAX查询并返回对应的数据结果。

为使插件使用体验更佳,特设立几个小功能,让整个过程更流畅,更好用。

  • 格式化DAX前面序号3的位置,DAX查询的文本没有关键字高亮显示,都是统一的黑色,若有一些高级一些的修改DAX语句再发出查询的话,此段DAX查询代码阅读性仍不足(虽已经进行了代码的排版,对DAX查询熟悉的话,已经很好阅读了),

本插件借助https://www.daxformatter.com/网站的格式化功能,通过联网的方式向网站提交DAX查询内容,让网站帮助格式化DAX语句,同时再调用https://cloudconvert.com/网站提供的API接口,让刚刚返回的html文本转换为rtf格式,可以在Excel的窗体上显示并进行修改,从而达到了最佳的阅读效果。此功能需要联网,且处理速度有些许卡顿和缓慢(连接国外网站较慢),同时API接口有使用次数限制,最好自行申请APIKey(点击【设置格式化APIKey】进行设置)。内容插图内容插图

  • 刷新DAX查询在打开查询界面后,发现最后一次的DAX语句并非自己所要的最终版本时,可返回PowerbiDeskTop对字段进行拖拉,让PowerbiDeskTop帮助生成一段新的DAX代码,因对PowerbiDeskTop拖拉操作,Excel无法识别和检测到,需要手动点击【刷新DAX查询】,让新的DAX查询能够更新加载进来。

  • 保存DAX查询一段DAX查询写好后,想下次仍然可以直接调用,不用重复性地操作之前操作过的到PowerbiDeskTop里的多个步骤,可以把此段符合要求的DAX查询保存下来,供下次使用,当然自己手写或修改过的DAX查询更值得保存下来复用,操作步骤为点击【保存当前DAX查询】即可保存到刚刚序号3所示的查询(若DAX查询代码已经格式化过,保存的是已经格式化过的代码,更具人性化,无需重复格式化)。

保存过的DAX查询,点击【历史DAX查询】可调出所有保存过的DAX查询,并可对其历史DAX清单进行删除或修改操作。

内容插图

  • 查询结果覆盖现有工作表数据查询的结果一般首次使用,会让其在新建的工作表中存储,若已经保存过数据,并且数据又再次引用了其他的公式或透视表,若仍然在新的工作表上重复之前做过的步骤,就未免太重复性低效工作了,此时可用【覆盖现有表查询】的方式来更新现有表里的结果数据,现有表里的公式和透视表引用等将不受影响。