首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Power Query中数据的定位

Power Query中数据的定位

作者头像
逍遥之
发布于 2020-03-23 09:48:39
发布于 2020-03-23 09:48:39
2.3K0
举报
文章被收录于专栏:数据技巧数据技巧

数据定位

(一) 列(字段)定位

1. 定位本查询:

步骤名[字段名]=源[成绩]

2. 定位其他查询:

查询名[字段名]=成绩表[成绩]

(二) 行(记录)定位

1. 定位本查询:

步骤名{行号}——0代表第一行

=源{0}

=源{[姓名="张三"]}

解释:定位时可以使用字段条件来进行。

2. 定位其他查询:

查询名{行号}——0代表第一行

=成绩表{0}

=成绩表{[姓名="张三"]}

(三) 值定位

1. 定位本查询:

步骤名[字段名]{行号}

如果行号为数字,[字段名]和{行号}位置可以互换

=源[姓名]{0}

=源{[姓名="张三"]}[姓名]

请注意这里的前后顺序,必须条件行号在前,[字段名]在后。

指定字段当前行直接使用[字段名],例如在添加列里面直接使用[字段名]代表的就是当前指定的字段名的当前行的值。

2. 定位其他查询:

查询名[字段名]{行号}

如果行号为数字,[字段名]和{行号}位置可以互换

=成绩表[姓名]{0}

=成绩表{[姓名="张三"]}[姓名]

请注意这里的前后顺序,必须条件行号在前,[字段名]在后。

3. 列表值定位

{列表}{项目号}=

{1..10}{2}=3

{{1,2},{2,3}}{1}={2,3}

(四) 文本内定位

Text.PositionOf

返回字符所处文本位置

Text.PositionOfAny

返回批量任意中任意字符所处文本位置

例:

Text.PositionOf(text as text, substring as text, optional occurrence as nullable Occurrence.Type, optional occurrence as nullable function)as any

第1个参数是需要操作的文本;第2个参数是需要查找的文本值;第3个参数是出现的次数的位置(0代表第一次出现的位置,1代表最后一次出现的文职,2代表所有出现的位置)默认第一次出现的位置;第4参数是大小写比较(Comparer.Ordinal代表完全一致,Comparer.OrdinalIgnoreCase代表不区分大小写,Comparer.FromCulture根据地区设置来识别);返回的如果是第一或者最后一次的位置则是数值格式,如果是所有的次数则是列表格式。注意第一位是0,未找到的话返回-1

例:

Text.PositionOf("abcAbcabcABC","a")=0

解释:找到第1个a出现的位置。

Text.PositionOf("abcAbcabcABC","a",1,Comparer.OrdinalIgnoreCase)

=9

解释:找到最后一个"a"出现的位置,不区分大小写。

Text.PositionOf("abcABCabcABC", "a",2, Comparer.OrdinalIgnoreCase)

={0,3,6,9}

解释:寻找所有"a"的位置,不区分大小写。返回的是一个列表,如果只找到1个,返回的也是单个项目的列表格式

我们已经知道返回第一次,最后一次以及所有的,那如果是返回第2次出现的需要如何操作呢?原理是一样的,我们首先通过查找所有的,然后再找第2个项即可。

Text.PositionOf("abcAaABCaA","a",2){1}=4

解释:正常返回全部"a"所在的位置,是一个列表{0,4,8},我们需要第2次则直接定位列表中的第2项,也就是{1}。

返回倒数第3次出现的位置。

Text.PositionOf("abcaaaBCaa","a",2){List.Count(Text.PositionOf("abcaaaBCaa","a",2))-3}

=5

解释:先求出出现"a"的所有位置,返回{0,3,4,5,8,9}。如果我们知道要显示的位置则直接可以定位第几项,但是如果我们不知道,则可以使用List.Count函数先计算出总的列表里面的项目数,然后再计算位置并指定。

Text.PositionOfAny(text as text, characters as list, optional occurrence as nullable Occurrence.Type) as any

第1参数是需要操作的文本;第2参数是一个查找的列表;第3参数是出现的位置;返回的是any。这里需要注意的是,字符只做完全匹配,未找到返回的是-1

例:

Text.PositionOfAny("abcABCabcABC",{"A","b"})=1

解释:返回列表中任意字符第一次出现的位置,"b"先出现,位置在1,所以返回1。

Text.PositionOfAny("abcABCabcABC",{"A","b"},2)={1,3,7,9}

解释:返回列表中所有字符出现的位置。

(五) 列表内定位

List.PositionOf

返回字符所处的列表中项的位置

