经过这一轮的List(清单)实作,相信您对清单的结构、语法与特性,有些基本认识了吧!接着,我们就来看看另一个Power Query容器:Record(记录)的特性。
建立一笔资料记录
就像是Excel工作表横向的资料列,在资料表的结构上,横向便是一笔一笔的资料记录。在Power Query里是使用一对中括号[]来表示一笔资料记录。藉由栏位名称与栏位值来表达该笔资料记录的内容,而栏位与栏位之间,则以逗点作为分隔符号。每一个栏位资料的内容,则是由一个等式来叙述,等号的左边是栏位名称,也就是资料行名称,等号的右边则是该栏位的值。栏位名称两侧不需要双引号,但是若栏位的值是文字资料,则必须要加上一对双引号。因此,一笔Record(记录)的基本撰写语法为:
[栏位1名称=值, 栏位2名称=值, 栏位3名称=值,…]
例如,建立一笔资料记录:
=[工号="E9002",姓名="林美如",工时=87,时薪=650]
若要检视整个M语言的程式码,可以开启[进阶编辑器]而一目了然。
既然是Record(记录),在Power Query查询编辑器视窗顶端即显示着[记录工具],而底下[转换]索引标籤里的[转换]群组内提供了[成为资料表]命令按钮,可以协助使用者将Record转换成Table(资料表)。
将一笔记录转化成表格,可显示出该资料记录有哪些栏位名称(Name资料行)以及各栏位的值(Value)。这时候在[套用的步骤]底下也新增了一个查询步骤,转换后的查询输出是预设为[已转换为资料表]的查询步骤,此查询输出结果包含2个栏位、4个资料列的Table资料型态了。
其实,只要懂得M语言的使用,也是可以自行撰写程式码来完成所需的查询步骤。例如:我们想要导出Record里每一个栏位(Field)的值(Value),则可以使用Record.FieldValues()函数。所以,在来源步骤的下方添增一行程式码,例如自行输入:
输出 = Record.FieldValues(来源)
您也会发觉在进阶编辑器里输入程式码的过程中,Power Query都会适度的弹跳出相关的语法说明,提醒我们也让我们学习到相关函数的用途与语法。譬如:此範例中的Record.FieldValues(来源)函数,小括号里的来源参数其资料型态必须是Record,而此函数传回的查询结果是List资料型态。
一次建立多笔资料记录
我们可以藉由建立List(清单)的形式来建立多笔Record(记录),也就是每一笔Record视为List里的元素,撰写在一对大括号里:
{Record,Record,Record,….}
例如:
={[工号="E9003",姓名="陈孝天",工时=102,时薪=480],[工号="E9005",姓名="邱玉嫔",工时=76,时薪=720],[工号="E9008",姓名="林世贤",工时=92,时薪=1020]}
输入List语法建立多笔Record的函数编码。
将List转换成Table
List的内容既然是Record,那么自然将List转化成Table也不是难事。例如:以刚刚建立多笔Record的List为例,可以点按[清单工具]底下[转换]索引标籤里的[到表格]命令按钮,开启[到表格]对话方块,根据清单内容建立资料表,不用点选对话方块里的任何选项,直接点按[确定]按钮。
List转换为表格的函数是:
Table.FromList()
语法为:
= Table.FromList(来源, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
立即产生一个名为[已转换为资料表]的查询步骤。此範例转换成功的资料表里有1个名为[Column1]的资料行、3个资料列,其内容都是(Record)。点按[Column1]资料行的展开按钮,即可展开此资料行里的Record。
展开Record内容的选单,选取所有的资料行(所有的资料栏位),取消[使用原始资料行名称做为前置词]核取方块的勾选,然后点按[确定]按钮。
将Table(表格)里含有Record内容的资料行进行展开的操作,相对应的M语言函数是= Table.ExpandRecordColumn()函数。您不要看密密麻麻的程式编码就感到害怕,其实,了解一些电脑与资料库相关领域的专有名词,也都不难揣测出这函数与其参数里的意义。例如:展开Table里Record资料型态的资料行,其函数 Table.ExpandRecorlColumn() ,其中Table是资料表;Expand是展开之意;Record是资料记录;Column是资料行,不是都名符其实吗!
综观,在记录的处理上,我们经常会将Record转换成List或Table来处理。而相关的函数是Record.ToList()函数、Record.FieldValues()函数。此外,不但Record可以转换成Table,Table也可以转换成Record。Record也可以进行合併,例如:可合併List中的多笔Record。
前一篇:<<Power Query三大容器实作系列 - (5/7) – 关于List的索引值>>
下一篇:<<Power Query三大容器实作系列 - (7/7) Table(资料表格)的建立编辑与转换>>