一、数据结构
1、列表,{}表示,是无序的、值可重复,列表调用某值是: 列表名{位置},位置是从0开始。如{1,2,3}{0}=0
2、记录,类似字典,[]表示,调用某值是: 记录名[字段名].如[name="Jhon",score=80][name]=Jhon
3、表,分隐式和显示,隐式的特点是字段名数据类型由数据自动生成,用列表表示;显式的字段名由记录表示,值等于数据类型。每行记录要与字段一一对应并不可错位,每一列数据类型必须保持一致。引用某一条记录是:表名{位置},0表示第一行,若要看表结构或字段名信息需借用其他M函数。获取某行记录某字段的值是:表名{位置}[字段名];获得某列数据是:表名[字段名/列名]
列表、记录、表可以相互嵌套4、用PQ爬取网页数据,新增列,输入M函数Web.Page(Web.Contents(网址)){第几个表}[Data],然后跟合并查询一样,需要展开选取需要的字段数据。若出现部分ERRO数据,点击刷新重新爬取,多爬取几次就OK。爬取数据受网速及电脑配置等影响。建议进PDB用PQ爬虫网页数据
注:第一次爬取 需要安全验证选择公共权限;若网址由某一列数据组成不同的网址,需要新增一列保存最终网址数据,不要直接在Web.Contents函数汇总用&连接网址,会出现部分数据是ERROR,需要多次爬取才能得到最终数据
5、仅在M函数中,参数为NULL的函数使用时可以省略(),比如转变列数据类型使用的函数Int64.Type
6、try 抓取错误信息,格式 try error 表达式或某值,有错误信息返回的结果是[haserror=true,error=[reason="错误原因",message="错误点",detail=null]],没有错误信息返回的结果是[haserror=false,value=正确的值]。如 a=try error "negative unit count",结果a=[haserror=true,error=[reason="表达式错误(Expression Error)",message="negative unit count",detail=null]];b=try 2,结果b=[haserror=false,value=2]
二、Power Query的M函数
1、M函数是区分大小写,起始位置是从0开始,第一个参数是上一步骤的名称;新建源→其他源→空查询→输入‘= #shared’
2、修改列的数据类型,文本类型是type text,日期类型是type date,整数型是Int64.Type
3、双引号"",引用表名;方括号[],引用列名
4、Text.Middle(列,起始位置, 截取字段长度) 截取部分字符函数
5、Table.TransformColumnTypes(上一步骤名称,{{"列名1", type 数据类型},{"列名2",type 数据类型},...})) 修改列的数据类型,第二个参数是多个数组分装为一个数组参数(多维数组)
6、Table.AddColumn(上一步骤,
"新列名", 输入值 可以用函数生成,数据类型)函数是新增列。如Table.AddColumn(更改身份证类型, "文本范围", each
Text.Middle([身份证号码], 6, 8), type text)
7、Table.RenameColumns(上一步骤,{{"原列名1", "新列名1"},{"原列名2", "新列名2"},...}) 重命名某列函数,第二个参数是多个数组分装为一个数组参数
9、把某列的数字改成奇数,Table.TransformColumns(上一步骤,{{"列名", Number.IsOdd, type logical}})
10、把某列的数字改成是否奇数,Table.TransformColumns(上一步骤,{{"列名", Number.IsOdd, type logical}})
11、把某列的数字改为是否偶数Table.TransformColumns(上一步骤,{{"列名", Number.IsEven, type logical}})
12、增加索引列,Table.AddIndexColumn(上一步骤,"列名",起始值,步长)
13、表复制功能,鼠标右击有两个复制选项,第一个复制是把参与选定表生成过程的所有表及步骤复制,并点击粘贴才能生效;第二个复制是复制选定表的信息及步骤并粘贴
14、界面无法操作的功能需要借用M函数实现,比如要对两个列进行分组排序,两种方法:第一种方法是直接写M函数,分组排序
= Table.Sort(上一步骤,{{"列名1", 排序类型},{"列名2",
排序类型},...}),Order.Ascending是升序排序,Order.Descending是降序排序;第二种方法是先选定一列点击界面的排序按钮,然后进入高级编辑器仿造上一步的排序函数,新增一个步骤用于多列排序
15、PQ无显示格式功能,数据类型的修改具体值和显示值是统一的
16、PQ是非关系型表格结构,也叫数据集市,或数据仓库
17、PQ的分组依据中有两种计数,分别是对行进行计数和非重复行计数,非重复行计数是有多行记录一模一样才会当做1,若是某个字段的值在多行重复是不算的,不像数据库的distinct来计数分组不重复内容的数
18、Number.FromText(文本数字) 把文本数字转换为数值型;Number.ToText(数字)把数值型数字转换为文本数字
19、Table.ToColumns()将多列转化为列表
20、Table.FromColumns(列表)将列表转换为表
21、在新建空查询上创建从外部传参数的函数,格式(参数名1 as 数据类型,...)=>
let 要执行的语句块或步骤 in 结果值或最新的步骤内容。通过这种方式可以新增我们需要的新表。如下语句就是通过传参新增一个想要的新表:
(tihao as number) =>
let
源 = Table.ToColumns(转换部分),
step1 = Table.FromColumns(List.Range(源,0,1)&List.Range(源,tihao,1)),
重命名的列 = Table.RenameColumns(step1,{{"Column1", "学号"}, {"Column2", "得分"}}),
已添加自定义 = Table.AddColumn(重命名的列, "题号", each "第"&Number.ToText(tihao)&"题")
in
已添加自定义
22、List.Dates设置辅助日期辅助表供PBD上下钻取使用
网友评论