前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PowerBI PQ 深度套路之构造模板函数

PowerBI PQ 深度套路之构造模板函数

作者头像
BI佐罗
发布2019-09-23 19:11:44
1.4K0
发布2019-09-23 19:11:44
举报
文章被收录于专栏:PowerBI战友联盟PowerBI战友联盟

本例,真正理解PQ的分界线。

在文章中,很少讲PowerQuery,也就是PowerBI的查询编辑,因为在实际应用中,确实没有碰到特别复杂的情况,原因有三: 1.使用PowerBI应减少在导入数据环节的复杂数据转换处理,这会拖慢速度,而且影响非常明显,所以,应该使用已经整理好的数据作为PowerBI的数据源,在这种模式下,PowerBI使用PQ快速简单筛选下数据就可以进行建模工作,而建模将处理海量数据的运算。 1.使用PowerBI的PowerQuery做非常复杂的数据转换工作,要求数据量应该是小的,例如:小于10W行。 1.即使是使用PowerBI的PowerQuery做非常复杂的数据转换工作,也有几个不写代码的重要套路。

因此,PowerBI中的PowerQuery与PowerBI的DAX不同,DAX需要真正写代码,而PowerQuery却可以按套路来操作,尽量不写或少写代码。今天的案例就是分享几个套路中的一个重要套路:模板函数法(自己命名,如有雷同,纯属巧合)。

我们的目标是:不写代码,胜似代码~ 来看看。

从电影数据案例来理解模板函数法

在此前的文章中:PowerBI 零代码智能网抓中国电影大数据让人惊叹,这里不再重复之前的说明,但从另一个角度来看待这件事,为了获得2008年到2018年的每年电影票房数据,我们用分治法的思维,将问题描述为:

  1. 先获得处理某年电影票房数据的能力,记作:fnGetMovieData。
  2. 构建一个年份表,对每一行,应用 fnGetMovieData 函数得到各年数据。
  3. 展开合并上述第二步的数据。(完)

整个结构如下:

其中,我们使用MovieSample作为种子以及Year作为参数来构建这个模板函数,然后整体再获得Movie的数据。整个过程几乎不涉及任何代码的编写。这里最关键的一步就是创建模板函数,如下:

这里的巧妙之处在于:参数,创建函数,与后续的调用自定义函数融为一体,是PowerBI中PowerQuery的正统操作。

从多个文件提取并处理数据来理解模板函数法

该案例来自社区伙伴的实际问题模拟。首先显示下正确提问问题的姿势:

下面来看如何一行代码不写得处理这个问题。

我们仍然需要按照分治法的思维来思考这个事情:

  1. 先获得处理某个单文件的能力,记为:fnTransformExcelFile。
  2. 获取文件表,对每一行,应用 fnTransformExcelFile 函数得到每个文件处理后的结果。
  3. 展开合并上述第二步的数据。(完)

这和处理电影数据的案例,如出一辙,思路完全一样。在这里的分享,展示这两个案例,更多地给大家启发一种举一反三的思维以及分治法的通用模式,这些需要用PowerBI 的 PQ 深度套路来落地。

对单个文件进行逆透视在PowerBI的PowerQuery中非常简单,然后把这个能力需要模板化,形成函数。

这里的特别之处在于,由于处理的主体是文件,是一个二进制文件,所以可以用到二进制文件作为参数,这在PowerBI的PowerQuery里还真有:

因为我们人工是无法输入二进制数据,所以必须可以留空以允许我们创建一个二进制的参数。

但用这种方法来制作函数模板,会出现错误:

这个错误是由于参数不能正确生成二进制文件,导致会报错,但该模板函数本身又没有错。

WHAT??!! Are You Kidding Me?!!

是的,您没听错:这里创建了一个报了错的没错的函数,这里需要您有强大的神经来理解这个很绕的逻辑。

然后,就轻而易举地完成了后面的事情。

本文更多展示思路,在细节上的忽略不影响整体思维和结构。可以案例文件为准。

总结

PowerBI在设计PowerQuery的时候可以明显发现,PowerQuery编辑器的每次改造都是希望可以对应于PowerQuery本身代码的功能去完善。而参数和创建函数的存在也确实是为了创建带参数的函数而存在的。我们通过两个案例可以看出:创建模板函数的能力将参数,创建函数,新建列,调用自定义函数,用单元格作为函数参数融为一体。通过模板函数与分治法的结合可以处理很多的场景,因此这不失为一项PowerBI中PowerQuery的重要套路。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI战友联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从电影数据案例来理解模板函数法
  • 从多个文件提取并处理数据来理解模板函数法
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档