美文网首页
20190726PQ学习心得

20190726PQ学习心得

作者: 6bd9f7257faf | 来源:发表于2019-07-26 13:29 被阅读0次

一、数据结构

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上下钻取使用

相关文章

网友评论

      本文标题:20190726PQ学习心得

      本文链接:https://www.haomeiwen.com/subject/qdyrrctx.html