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

2019-09-23 19:11:44 浏览数 (1)

本例,真正理解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的重要套路。

0 人点赞