前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Power Query中提取数据——列表篇(1)

如何在Power Query中提取数据——列表篇(1)

作者头像
逍遥之
发布2020-03-23 16:35:51
2.7K0
发布2020-03-23 16:35:51
举报
文章被收录于专栏:数据技巧数据技巧

表名为列表,第一步骤名称为源

(一)从头开始提取

1. 获取列表第一个

List.First(list as list, optionaldefaultValue as any)as any

返回列表的第1个值,参数2代表如果列表为空,可以指定返回一个值。

例:

List.First({1..10})=1

List.First({},"a")="a"

List.First(源[数字])=1

List.First(列表[数字])=1

2. 获取列表前N个

List.FirstN(list as list, countOrCoundition as any) as any

获取列表的前N个数据,第2参数可以为数字也可以为条件。如果为指定条件,则提取的数据为直到不满足条件前的数据。

例:

List.FirstN({1..10}, 2)={1,2}

List.FirstN(源[数字], each _<4)={1,2,3}

解释:源[数字]这个是在原查询中引用列表的格式。此外涉及到列表,所以在进行操作比较的时候需要用到each,_代表的是列表中的每一个值,所以用列表中从头开始的每一个值去和<4进行比较,直到不满足并返回匹配条件的几个值。

List.FirstN(列表[数字], each _=2)={}

解释:列表[数字]这个是在其他查询中引用列表的格式。因为数字是从1开始,1<>2,获取的是第一个不满足条件之前的数据,第一个就不满足,所以结果为空列表

(二)从尾开始提取

1. 获取列表最后一个

List.Last(list as list, optionaldefaultValue as any) as any

返回列表的最后1个值,参数2代表如果列表为空,可以指定返回一个值。

List.Last({1..10})=10

List.Last({},"a")="a"

List.Last(源[数字])=10

List.Last(列表[数字])=10

2. 获取列表最后N个

List.LastN(list as list, countOrCoundition as any) as any

获取列表的最后N个数据,第2参数可以为数字也可以为条件。如果为指定条件,则提取的数据为直到不满足条件后的数据。

例:

List.LastN({1..10}, 2)={9,10}

List.LastN(源[数字], each _>7)={8,9,10}

解释:源[数字]这个是在其他查询中引用列表的格式。此外涉及到列表,所以在进行操作比较的时候需要用到each,_代表的是列表中的每一个值,所以用列表中末尾开始的每一个值去和>7进行比较,直到不满足并返回匹配条件的值。

List.LastN(列表[数字], each _=9)={}

解释:列表[数字]这个是在其他查询中引用列表的格式。因为末尾数字是从10开始,不满足条件,获取的是第一个不满足条件之前的数据,第一个就不满足,所以结果为空列表。

(三)根据值提取

1. 获取列表中最大的数据

List.Max(list as list, optionaldefault as any,optional comparisonCriteria as any, optional includeNulls as nullable logical)as any

返回最大的值,这个值时以Unicode来做比较;第2参数代表如果列表为空,可以指定返回一个值;第3参数代表相反性的排序比较,1代表相反,0代表正常,默认正常;第4参数代表代表返回值是否包含空值,是一个逻辑值true or false。

例:

List.Max({1..10})=10

List.Max({},"空值")="空值"

解释:第2参数是在第1参数为空的时候的返回值,因为第1参数是空值,所以返回第2参数的值。

List.Max({1,"a",2,"z","一"})="一"

解释:根据Unicode值,1<2<"a"<"z"<"一",所以最大值返回中文的"一"。

List.Max({1..10},null,1)=1

解释:有第3参数,第3参数代表的是排序。0代表正常,1代表相反,所以返回相反的取值,正常最大值是10,相反则是1,因为第3参数是1代表相反,所以返回的结果是1。

List.Max({null},"空值",null,true)=null

解释:有第4参数,第4参数代表空值的处理,true返回null,false返回第2参数值。这里第4参数是true,所以返回的结果是null。

List.Max({null},"空值",null,false)="空值"

解释:有第4参数,第4参数是false,所以返回第2参数的值。

2. 返回列表中最小的数据