List.PositionOfAny

返回任意批量字符所处列表项的位置

List.PositionOf(list as list, value as any, optional occurrence as nullable Occurrence.Type, optional equationCriteria as any) as any

第1参数是需要操作的列表;第2参数是需要查找的值;第3参数是查找出现的位置(0代表第一次,1代表最后一次,2代表全部)默认第一次;第4参数是比较器;返回的是any,如果返回的是全部次数则是list格式。

例:

List.PositionOf({1,2,1,4,1},1,2)={0,2,4}

解释:找到所有1出现的位置。

List.PositionOf({1,2,1,4,1},{1,2},1)=-1

解释:因为是完全匹配,也就是要查找列表{1,2},但是查找的列表中没有这个列表值,所以返回-1。

List.PositionOf({{1,2,1,4,1},{1,2},{1,2}},{1,2},1)=2

解释:查找列表{1,2}所在的最后显示的列表位置,因为{1,2}出现过2次,所以返回最后一次所在的位置。

List.PositionOfAny(list as list, value as list, optional occurrence as nullable Occurrence.Type, optional equationCriteria as any) as any

第1参数是需要操作的列表;第2参数是需要查找值的列表;第3参数是查找出现的位置(0代表第一次,1代表最后一次,2代表全部)默认第一次);第4参数是比较器;返回的是any,如果返回的是全部次数则是list格式,未找到的话返回-1。

例:

List.PositionOfAny({1,2,1,4,1},{1,2})=0

解释:查找1或者2任意出现第一次的位置。也就是第一项,返回的是列表项位置是0。请注意这个和上面个List.PositionOf的差异,一个是绝对格式匹配,一个是任意字符匹配。

(六) 表格内定位

Table.PositionOf

返回row在指定表格中出现的位置

Table.PositionOfAny

返回rows的列表在表格中出现的位置

Table.PositionOf(table as table, row as record, optional occurrence as any,optional equationCriteria as any) as any

第1参数是需要操作的表;第2参数是需要查找的记录;第3参数是出现的位置;第4参数是相等值比较;返回的是any格式,未找到返回-1。

例:

Table.PositionOf(源,[姓名="张三",成绩=100,学科="数学"])=0

解释:返回第一条记录值所在的表格位置,需要查找一个完全匹配的记录。

Table.PositionOfAny用法和之前的雷同。

(七) 错行定位

1. 列表错行定位

根据列表的偏移位置加减计算来定位。

例:

在列表{1,2,3,4}中找到3之前的数字。

{1,2,3,4}{List.PositionOf({1,2,3,4},3)-1}=2

解释:通过List.PositionOf先找到3的位置,然后往前推1位并返回结果。

在列表{1,2,3,1,2,1,2}中找到第2次出现1之前1位的数字。

{1,2,3,1,2}{List.PositionOf({1,2,3,1,2},1,2){1}-1}=3

解释:我们来分解下。

  1. 先找到第2个1出现的位置。使用List.PositionOf({1,2,3,1,2},1,2){1},返回3,也就是列表的第4项。
  2. 之前的1位则在找到的基础上-1。
  3. 因为我们要从列表中挑选数据,格式是{列表}{项目的位置},所以2个都是列表格式,我们在之前计算出结果的基础上套上一层{}代表列表。{3-1}这个就是我们要找的项目的位置。
  4. 最后通过{列表}{3-1}也就是{1,2,3,1,2,1,2}{2}找到我们需要的值。
2. 表格错行定位

a. 通过指定记录位置偏移

例:

源{Table.PositionOf(源,[姓名="张三",成绩=100,学科="数学"])+1}

=[姓名="李四",成绩=90,学科="语文"]

解释:表格的错行定位也就是记录的偏移定位。

先找到目标位置

加减偏移位置

最终返回的位置

b. 通过指定列表位置偏移

源{List.PositionOf(源[姓名],"张三")+1}

=[姓名="李四",成绩=90,学科="语文"]

c. 通过索引来辅助偏移

源{List.PositionOf(已添加索引[索引],0)+1}

