再度颠覆:Power BI支持自定义数据连接器

没有最强,只有更强。自定义连接器打造专属数据源。

今天来剂猛药,明显标题党又吹颠覆;但真的等了好久好久,全部高能,非入门,感谢学Power Query,还来得及,不知道怎么学习,推荐你教程。

微软截止目前发过两部关于Power Query底层编程语言(M语言)的官方文档:
1、《M语言规范》,本质在讲语法(类似于英语语法,怎么造句);
2、《M标准库函数》,本质在讲单词(类似于英语单词,死记硬背吧)。

关于M语言的单词(函数),截止目前一共有680个左右,参考文章:

有些高手已经自己学完了单词,也学了语法,现在问题来了,在语法里有提到过section,但在Power Query的编辑器里却用不起来,为什么?

因为真正的语言级编程支持在后面等着呢。今天文章将开启使用section的里程碑分界线。这个如果不好理解,先看另一个事。

Power BI目前已经开始支持自定义数据连接器,这意味着我们可以封装自己的数据源。

封装一个日期表

封装 是可复用哲学中最强大的思维模式(没有之一),先来看看效果,我们通常需要一个日期表,可以是这样:

WOW!在获取数据里直接是【日期表】,这并不是Power BI内置的数据源,但现在可以自行创建数据源。

接着会看到:

这里是Excel120创建了用于【日期表】连接器的服务,所以会提醒一下,这不是微软官方的连接器,是不是要继续。继续下一步:

日期表直接被返回啦!什么情况,这意味着针对日期表的构造过程早已完成,直接被完整封装起来。

点击【编辑】去一看究竟吧。不可思议的函数出现了:

学过PQ函数的同学都知道,在PQ中只能是系统函数类加点,如:Date.Year( ... ),自己定义的函数是不能带点的,而这里居然用Excel120做了函数的引导类。

我们直接看看Excel120.Calendar会发生什么:

以及:

发现端倪了吗?这里直接给出了函数的完整说明及文档。

而且这个Excel120.Calendar函数支持任意参数排列如:

  • Excel120.Calendar() 返回当年日期表
  • Excel120.Calendar( year ) 返回所在年份的日期表
  • Excel120.Calendar( year1 , year2 )返回两年间的日期表

这个构建日期表的函数也就满足了我们的任意要求。这被称为【OCP原则】(后续发文详解【可复用的结构设计技术】)

至此,该日期表就完整的构建完毕。

作为本文福利,提供该灵活的日期表给到各位。当你需要日期表的时候只要点击一下即可随时待命生成。

自定义数据连接器的配置

如果你能拿到自定义数据连接器,那配置一下就一劳永逸地使用。

首先,这是Power BI Desktop中2017年7月更新后的新功能,在预览中,我们需要打开预览,如下所示:

如果感兴趣,可以点击【了解详细信息】在微软官方进一步了解其背后原理。

链接为:https://github.com/Microsoft/DataConnectors

我们跟随该项目的开发负责人一起了解下自定义数据连接器到底能干嘛。

数据连接器+想象力=新生产力

想象一下,数据连接器可以把所有的数据查询都打包封装,这样就不用每次都重新写M代码。它现在及不久的未来更能实现更多想象空间:
1、针对REST API封装出商业分析包
2、整合各种Power Query已经支持的数据源
3、对于SaaS服务实现流畅的OAuth验证过程
4、提供加工封装过的数据源确保隐私及安全
5、为将来和Power BI Content Pack打配合支持不同的授权模型
6、直接在ODBC级别封装Direct Query特性

目前数据连接器仅仅在Power BI Desktop中可用,而且存在一些问题和很明显需要改进的地方。

举例说明自定义连接器的配置

首先,开启PBID预览功能。

配置过程如下:
1、先加BI佐罗好友,私信获取该文件:【Calendar.mez】。数据连接器文件是一个以.mez结尾的被编译过的二进制文件。这个二进制文件里面封装了M代码。
2、在【我的电脑】系统目录【我的文档】下建立目录:Microsoft Power BI Desktop\Custom Connectors\,如下所示:

并把该文件放这里即可。

3、重启Power BI Desktop,它会自动检索这个目录下的.mez文件,并尝试加载,如果该文件编译正确,则可正常加载,如果编译有问题则解析不出来,无法加载,当然这里的案例文件【Calendar.mez】应该是没有问题的。

加载完成,那就把它当成数据源来用吧。

如何制作自定义数据连接器

目前微软相关项目组在github.com中放出了教程,有兴趣的可以参考操作,相关资料在:https://github.com/Microsoft/DataConnectors

这里简单说明一下整个过程:

首选,必须安装Visual Studio作为开放平台工具(自行搜索下载)。相当大,安装在系统盘需要大概17G空间。
其次,按照微软说明的顺序来安装相关组件及简单配置,前文已包含该过程的部分描述,如下:

这里需要给VS安装Power Query SDK,这样就可以在VS里面写M代码并编译成.mez文件了。

配置完成好,可以参考文章:

https://github.com/Microsoft/DataConnectors/blob/master/docs/m-extensions.md

继续进行。

整个流程是:

因为有了Power Query SDK,就可以在VS中建立一个Power Query项目:

创建完成后,可以看到:

这就是可以写M代码的地方了。

我们在【xxx.pq】文件中写代码。
我们在【xxx.query.pq】文件中写测试的查询,可以测试【xxx.pq】中编写的代码是否正确。

当然,默认的案例是可以运行的,只需要按【F5】编译执行即可。然后马上会碰到第一个错误,如下所示:

这个错误的问题在于安全性级别的配置,做一个调整,如下所示:

重新按【F5】编译执行,即可得到正确结果:

剩下的工作就是去发挥想象力的时候了。
你可以封装你喜欢的任何M代码进来。

M语言智能感知

Power Query一直没有的遗憾是智能感知,终于有个地方可以好好写代码了,还是微软的VS里最先集成了M代码的语法感知。

体验如下:

这里终于看到了三大重点:
1、section出现,函数的集合出现了,可以用【点】了
2、M代码终于被格式化好了
3、智能感知来了

这便完整地从语言级别支持了M语言。关于Power Query以及M语言的详细论述已经超过本文范围。

正文完。


M语言是一门函数式泛型语言,其思维模式和C语言、VBA、JAVA是完全不同的,和javascript都是有些接近,所以用一般的学习方法及理解方法会绕很大的弯子。

而对于非技术的业务及分析人员是可以直接体验到Power Query在拖拽生成时带来的便利的,但我们说一门语言底层基因必须好,向上能让小白用户快速操作,向下能让技术人员深度使用,运行能带来强劲的性能效率,Power Query(M语言)还有很多改进空间和想象空间,与其看他成长,不如陪他成长

延伸阅读:

什么是Power Query?
什么是Power BI?
什么是Power Pivot?

本文福利:

1、Excel120定制日期表连接器
2、Power Query官方白皮书(两部)
3、Power Query国际顶级教程(两部)

领取福利方法:

1、分享出去!

插播广告:Excel120是不同于市面你看到的Excel教程的,正如你所见。与其看其成长,不如一起成长。公众号后台回复【真爱】领取专属真爱卡,然后分享给好友,你的每次分享都会留下积累,直到一天你会得到【专属福利】(非卖品)。

2、私信领取你想要的资料吧。
Power BI的学习从现在开始,从Excel到商务智能,不能再等了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容