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

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

(一)从头开始提取

1.    获取列表第一个

List.First(list as listoptionaldefaultValue 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 listoptionaldefaultValue 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 listoptionaldefault as any,optional comparisonCriteria as anyoptional 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 listoptionaldefault as any,optional comparisonCriteria as anyoptional 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 anyoptional 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 anyoptional 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 listoptionalcomparisonCriteria 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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容