目前我最常用到的场景是:当我将PowerQuery数据模板做好之后,其他不熟悉PowerQuery的伙伴只需要提供简单的输入——比如文件或文件夹路径——就可以自动生成结果。

场景再实例化一下:我做了一个学习报告模板,有各种复杂的计算。这个模板需要从某个系统导出三个原始表:学习报表、所有学员名单和课程信息表。如果这个模板只供我一个人使用,毫无问题;当我需要把这个模板提交给其他伙伴使用时,他们就需要自己从系统中导出三个表然后修改模板的PowerQuery代码,这将是一场灾难。避免灾难的方法是尽可能将模板代码封装,只让其他伙伴导出三个文件,将文件路径填写到Excel表格即可。这就是参数表格发挥作用的地方。

以下是操作步骤和代码:

1.首先在Excel中创建参数表格,这个表格只有两列:参数和值。因为这整个思路是我抄的英文资源的,所以我偷懒照搬英文列名:“Parameter”和“Value”。然后用插入表格或套用表格的方式,将区域转化成表格,记得将表格命名为“Parameters”【图1】。注意左上角的“表名称”。Value列就是需要用户输入的地方,在这个例子中我的同事只需要将Value列相应值修改为自己导出的三个文件的全路径就可以了。

2.然后新建一个查询,选择“从表格”创建【图2】。这一步是创建包含参数值的查询,便于后面从这个查询里引用参数值。因为PowerQuery是没法直接从表格引用值的。创建过程比较简单,一路默认和确定即可,不再截图演示。因为是从已经命名的表格创建的,所以查询名自动继承了表格名字“Parameters”。

3.现在要创建一个函数,因为只有函数才会拥有动态变化的值。直接点击“新建查询-从其他源-空白查询”,创建一个空白查询,点击“高级编辑器”,删除里边的所有代码,把下面代码粘贴进去然后保存,并把该查询命名为“fnGetParameter”(这也是直接照搬的)。

//括号和等号加右箭头是函数的标志,括号里的是函数的参数,或者叫变量。如果把第一行拿掉,其实就是一个完整的查询。加上第一行就把这个查询封装成为一个函数了。

(ParameterName as text) =>

let

//获取刚才创建的Parameters表格

ParamSource = Excel.CurrentWorkbook(){[Name=“Parameters”]}[Content],

//这一步其实是让参数表格的行可以无限扩充,不再局限于本例中的三行。注意在“in”前的都是一条语句,并且有缩进,我这里偷懒没缩进。整条语句蛮抽象,我自己也还没完全弄懂其内部的运作原理,直接照搬了。

ParamRow = Table.SelectRows(ParamSource, each ([Parameter] = ParameterName)),

Value=

if Table.IsEmpty(ParamRow)=true

then null

else Record.Field(ParamRow{0},“Value”)

in

Value

4.接下来创建三个查询,分别是“学习报表”、“人员信息”和“课程信息”,然后对这三个查询进行各种复杂的Shaping也好,Calculating也好,然后加载到数据模型,然后根据需要添加计算列、计算字段,创建数据透视表、数据透视图乃至PowerView。十八般武艺样样上吧,做出一个真实的报告来就ok。具体步骤不赘述。

5.报告创建好之后,我要想让我的同事能够使用我的牛逼报告模板的关键一步来了:将上一步写死的源文件位置,替换成参数表格里的值。

将“学习报表”查询“let”后面的“源=……”替换成:

源 = Excel.Workbook(File.Contents(fnGetParameter(“学习报表文件位置”)), null, true),

将“人员信息”查询“let”后面的“源=……”替换成:

源 = Excel.Workbook(File.Contents(fnGetParameter(“人员信息文件位置”)), null, true),

将“课程信息”查询“let”后面的“源=……”替换成:

源 = Excel.Workbook(File.Contents(fnGetParameter(“课程信息文件位置”)), null, true),

6.为了便于同事识别,我将Parameters表所在的sheet名称重命名为“请修改”,并在表格区域外加上了使用这个模板的说明,这样他们一看就知道自己要干嘛【图3】。


