Power Query三大容器实作系列 - (7/7) Table(资料表格)的建立编辑与转换

Table容器是Power Query中处理结构化数据的核心工具,也就是我们俗称的资料表(Data Table)。透过行、列方式储存资料,可以执行筛选、合併、转置等多样操作,满足数据清理与转换的需求。Table容器在资料整合中更扮演重要角色,可以整合多个来源数据,也是进行複杂分析的基础,能与Excel及Power BI无缝对接,支援枢纽分析、动态报表等。熟练掌握Table容器不仅能提升工作效率,还有助于应对多样化的数据分析需求,是了解与学习Power Query的关键一步。

Table(资料表格)

Power Query所论及的Table(表格)指的资料表(Data Table),是纵向行(Column)和横向列(Row)结构所组成一系列二维阵列资料结构(Array Data Structure)的集合,是资料库(Database)的主要储存元件。汇入外部资料至Power Query查询编辑器环境,即是资料表形式的查询结果。

使用M语法建立资料表

除了汇入外部资料产生资料表查询外,在Power Query查询编辑器里,也可以利用M语言的#table函数,轻鬆建立一个资料表。而#table的语法为:

#table(columns as any, rows as any) as any

其中第1个参数columns是资料行名称(也就是栏位名称),以List架构来撰写,而第2个参数rows也可以是List的结构,List里的每个项目元素便是包含资料表里的各栏位名称,以及每一笔资料列的各栏位内容。。

例如:

单栏且单一储存格的表格,若表示姓名为 陈小华,则可以写成:

=#table({"姓名"},{{"陈小华"}})

这是一个单栏单笔资料列的Table。

如果所建立的Table是三个资料行,也就是包含三个资料栏位(姓名、工时、时薪)的1列资料("陈小华",82,575),则建立此表格的M语法为:

=#table({"姓名","工时","时薪"},{{"陈小华",82,575}})

在预设状态下资料行都是any资料型态的查询结果。

若要建立多栏多列的资料表,例如延续刚刚的实作内容,可以撰写出三个资料栏位、4笔资料列的表格:

=#table({"姓名","工时","时薪"},{{"陈小华",82,575},{"李大同",74,846},{"黄玉琳",56,756},{"赵文丰",68,1024}})

Table里包含List

原本在资料表的设计上,如果栏位里的内容允许填入多项资料,而非只是基元值(Atomic Value),则该栏位的资料型态,若是设定为List容器,将是不错的选择。例如:一个资料表里要储存个人基本资料,包含[工号]、[姓名]与[专长],其中[工号]及[姓名]都设定为文字型态是颇为适宜的,而若一个以上的多项专长也都可以储存,则[专长]设定为List(清单)资料型态,应该也是不错的选择。以下我们就利用M语言程式编码的撰写,来建立一个Table里的资料栏位也包含List资料型态的範例。内容为3笔资料记录,3个资料栏位,其中[专长]资料行的内容是List。

工号姓名专长
EM092李正华List(内容是:程式设计,音乐,绘画,Excel)
EM094黄梅如List(内容是:日文,舞蹈)
EM095邱政宽List(内容是:品管,法语,驾驶)

程式编码如下:

=#table({"工号","姓名","专长"},{{"EM092","李正华",{"程式设计","音乐","绘画","Excel"}},{"EM094","黄梅如",{"日文","舞蹈"}},{"EM095","邱政宽",{"品管","法语","驾驶"}}})

在预设状态下资料行都是any资料型态,但是[专长]资料行的内容则是可以继续深入查询的List资料型态。

我想刚刚的程式码编输入,最头痛的应该就是括号的对应了吧!正如先前的学习与实作,这些多层次的大括号、小括号都有其意义,缺一不可,但是都连串撰写也实在难以阅读与检视,撰写时适度的按下Enter按键进行分行,不但有助于编辑也提高了可读性。

=#table({"工号","姓名","专长"},