List.Min(list as list, optionaldefault as any,optional comparisonCriteria as any, optional includeNulls as nullable logical)as any

返回最小的值,这个值时以Unicode来做比较;第2参数代表如果列表为空,可以指定返回一个值;第3参数代表相反性的排序比较,1代表相反,0代表正常。默认正常;第4参数代表代表返回值是否包含空值计算,是一个逻辑值true or false。

例:

List.Min({1..10})=1

List.Min({},"空值")="空值"

List.Min({1,"a",2,"z","一"})=1

解释:因为根据Unicode排序1<2<"a"<"z"<"一",所以最小值为1。

List.Min({1..10},null,1)=10

解释:因为第3参数为1代表相反,最小的值相反计算就是最大的值,所以结果是10。

List.Min({null},"空值",null,true)=null

解释:第1参数是空值,第2参数是空值返回的值,第3参数是默认值,第4参数是true,代表null作为计算并返回。

List.Min({null},"空值",null,false)="空值"

解释:第1参数是空值,第2参数是空值返回的值,第3参数是默认值,第4参数是false,代表null不作为计算返回,所以返回值为第2参数的"空值"。

3. 返回列表中最大的前几项数据

List.MaxN(list as list, countOrCondition as any,optional comparisonCriteria as any, optional includeNulls as nullable logical)as any

返回Unicode值最大的前几项;第2参数可以为数字也可以为条件,如果为指定条件,则提取的数据为直到不满足条件前的数据;第3参数代表排序,1代表从小到大,0代从大到小,默认从大到小;第4参数代表返回值是否包含空值计算,是一个逻辑值true or false。

例:

List.MaxN({1..10},3)={10,9,8}

解释:因为第2参数是数字,所以按第2参数数量提取最大值。

List.MaxN({1..10}, each _>6)={10,9,8,7}

解释:因为第2参数是条件,因为第3参数默认是从大到小排序,也就是把第1参数重新排序后成为{10,9,8,7,6,5,4,3,2,1}。所以排序后的每一个值和第2参数的条件比,直到不满足为止,这样比较的话到第5个数6不满足条件,所以终止后返回的结果就是{10,9,8,7}。

List.MaxN({1..10}, each _>7,1)={}

解释:第2参数是条件,第3参数是1代表从小到大排序,所以在第一个数值1不满足条件的时候就结束,所以结果为空列表。

List.MaxN({1..10},3,1)={1,2,3}

解释:第2参数是数字,第3参数1表示的是从小到大排序的意思,所以提取的是最小的3项数值,也就是{1,2,3}。

List.MaxN({1,null,"a"},3,null,true)={"a",1,null}

解释:第2参数是数字,第3参数默认值是从大到小,第4参数代表null值也做比较返回,Unicode字符排序顺序是英文字符>数字>null,所以排序是按从大到小返回结果也就是{"a",1,null}

List.MaxN({1,null,"a"},3,1,false)={1,"a"}

解释:第2参数是数字,第3参数是1代表从小到大排序,第4参数是false,代表返回值不包含null,Unicode字符排序顺序是英文字符>数字>null,所以除去null返回从小到大的前3位排序{1,"a"}。

List.MaxN({1,3,2,null,5}, each _<2,1,true)=Error

解释:第2参数是条件,第3参数是1代表从小到大排序,第4参数是true代表null值计算并做返回。{null,1,2,3,5}和第3参数条件比,但是null无法进行数字表达式比较,所以返回错误。

List.MaxN({1,3,2,null,5}, each _<3,1,false)={1,2}

解释:第2参数是条件,第3参数是1代表从小到大排序,第4参数是false代表null值不做计算返回。{null,1,2,3,5}和第3参数条件比,因为null不做比较,所以实际比较的值时{1,2,3,5}和第2参数比较,直到数字3不满足条件返回,结果就是{1,2}。

4. 返回列表中最小的前几项数据

List.MinN(list as list, countOrCondition as any,optional comparisonCriteria as any, optional includeNulls as nullable logical)as any