7.保存该Excel文件,然后发给同事。

8.同事只需要导出三个对应的文件,保存在本地,然后打开此模板,分别填写三个文件的全路径信息,然后点击“刷新”,就获取到最新的数据了,保险起见,在数据透视表、数据透视图也刷新下吧。

PowerQuery的参数表格用法相关推荐

  1. jtable如何从表格中定位_Java Swing组件编程之JTable表格用法实例详解

    本文实例讲述了Java Swing组件编程之JTable表格用法.分享给大家供大家参考,具体如下: 表格是GUI编程中使用较多,但也是最麻烦的一个控件之一.表格是用来显示二维数据,提供编辑,选择等功能 ...

  2. linux mount命令参数及用法详解

    linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...

  3. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  4. VTK:参数Kuen用法实战

    VTK:参数Kuen用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkActor2D.h> # ...

  5. VTK:参数对象用法实战

    VTK:参数对象用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkActor2D.h> #in ...

  6. VTK:参数样条用法实战

    VTK:参数样条用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkCamera.h> #inc ...

  7. sort+参数+linux,linux sort下令参数及用法详解

    linux sort命令参数及用法详解 功能说明:将文本文件内容加以排序. 语 法:sort[-bcdfimMnr][-o][-t][+-][--help][--verison][文件] 补充说明:s ...

  8. python中什么是关键字参数_如何使用python语言中函数的关键字参数的用法

    一般情况下,在调用函数时,使用的是位置参数,即是按照参数的位置来传值:关键字参数是按照定义函数传入的参数名称来传值的.那么,关键字参数怎么使用? 工具/原料 python pycharm 截图工具 W ...

  9. linux中group命令详解,linux groupmod命令参数及用法详解

    需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作.接下来是小编为大家收集的linux groupmod命令参数及用法详解,希望能帮到大家. linux groupmod命令参数及用 ...

最新文章

  1. PHP面向对象编程(imooc)代码合集(四)
  2. 基于Policy Gradient实现CartPole
  3. 信息系统项目管理师-论文专题(四)进度管理论文写作
  4. 依赖注入容器Autofac的详解[转]
  5. 33.文件与 IO.rs
  6. ODPS2.0重装上阵,优化提升SQL语言表达能力
  7. 详解两种C#自动实现DLL(OCX)控件注册的方法
  8. 网上购物安全防范很重要
  9. HTML(2)--- 简介
  10. python异常和错误(syntax errors 和 exceptions)
  11. [蓝桥杯]试题 基础练习 FJ的字符串
  12. python 函数
  13. C#获取文件/文件夹默认图标
  14. DataType--数值类型
  15. 啊哈 算法 啊哈磊 扫描版pdf
  16. c语言 申请变量函数,C语言中变量和函数
  17. 可以学习相关框架【转:https://testerhome.com/topics/6283】
  18. 京东面试官:给我说说你简历上的订单系统是如何设计的?尽量详细点~
  19. vue使用print.js打印插件
  20. 从一到无穷大 #3 对象存储.浅谈

热门文章

  1. 红米k40和红米k40pro的区别 哪个好
  2. 【NLP】第8章 将 Transformer 应用于法律和财务文件以进行 AI 文本摘要
  3. SpringBoot后台java下载文件及注意的地方
  4. 实现财务自由 之 美股上市公司的年报(年度财报)(国内外公司年报20-F,10-k)查阅、下载、以及 翻译中文查阅、下载的方法
  5. 脉冲在matlab,脉冲时间信号MATLAB表示
  6. STC用PCA测量脉宽_超快激光脉冲测量和诊断使用自相关仪
  7. 程序员的数学---数学思维的锻炼
  8. 2022年武汉市高新技术企业各区县申报条件补贴、高企迁移奖励补助20万
  9. Android 8.0 状态栏信号显示、信号定制
  10. kinect深度距离误差_TOF相机深度矫正基于Kinect v2