Power Query函数集合

酥酥 发布于 2022-01-07 970 次阅读


一、文本函数集合

文本拆分---Text.split(text,delimiter) text为文本 delimiter是分隔符 Text.split("A/B/C/D","/")

Text.splitany(text,delimiter)这里的delimiter支持多分隔符,举个例子"-|"这样-和|都会被视作是分隔符

文本合并---Text.Combine(list,sign) text list是文本数组 sign是连接符号 Text.combine({"1","2"},"-")

数字转文本---Text.From(text)这里的text是一个数字 Number.From(text)文本转数字

文本转列表---Text.toList(text)这里的text必须是文本

返回文本长度---Text.Length()

从text中从左提取num个---Text.start(text,num)

从text中在中间第start位置取num个---Text.middle(text,start,num)

从text中从右提取num个---Text.End(text,num)

从text中去除format字段匹配的内容Text.remove(text,*format)format可以是"0".."9"表示0-9,"a".."z"表示a到z,"A".."Z"表示A到Z,"一".."龥"表示所有的中文 "<",">"表示移除<>

从text中找出子串出现的位置---TEXT.Positionof(text,char,num) num=0第一次出现的位置 num=1最后一次出现的位置 num=2所有出现的位置list

从text中的num位插入string---Text.insert(text,num,string) 可以与text.LENGTH配合实现插在文本最后

换行符在powerquery中是这样表示的"#(lf)" 文本连接使用&

替换text中从start_num开始的num_char个字符的内容,替换为new_text---TEXT.replacerange(text,start_num,num_char,new_text)

对文本批量加前/后缀---Text.Padstart/Text.Padend(text,num,fill) text如果不满足num那么长就在其前/后添加fill字符作为填充

对text重复n次-Text.repeat(text,n) 与padend,padstart结合很好用,做李克特量表

按照分隔符取内容 参数(text,string,[position]) position表示第几分隔符 如果要从后往前数position这么写{0,relativeposition.fromend} 另外如果使用betweendelimeters string有两个参数

  1. text.beforedelimiter取分隔符前的内容
  2. text.afterdelimiter取分隔符之后的内容
  3. text.betweendelimiters取两个分隔符之间的内容

文本修剪(删除前面/后面的空格/指定字符)Text.trim(char)多个char用数组表示{"a".."z"}

二、列表函数集合

返回列表元素个数---list.count(list)

列表求和---list.sum(list)

通过list(多个字段名)可以自主构建列表 也就是行方向
列求和复杂一些,构建新的空查询,键入公式
类似于数据库insert操作 字段名=值这样的方式插入 比如姓名="cjl" 语文的list.sum([列名]),然后计算,但是我们并没有指定表所以还是算不出来,指定一下list.sum(列求和([语文]))这是一条记录 记录转表用table.fromrecords()但是还没完
table包含着list包含多个record是这样的关系所以我们还需要在公式fromrecord添加{}转为列表形式(record.tolist()记录转列表),一个record就是一行,一个或多个record(行)也就是返回结果,就是一次查询,查询的结果是一个list,list包起来作为一个table table-list-record

从table中取列用[列名] 列转换位表:转换-到表,从list中取元素用{序列号} =后面写上一次操作名表示使用上一次操作完成的表 _表示当前行的记录

列表分隔函数---list.split(list,sign) 把list中的内容按照相同的对sign的模细分成多个list,每个list里面有sign条内容

获取表中所有列---Table.tocolumns 表转多个list

列转表格---Table.Fromcolumns("数据源的列","新table字段名")

获取表的标题名---Table.ColumnNames()

将多个列表合并成一个列表---List.combine(list)列表的list

列表元素去重---List.distinct

列表元素去空---List.removenulls

列表横向求和---List.skip(list, num)从list中跳过第一项,比如list是1,2,3,4 参数为一的话表示一个2,3,4的list 还可以筛选 此时num为each _>3

列表筛选函数---List.select(list,criteria)criteria为each _>3 and/or....

List.transform(list,each _) each _表示列表中的元素

取列表函数从start开始取num个List.range(list,start,num)

相当于for each i in list:do each的function​

列表中找到包含text内容,返回listList.findtext(list,text)返回成功find到的text

返回值在列表中的位置List.positionof(list,text,num)num=0第一次出现的位置 num=1最后一次出现的位置 num=2所有出现的位置list

IF ( and )then else

列表生成器 List.generate(()=>1,each _<=10,each _+1)生成1-10的序列

List.zip(list1,list2) 与python中的zip一样

三、表格函数集合

获取表中所有列---Table.tocolumns 表转多个list,一列对应一个list

获取表中所有列---Table.toRows 表转多个list,一行对应一个list

列转表格---Table.Fromcolumns("数据源的列","新table字段名")

把每行内容连接成一个list,结果是duogelist---Table.tolist(表名,连接符combiner.combinetextbydelimiter)combinetextbyeachdelimiter可以放入多个不同的连接符,按照连接次数逐个调用

分组Table.Group(table,分组依据,{"分组完字段名",each 列名},num)列名对应的是一个list,num=1全局匹配,num=0局部匹配,连续字段的才视为一组

展开record---Table.ExpandRecordColumn(table,要展开的列名,"展开的列表1..5","展开的列表名")

高级拆分列---Table-SplitColumn(table,列名,splitter.splittextbydelimiter("分隔符"),拆分几列)多个分隔符是splittextbyeachdelimiter

遍历Column---就是对单个Column调用函数Table.TransformColumns("源",{"列名column",each _})

把标题升起来---Table.promoteHeaders()

取表中的值---Table.range(table,从第几行开始取,取几行)

表格转置---Table.transpose()

筛选---Table.selectRows(表明,条件) 条件中的子查询比如条件中列比较时候列代表的是一个表那么需要给这表一个名字(子)=>子[列名]这样的方式来调用

排序---Table.sort(table,{"列名","标准"})可以有多个{"",""}本质上是自定义排序

透视列Table.pivot(table,list.distinct(行),"列名","统计值",统计值聚合函数)

逆透视列Table.unpivot(OtherColumn)(table,{"列名1","列名2"},"新列名","新列名")

仰天大笑出门去,我辈岂是蓬蒿人
最后更新于 2022-01-07