{

{"EM092","李正华",{"程式设计","音乐","绘画","Excel"}},

{"EM094","黄梅如",{"日文","舞蹈"}},

{"EM095","邱政宽",{"品管","法语","驾驶"}}

}

)

Table里包含Record与Table

那么,上述两个查询其实也可以成为另一个查询内容喔!例如:再建立一个名为[员工名册]的查询,这也是一个Table资料型态的内容。共有5个资料栏位的表格,分别是[工号]、[姓名]、[基本个资]、[眷属资料]与[兴趣],其中,[工号]与[姓名]资料行都是文字型态的内容,而[基本个资]资料则描述着员工的个资,因此,可以建立Record资料型态的内容,以此例而言,藉由Record语法,建立[性别]、[年龄]与[学历]等3的资料栏位的记录。而[眷属资料]资料行是储存员工的眷属资料,是以资料表容器的格式呈现,且资料表包含了[姓名]、[称谓]与[年龄]等3个资料行。至于最后一个[兴趣]资料行则是List资料型态的内容。

此资料表的程式编码如下:

let
        来源 = #table({"工号","姓名","基本个资","眷属","兴趣"}, {
        {"E203","孙志勇",[性别="男",年龄=38,学历="硕士"],#table({"姓名","称谓","年龄"},{{"孙正德","父",62},{"赵蕙兰","妻",29},{"孙和庭","长子",6},{"孙莉美","长女",3}}),{"运动","阅读","摄影","旅游"}},
        {"E205","李晓雯",[性别="女",年龄=52,学历="EMBA"],#table({"姓名","称谓","年龄"},{{"林月卿","母",77},{"李成桂","父",81},{"周孟隆","夫",55},{"周家豪","长子",23},{"周品妍","长女",21}}),{"音乐","游泳","绘画"}},
        {"E206","萧尹文",[性别="男",年龄=46,学历="专科"],#table({"姓名","称谓","年龄"},{{"沈珊如","妻",47},{"萧胜宏","父",72},{"萧子晴","长女",18},{"冯咏晴","次女",18},{"萧承恩","长子",15}}),{"运动","健身","冲浪"}},
        {"E208","冯怡君",[性别="女",年龄=28,学历="大学"],#table({"姓名","称谓","年龄"},{{"冯进财","父",58},{"林玉兰","母",50},{"冯冠廷","弟",25}}),{"瑜珈","园艺","烹饪","旅游","写作"}}
        })
in
        来源

全部容器都撰写在一起的叙述虽然没有多少行程式码,但阅读与除错并不容易。所以,有规则、有规律的分行、分段,调整成适度的查询步骤,程式码就必较容易维护。

从上述的实作练习一定可以让您体验到M语言的资料型态与三大容器List、Record与Table的特性及彼此的关係。基本上,在实务应用中我们并不太会亲自键入M语言程式编码来建立新的资料,而是从外部资料来源汇入需要处理、拆分、彙整、运算与清洗的大量资料与多方来源的异质性资料。而这些资料来源的资料型态与特徵,正如我们实作中所看到的这些资料库名词、图示、功能与处理基础,因此,相信在面临这些内容时您就有能力可以处理与面对。

 

Power Query三大容器实作系列

  • <<Power Query三大容器实作系列 - (1/7) Power Query的资料型态>>
  • <<Power Query三大容器实作系列 - (2/7) Power Query的三大容器>>
  • <<Power Query三大容器实作系列 - (3/7) Power Query List的建立与编辑>>
  • <<Power Query三大容器实作系列 - (4/7) 向下切入:深化(撷取)容器里的内容>>
  • <<Power Query三大容器实作系列 - (5/7) – 关于List的索引值>>
  • <<Power Query三大容器实作系列 - (6/7) Record(记录)的建立编辑与转换>>
  • <<Power Query三大容器实作系列 - (7/7) Table(资料表格)的建立编辑与转换>>

 

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章

5 点赞(415) 阅读(67)