返回Unicode值最小的前几项;第2参数可以为数字也可以为条件,如果为指定条件,则提取的数据为直到不满足条件前的数据;第3参数代表排序后的比较,1代表从大到小排序,0代表从小到大排序,默认从小到大排序;第4参数代表代表返回值是否包含空值计算,是一个逻辑值true or false。

例:

List.MinN({1..10},3)={1,2,3}

解释:因为第2参数是数字,所以返回的是最小的3个值,第3参数默认值是从小到大排序,所以返回{1,2,3}。

List.MinN({1..10}, each _ <4)={1,2,3}

解释:因为第2参数是条件,所以比较直到不满足为止返回,第3参数默认值是从小到大排序,所以在第4个数字4的时候不满住,所以返回{1,2,3}。

List.MinN({1..10}, each _>7,1)={10,9,8}

解释:因为第2参数是条件,第3参数是1代表从大到小排序,排序后的列表是{10,9,8,7,6,5,4,3,2,1},所以在7不满足条件的时候就结束,所以结果为7之前的数据{10,9,8}。

List.MinN({1..10},3,1)={10,9,8}

解释:第2参数是数字,所以直接返回最小的3个值。第3参数是1代表从大到小排序,所以结果是{10,9,8}。

List.MinN({1,null,"a"},3,null,true)={null,1,"a"}

解释:第2参数是数字,代表返回最小的3个值。第3参数是默认值代表从小到大排序,第4参数是true代表null计算并返回。因为Unicode值排序大小是null<1<"a",所以返回的值时{null,1,"a"}。

List.MinN({1,null,"a"},3,1,false)={"a",1}

解释:第2参数是数字,则返回最小的3项值,第3参数是1代表从大到小排序,第4参数是false,所以null不做比较返回。因为Unicode值排序大小是null<1<"a",所以从大到小排序的结果是{"a",1,null},因为null不做比较返回,所以返回结果是{"a",1}。

List.MinN({1,null,"a"}, each_>0, 0,false)=Error

解释:第2参数是条件,第3参数是0代表从小到大排序,第4参数是false,所以null不做比较返回。Unicode大小为 null<1<"a",实际上需要和第2参数比较的值为{1,"a"},因为里面有"a",所以不能用于数字表达式计算,所以返回错误。

List.MinN({1,null,"a"}, each _=1,1,false)={}

解释:第2参数是条件,第3参数是1代表从大到小排序,第4参数是false,所以null不进行计算返回。Unicode大小为 null<1<"a",实际需要比较的值为{"a",1},因为第一个值"a"不符合第2参数的条件,所以结束匹配,返回的是空值列表{}。

5. 返回列表中的中位数

List.Median(list as list, optionalcomparisonCriteria as any) as any

是对Unicode进行大小比较,返回list的中位数,如果列表包含null值,则在计算时忽略;如果null是唯一值,则返回null;如果列表数据为偶数,则返回较小值;如果列表为偶数,而且都是数值(包括时间日期等可转换数值),则返回2个的平均值。

例:

List.Median({1,2,3})=2

List.Median({})=null

List.Median({1,"a","一"})="a"

解释:根据Unicode值大小1<"a"<"一",中值为"a"。

List.Median({1,"a",null,2,"b"})=2

解释:因为null不是唯一值,所以计算是忽略,此时中位数有2位,分别是2和"a",返回较小值,所以是2。

List.Median({1,2,3,4})=2.5

解释:因为列表中都是数值,此时中位数有2位,分别是2和3,所以去平均值为2.5

List.Median({#datetime(2018,11,11,12,0,0),#datetime(2018,11,11,13,0,0)})=2018/11/11 星期日 下午 12:30:00

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据技巧 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一)从头开始提取
    • 1. 获取列表第一个
      • 2. 获取列表前N个
      • (二)从尾开始提取
        • 1. 获取列表最后一个
          • 2. 获取列表最后N个
          • (三)根据值提取
            • 1. 获取列表中最大的数据
              • 2. 返回列表中最小的数据
                • 3. 返回列表中最大的前几项数据
                  • 4. 返回列表中最小的前几项数据
                    • 5. 返回列表中的中位数
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档