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

2020-03-23 16:35:51 浏览数 (1)

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

(一)从头开始提取

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

0 人点赞