性质实际上和列表定位一样,只不过通过索引进行辅助而已。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何在Power Query中获取数据——表格篇(6)
Table.Skip(table as table, countOrCondition as any) as table
逍遥之
2020/03/23
3.8K0
如何在Power Query中获取数据——表格篇(5)
Table.RemoveRowsWithErrors(table as table, optionalcolumns as nullablelist) as table
逍遥之
2020/03/23
3K0
如何在Power Query中获取数据——表格篇(4)
Table.Min(table as table, comparisonCriteria as any, optional default as any) as any
逍遥之
2020/03/23
2.8K0
Power Query中数据分割函数详解(1)
Table.SplitColumn(table as table, sourceColumn as text,splitter as function,optional columnNamesOrNumber as any, optional default as any, optional extraColumns as any) as table
逍遥之
2020/03/23
1.4K0
Power Query中数据分割函数详解(3)
Table.SplitColumn(table as table, sourceColumn as text,splitter as function,optional columnNamesOrNumber as any, optional default as any, optional extraColumns as any) as table
逍遥之
2020/03/23
1.1K0
Power Query中数据分割函数详解(2)
Table.SplitColumn(table as table, sourceColumn as text,splitter as function,optional columnNamesOrNumber as any, optional default as any, optional extraColumns as any) as table
逍遥之
2020/03/23
1.2K0
如何在Power Query中获取数据——表格篇(2)
Table.First(table as table, optionaldefault as any)as any
逍遥之
2020/03/23
3K0
如何在Power Query中提取数据?——文本篇
平时我们经常用到需要根据一定的需求在数据中把符合需求的数据提取出来,那我们看下在Power Query中是如何进行操作的。
逍遥之
2020/03/23
5.7K0
Power Query中数据分割函数详解(4)
Table.SplitColumn(table as table, sourceColumn as text,splitter as function,optional columnNamesOrNumber as any, optional default as any, optional extraColumns as any) as table
逍遥之
2020/03/23
1.3K0
如何在Power Query中获取数据——表格篇(3)
Table.Last(table as table, optionaldefault as any)as any
逍遥之
2020/03/23
3K0
如何在Power Query中获取数据——表格篇(7)
Table.SelectRowsWithErrors(tableas table,optional columns as nullable list)as table
逍遥之
2020/03/23
3.2K0
如何在Power Query中获取数据——表格篇(1)
Table.ColumnNames(table as table) as list
逍遥之
2020/03/23
3.9K0
PQ-M及函数:为什么加了新的内容,拆分列不对了?
大海:嗯。这个直接操作的方法是有点儿问题,主要是因为,操作分列的时候,PQ会直接生成固定的列名,原来最多只要3个内容,就只生成了3列,所以以后有更多的数据时,就没有地方放了。你看原来生成的代码:
大海Power
2021/08/30
5890
Power Query中如何插入指定行数据?
在Power Query中如果想要插入自定义的一行,有一个专门的函数Table.InsertRows,这个函数可以帮助我们在指定行的位置插入我们所需要的数据,但是这个函数需要我们把每一列的数据都要补上,但是大部分情况我们可能只需要在某一列中插入一个指定数据即可,这种该如何操作呢?
逍遥之
2020/03/24
6.3K0
Power Query中如何把多列数据合并?升级篇
之前我们了解到了如何把2列数据进行合并的基本操作,Power Query中如何把多列数据合并?也就是把多个字段进行组合并转成表。那如果这类的数据很多,如何批量转换呢?我们需要把转换的这一部分做成循环的函数即可。
逍遥之
2020/03/23
7.8K0
Power Pivot中表格的基础构造
参数Name代表列名,Expression代表数据,但是只能生成1行数据,如果需要生成3行数据,则还需要通过union函数进行合并。
逍遥之
2020/03/24
6770
Power Pivot中表格的基础构造
如何在Power Query中提取数据——列表篇(4)
List.RemoveRange(list as list, index as number, optional count as number) as list
逍遥之
2020/03/23
1.6K1
Power Pivot中表格的基础构造DataTable
之前Power Pivot里提到的构造表,听畅心提到,实际上在Power Pivot有一个针对性的函数DataTable,更能直观的表达表的构建。
逍遥之
2020/03/24
5980
Power Pivot中表格的基础构造DataTable
PQ-批量汇总多Excel表格之特殊处理:标题行前行数不确定的处理
标准Excel表格批量汇总过程及基础方法请参考文章:《PQ批量汇总Excel文件就是这么简单》,所有特殊情况处理都是在该基础方法之上加以适当的处理而已。
大海Power
2021/08/30
1.1K0
Power Query中避免出错的几种情况
不同的公式可以达到同样的效果,所以观察产生结果的公式就很重要,别把公式栏给隐藏了,需要打开它,如图1所示。例如:删除列和删除其他列可能得到的效果是一样的,但是如果数据有变动刷新后得到的结果却有可能不同。
逍遥之
2020/07/28
5.8K0
Power Query中避免出错的几种情况
推荐阅读
相关推荐
如何在Power Query中获取数据——表格篇(6)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档