PowerQuery技巧之按条件筛选行后提取 Table.SelectRows 函数详解
PowerQuery技巧之筛选异常值
这是筛选出异常值,如要剔除异常值将筛选条件中的>修改为<=即可,将系数2修改为3筛选出的就是高度异常的异常值。
附件
筛选异常值 (135 kB)
的异常值。
所以要找出异常值,逻辑很简单,首先要求出所有零件尺寸的平均值以及标准差,然后筛选出表中尺寸与平均值相减的绝对值大
于2*标准差的所有行。
代码为: let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 标准差 = List.StandardDeviation(源[尺寸]), 平均值 = List.Average(源[尺寸]), 异常值 = Table.SelectRows(源,each Number.Abs([尺寸]-平均值)>(2*标准差)) in
ቤተ መጻሕፍቲ ባይዱ筛选异常值
题目:
要求从一堆零件中找出存在异常的零件。
比如第7行的27明显比其他值小很多,而第10行的3792明显比其他值大很多,都属于异常值。
解法:
要找出异常值,首先得定义异常的条件,异常到什么程度差2个标准差以上的值称为异常值,而高于3个标准差的值则为高度异常
PowerQuery技巧之如何实现类似 Excel 中的 CountIf 按条件计数?
Power Query 里如何实现类似 Excel 中的 CountIf 按条件
计数?
昨天的文章《PQ-M及函数:如何按某列数据筛选出一个表里最大的行?》发表后,有朋友留言,问在PQ里怎么实现Excel中的Countif效果:
实际上,也许这位朋友已经隐约感觉到,用文中提到的Table.SelectRows这个函数就能解决问题。
原理很简单,其实就是用Table.SelectRows对“源”表按条件(源表中“编号”列等于当前行“编号”)进行筛选,然后对筛选出来的结果用Table.RowCount函数进行计数即可。
同样的函数组合,通过增加函数的判断条件,可以实现多条件下的计数,比如,不光要求编号相同,还要求地区也是相同的,如
下:
总之,通过Table.SelectRows可以实现各种复杂条件下的表格筛选功能,然后,针对筛选的结果,即可再进一步按需要进行各种计算、转换等处理。
power query条件筛选函数
Power Query(查询编辑器)是Microsoft Excel和Power BI中的一个强大工具,它允许用户通过一系列的步骤来清理、转换和整理数据。
Power Query提供了许多功能和函数,其中包括条件筛选函数,这些函数能够帮助用户根据特定的条件来筛选数据。
本文将深入探讨Power Query条件筛选函数的使用方式和示例。
一、什么是Power Query条件筛选函数?在Power Query中,条件筛选函数主要用于从数据集中筛选出满足特定条件的行或列。
通过使用条件筛选函数,用户可以灵活地操作数据,提取出需要的信息,并将其应用于后续的数据处理和分析工作中。
二、Power Query条件筛选函数的常用函数在Power Query中,有许多条件筛选函数可供用户使用。
下面是一些常见的条件筛选函数的介绍及示例。
1. Filter函数Filter函数用于根据用户指定的条件筛选出符合条件的行。
语法:= Table.SelectRows(table as table, condition as any) as table示例:假设我们有一个包含客户订单信息的表,我们想要筛选出订单金额大于100的订单。
letSource = Excel.CurrentWorkbook(){[Name="OrderTable"]}[Content],FilteredRows = Table.SelectRows(Source, each [OrderAmount] > 100)inFilteredRows这个示例中,Table.SelectRows函数将筛选出订单金额大于100的订单。
2. RemoveRows函数RemoveRows函数用于根据用户指定的条件删除不符合条件的行。
语法:= Table.SelectRows(table as table, condition as any, optional missingField as any) as table示例:假设我们有一个包含员工信息的表,我们想要删除没有填写姓名的员工信息。
PowerQuery技巧之Table.SelectColumns()
let Profiling = Table.Profile( Score ),
Top3 = Table.MaxN( Profiling, "Average", 3 ),
Outcome = Table.SelectColumns( Score, { "科目" } ﹠ Top3[Column] ) in
Table.SelectColumns()
Table.SelelctColumns()可以抽象地概括为function(table as table, columns as any, optional missingField as nullable MissingField.Type) as table,大概的意思为:该函数的第一个参数为需要筛选列的表格。第二个参数对数据的类型没有限制,可 以选择"筛选的唯一列"或者{"选择的列之一".."选择的列之一"}等形式填写第二个参数。第三个参数为可选参数,当这个参数没有 填写时系统默认该值为MissingField.Error(当第二个参数填写的列名称并不是第一个参数的列之一时报错),如果填写的值为 MissingField.Ignore,则会忽略第二参数填写的所有不存在于第一个参数的列,如果填写的为eNull,则会使用 Null填充第二个参数填写的所有不存在于第一个参数的列。Table.SelectColumns()结果中的列在表格中的相对位置是由这个函数
ToTable= Table.FromColumns( bine( { List.FirstN( ToCols, 1 ), Top3 } ) ),
PHeaders = Table.PromoteHeaders( ToTable ),
table.selectrows函数使用方法 -回复
table.selectrows函数使用方法-回复Table.SelectRows函数是Power Query(或Power BI)中一种非常强大的函数,可以根据指定的条件从表格中选择行。
该函数的使用方法非常灵活,可以根据各种不同的条件对表格进行筛选,并返回满足条件的行。
本文将一步一步介绍Table.SelectRows函数的使用方法,并通过具体的示例来说明其实际应用。
在开始之前,我们需要先了解Table.SelectRows函数的基本语法。
该函数的语法如下:Table.SelectRows(table as table, condition as function) as table其中,table表示要进行筛选的表格,condition则是要应用的筛选条件。
该函数会返回一个新的表格,其中包含满足筛选条件的行。
接下来,让我们通过一个示例来说明Table.SelectRows函数的具体用法。
假设我们有一个销售订单表格,其中包含了订单号、客户姓名、产品名称和销售金额等信息。
现在,我们希望从该表格中筛选出销售金额大于1000的所有订单。
首先,我们需要在Power Query Editor中打开该表格。
在“开始”选项卡的“编辑查询”组中,点击“编辑”按钮即可打开Power Query Editor。
接下来,我们需要使用Table.SelectRows函数来进行筛选。
在“添加列”选项卡的“添加自定义列”组下,点击“自定义列”按钮。
在“自定义列”对话框中,我们需要输入函数的参数。
首先,我们在“自定义列名”文本框中输入一个名称,比如“筛选结果”。
然后,在“自定义列公式”文本框中,我们输入以下公式:= Table.SelectRows(#"更改类型", each [销售金额] > 1000)这里,#“更改类型”表示之前对表格进行的一些其他操作(如更改数据类型等),即我们需要将该操作后得到的表格作为Table.SelectRows函数的第一个参数。
PowerQuery技巧之动态多条件筛选前10名
筛选出[语文]前10名的人,那么可以先按照[语文]降序排列,然后 Table.FirstN 取出前10个。 那么现在双条件,相当于把原表复制成两份,一张取[语文]的前10名,另一张取[数学]的前10名,然后取两张表的交集即可。 但是PQ中并没有取表交集的函数,所以需要先将表转为list,然后使用 List.Intersect 取list的交集,最后再还原成表。
let top = (x)=>Table.ToRecords(Table.FirstN(Table.Buffer(Table.Sort(源,{x, 1})),10)), 源 = Excel.CurrentWorkbook(){[Name="成绩"]}[Content], 前10 = Table.FromRecords(List.Intersect({top("语文"),top("数学")}))
动态多条件筛选前10名
题目:
现有一个班级共50人,成绩明细数据如上图,需要筛选出[语文]和[数学]同时前10名的人。
解法:
多条件筛选问题,如果是要筛选出固定值,比如语文和数学都>90,那么直接一步
= Table.SelectRows(源,each [语文]>90 and [数学]>90) 筛选即可。
in 前10
附件
动态多条件筛选前10名 (20 kB)
power query条件筛选函数
power query条件筛选函数Power Query是一种用于数据处理和转换的功能强大的工具。
它可以帮助用户从各种数据源中提取、转换和加载数据,以便进行分析和报告。
在Power Query中,条件筛选函数是一种常用的方法,用于根据特定的条件从数据集中选择所需的数据。
本文将介绍Power Query条件筛选函数的使用方法和示例,以帮助读者更好地理解和应用这个功能。
让我们了解一下Power Query条件筛选函数的基本概念。
条件筛选函数是一种用于从数据集中筛选出满足特定条件的行或列的函数。
它可以根据各种条件,如数值比较、文本匹配等,对数据集进行筛选和过滤。
条件筛选函数通常由一系列步骤组成,每个步骤都包含一个条件和一个操作。
通过组合和排列这些步骤,可以实现复杂的数据筛选和转换操作。
在Power Query中,常用的条件筛选函数有以下几种:1. 等于(Equals):用于判断某个列的值是否等于指定的值,如[Column] = "Value"。
2. 大于(Greater than):用于判断某个列的值是否大于指定的值,如[Column] > 10。
3. 小于(Less than):用于判断某个列的值是否小于指定的值,如[Column] < 20。
4. 包含(Contains):用于判断某个列的值是否包含指定的文本,如Text.Contains([Column], "Text")。
5. 开始于(Starts with):用于判断某个列的值是否以指定的文本开头,如Text.StartsWith([Column], "Text")。
6. 结束于(Ends with):用于判断某个列的值是否以指定的文本结尾,如Text.EndsWith([Column], "Text")。
除了上述常用的条件筛选函数外,Power Query还提供了其他更复杂的函数,如逻辑函数、日期函数等,用于处理更加复杂的筛选条件。
power query条件筛选函数
power query条件筛选函数Power Query 是一款强大的数据处理工具,可以在 Excel 中使用。
它提供了许多条件筛选函数,可以帮助用户快速、灵活地过滤和处理数据。
本文将介绍几种常用的Power Query 条件筛选函数,并通过实例演示它们的用法和效果。
我们来介绍一个常用的条件筛选函数——Filter。
Filter 函数可以根据指定的条件筛选出符合条件的行。
例如,我们有一个包含销售数据的表格,其中包括产品名称、销售数量和销售额等信息。
现在我们想筛选出销售数量大于100的产品。
我们可以使用Filter 函数来实现这个目标。
在 Power Query 中,首先选中要进行筛选的列(这里是销售数量列),然后点击“筛选”选项卡中的“筛选行”按钮。
在弹出的对话框中,选择“自定义”选项,并在输入框中输入条件表达式“[销售数量] > 100”。
点击“确定”按钮,即可完成筛选。
接下来,我们介绍另一个常用的条件筛选函数——RemoveRows。
RemoveRows 函数可以根据指定的条件删除符合条件的行。
例如,我们有一个包含员工信息的表格,其中包括员工姓名、性别和年龄等信息。
现在我们想删除年龄小于30岁的员工。
我们可以使用RemoveRows 函数来实现这个目标。
在 Power Query 中,同样选中要进行筛选的列(这里是年龄列),然后点击“筛选”选项卡中的“筛选行”按钮。
在弹出的对话框中,选择“自定义”选项,并在输入框中输入条件表达式“[年龄] < 30”。
点击“确定”按钮,即可完成筛选。
除了Filter 和RemoveRows 函数之外,Power Query 还提供了一些其他的条件筛选函数,如KeepTopN、KeepBottomN、RemoveDuplicates 等。
这些函数可以根据不同的需求进行灵活的筛选和处理。
需要注意的是,在使用条件筛选函数时,我们需要确保所选的列和条件表达式的数据类型匹配。
PowerQuery技巧之Table.SingleRow()
日期的区间匹配还有可能是先构造辅助表,然后再使用内连接进行匹配。如果是通过横向展开日期,辅助表可以这样构造:
let AddCol= Table.AddColumn( ParaTable, "TimeSeries", each List.Dates( [StartDate], Duration.TotalDays( [EndDate] - [StartDate] ) + 1, #duration(1,0,0,0) ), type list ),
AddKey = Table.AddKey( DateList, {"FullDate"}, true ),
LeftJoin= Table.NestedJoin( DateList, "FullDate", ParaTable, "StartDate", "NTable", JoinKind.LeftOuter ),
in Solution1
如果使用的是只匹配下界的思路,因为结果只会匹配到一行,Table.SingleRow()就没有办法发现问题:
let Solution4= Table.AddColumn( Date, "MaturityBand", each Record.Field( Table.SingleRow( stN( Table.RemoveLastN( ParaTable, ( x ) ⇒ x[StartDate] ﹥ [Date] ), 1 ) ), "MaturityBand" ), type text )
附件
Table.SingleRow() (112 kB)
Table.SingleRow()
power query提取table中的一列
power query提取table中的一列如何使用Power Query提取一个表中的一列。
Power Query是一种用于数据处理和转换的强大工具,它可以帮助你在Excel中处理和分析数据。
其中一个最常见的任务是从一个表中提取特定的列。
在本文中,我将向您展示如何使用Power Query逐步提取一个表中的一列。
让我们开始吧!第一步:导入数据首先,打开Excel并进入“数据”选项卡。
然后,选择“从表/范围”选项。
这将打开一个对话框,允许您从一个表或选择的区域中导入数据。
在对话框中选择您想要从中提取列的表。
点击“确定”按钮。
第二步:打开Power Query编辑器在导入数据后,Excel将打开Power Query编辑器。
这是一个功能强大的工具,允许您进行各种数据处理和转换操作。
在Power Query编辑器中,您可以看到导入的表的预览。
在这个例子中,我们的表有多个列。
第三步:选择要提取的列要提取一个表中的一列,首先要选择这个列。
在Power Query编辑器中,单击要提取的列的标题。
此操作将选择整个列。
如果您只想选择其中的部分,您可以拖动鼠标选择所需的行。
第四步:删除其他列一旦您选择了所需的列,您可以删除表中的其他列。
在Power Query编辑器中,单击“删除列”按钮(它在“开始”选项卡上)。
这会删除除所选列之外的所有其他列。
您可以选择保留一些其他列,方法是选中这些列并单击“保持列”。
第五步:关闭Power Query编辑器在提取所需的列并删除其他列后,您可以关闭Power Query编辑器。
在“主页”选项卡上,单击“关闭和加载”按钮。
此操作将保存您的更改并将数据加载回Excel中。
现在,您已经成功地使用Power Query提取了一个表中的一列!您可以在Excel中看到已提取的列,而其他列已被删除。
总结在本文中,我们逐步介绍了如何使用Power Query提取一个表中的一列。
通过导入数据,打开Power Query编辑器,选择所需的列,删除其他列,并关闭编辑器,您可以轻松地从一个表中提取特定的列。
powerquery if公式
powerquery if公式PowerQuery是微软公司针对Excel推出的一款强大的数据处理工具,可快速提取、转换、整理和清洗数据,提高工作效率和准确性。
在数据清洗操作中,if公式被广泛应用,本文将对PowerQuery中的if公式进行详细介绍。
if公式的基础语法是:=if(条件,结果1,结果2)。
如果条件成立,则返回结果1,否则返回结果2。
在PowerQuery中,if公式的使用方法与Excel中的if公式基本相同。
PowerQuery中if公式的主要应用场景分为以下两类。
一、条件筛选在数据清洗过程中,经常需要根据条件筛选出符合特定要求的数据行或列。
例如,从一个包含所有学生的成绩单中,筛选出数学成绩大于90的学生信息。
此时,可以使用if公式的条件判断功能,将符合条件的数据保留,不符合条件的数据删除。
示例代码如下:let Source =Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Filtered Rows" = Table.SelectRows(Source, each ([MathGrade] > 90)) in #"Filtered Rows"上述代码首先指定数据源对象为Excel中名为Table1的数据表,然后使用Table.SelectRows方法对数据进行筛选操作。
该方法接受一个函数作为参数,该函数中使用if公式判断MathGrade列的值是否大于90,如果成立则保留该行数据,否则删除。
筛选结果将返回一个新的数据对象。
二、条件衍生在数据清洗过程中,还经常需要使用if公式对数据进行衍生操作。
例如,根据学生的数学成绩和语文成绩,衍生出一个新的列“综合成绩”,公式如下:=if([MathGrade]>90 and[ChineseGrade]>80,[MathGrade]*0.6+[ChineseGrade]*0.4,[MathGrade]*0.4+[ChineseGrade]*0.6)上述公式表达的意思是,如果数学成绩大于90且语文成绩大于80,则计算综合成绩为数学成绩占60%、语文成绩占40%的加权平均分,否则计算综合成绩为数学成绩占40%、语文成绩占60%的加权平均分。
PowerQuery技巧之筛选有重复数据
筛选有重复数据
题目:
现有一列数据,其中"A"和"F"都不止出现了一次,需要将它们找出来。
解法1:
根据表获取行的另一种方式为 表{[name="A"]} ,但是这种方式仅限于字段下命名唯一,如果[name]下有两个"A"会报错,只有一 个 "C"则不报错。 根据这个特性,再利用try能够测试表达式是否错误,返回record,其中[HasError]为一个布尔值,筛选即可:
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 筛选 = Table.SelectRows(源,(x)=>List.Count(List.Select(源[name],each _=x[name]))>1)
in
筛选
DAX解法:
EVALUATE FILTER('表1',CALCULATE(COUNTROWS('表1')>1))
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 筛选 = Table.SelectRows(源,each (try 源{[name=[name]]})[HasError])
in
筛选
解法2,再筛选出计数>1的行:
power query条件筛选函数
power query条件筛选函数一、什么是Power Query?Power Query是Microsoft Excel中的一款数据获取、转换和加载工具。
它能够将不同数据源的数据整合在一起,并对数据进行分析和处理。
二、Power Query中的条件筛选函数条件筛选函数是Power Query中十分重要的函数之一,它可以让用户根据自定义的条件筛选出数据,以便进行后续的处理。
1、基本条件筛选函数Power Query中最基本的条件筛选函数是筛选行(Filter Rows),它可以让用户根据列中的数值或文本进行筛选。
用户只需指定列名和筛选条件即可,例如筛选出某一列大于10的行。
2、高级条件筛选函数除了基本的筛选行函数外,Power Query还提供了另外两个高级的条件筛选函数:保留顶行(Keep Top Rows)和删除行(Remove Rows)。
保留顶行函数可以保留指定列中数值最大或最小的前n行,而删除行函数则可以根据条件删除行。
三、条件筛选函数的使用使用条件筛选函数需要注意以下几点:1、确定要使用的筛选条件在使用条件筛选函数前,一定要明确自己所需要的筛选条件,例如某一列大于等于某一数值,或某一列包含某一特定的字符串。
2、正确选择筛选函数Power Query中有多个条件筛选函数,根据具体需求选择最合适的函数十分重要。
3、多个筛选条件的组合Power Query中允许用户使用多个条件组合进行筛选,此时需要注意不同条件之间的逻辑关系。
四、总结条件筛选函数是Power Query中极其重要的函数之一,它可以帮助用户快速筛选出所需要的数据,进行后续的处理。
在使用条件筛选函数时,需要确定所需要的筛选条件,正确选择筛选函数,以及注意多个条件之间的逻辑关系。
熟练掌握条件筛选函数,将会大大提高数据处理的效率。
table.selectrows的用法
table.selectrows的用法Table.SelectRows是Power Query中的一个函数,用于在表中根据指定的条件选择行。
它可以帮助我们根据某些条件筛选数据,提取我们所需的行。
本文将详细介绍Table.SelectRows的用法,并结合实例进行演示。
首先,我们需要了解Table.SelectRows函数的基本语法。
该函数的语法如下:Table.SelectRows(table as table, condition as function) as table其中,table是我们要进行筛选的表,condition是一个函数,它接受表中的每一行作为输入,返回一个布尔值来指示是否选择该行。
该函数返回一个新的表,其中包含符合条件的行。
接下来,我们将介绍Table.SelectRows的具体用法以及如何使用condition函数来筛选行。
第一步,准备数据:假设我们有一个包含学生姓名、年龄和成绩的表。
我们希望根据学生的成绩筛选出符合特定条件的学生信息。
以下是一份示例表格:学生姓名年龄成绩- -小明12 80小红13 89小刚11 75小美14 92第二步,筛选行:现在,我们可以使用Table.SelectRows函数来筛选行。
我们可以使用两种方法来定义condition函数:1. 使用逻辑表达式:condition函数可以是一个逻辑表达式,返回True或False。
例如,我们可以通过成绩是否大于等于90来筛选出成绩优秀的学生信息。
首先,我们需要在Power Query编辑器中打开我们的表。
然后,在"添加列"选项卡中,点击"自定义列"按钮。
在弹出的对话框中,我们输入以下表达式:Table.SelectRows(<表名>, each [成绩] >= 90)这个表达式中,我们使用了Table.SelectRows函数,传入的是我们的表名。
powerquery提取单元格中包含的内容
主题:使用Power Query提取单元格中包含的内容在日常的数据处理工作中,我们经常会遇到需要从一堆杂乱的数据中提取出特定内容的情况。
而Power Query作为一款强大的数据处理工具,可以帮助我们轻松地实现这一目标。
本文将以提取单元格中包含的内容为例,介绍如何使用Power Query来完成这一任务。
1. 打开Excel并导航到“数据”选项卡。
在“获取数据”组中选择“从表格/范围”选项。
2. 在弹出的“从表格/范围”对话框中,选择包含要提取内容的数据范围,并点击“确定”。
3. 数据将被加载到Power Query编辑器中。
接下来,我们需要添加一个自定义的列来提取单元格中包含的内容。
4. 在Power Query编辑器中,点击“添加列”选项卡,然后选择“自定义列”。
5. 在弹出的“添加自定义列”对话框中,输入一个名称以标识新列,然后在“自定义列公式”框中编写提取内容的公式。
如果我们想要提取单元格中的数字,可以使用类似于“Text.Select([Column1],{"0".."9"})”这样的表达式。
6. 点击“确定”后,新的自定义列将会被添加到数据表中,并显示提取内容的结果。
7. 我们可以点击“关闭并加载”选项,将编辑后的数据导入到Excel工作表中。
通过以上步骤,我们可以轻松地使用Power Query提取单元格中包含的内容。
这种方法不仅可以帮助我们提高工作效率,还能够避免手动提取数据时可能出现的错误。
希望本文对你在数据处理工作中有所帮助!8. 在实际的工作中,我们可能会遇到更加复杂的情况,需要提取的内容可能不仅仅是数字,还可能包括文字、符号、特殊格式等。
在这种情况下,我们可以结合使用Power Query的各种函数和表达式来获得更精准的提取结果。
9. 举例来说,假设我们需要从包含产品信息的单元格中提取出产品的名称和价格。
我们可以使用Power Query的文本函数来提取名称和数字,然后使用数值函数来处理价格的格式并将其提取出来。
power query 提取指定文本后的数字
power query 提取指定文本后的数字Power Query作为微软Office套件中的一个功能强大的工具,可以帮助用户进行数据分析、处理和清洗,熟练掌握Power Query可以让用户事半功倍。
本文将围绕“Power Query提取指定文本后的数字”这个主题,为大家介绍一下具体操作步骤。
一、打开Power Query编辑器1. 打开Excel文档,点击“数据”选项卡,找到“从表格/范围”选项,点击。
2. 选择需要操作的数据,点击“确定”。
3. 在打开的Power Query编辑器中,选中需要处理的列。
二、提取文本1. 选中需要处理的列,点击“添加列”选项卡中的“从文本”选项,选择“从左侧”。
2. 在弹出的对话框中,输入需要提取数字的文本格式。
3. 选择“小数”类型,确认后可选中多个选项卡,这些选项卡将影响文本中提取到的值。
三、提取数字1. 选中刚刚生成的“从文本生成”列,点击“添加列”选项卡中的“从数字”选项。
2. 在弹出的对话框中,选择“整数”或者“小数”类型。
3. 点击确认之后,会生成一个新的列,其中只包含提取出来的数字。
四、删除不必要的列1. 选中目标列,右键点击“删除”进行删除。
2. 右键点击生成的从文本列,选择“删除列”进行删除。
3. 右键点击原始列,选择“删除列”进行删除。
最后,需要注意的是,Power Query的列名称中不能包含特殊字符,否则会出现错误。
另外,如果需要将数据导入到Excel工作表中,需要点击“主页”选项卡的“关闭和加载”选项,选择合适的选项(在Excel表格中添加导入数据的表格、在Excel表格中新建表、在当前表格中新建表)来完成导入。
总的来说,使用Power Query提取指定文本后的数字非常简单,只需按照上述步骤进行操作即可轻松完成。
在平时的实际应用中,用户可以根据具体需要对操作步骤进行微调,希望本文对大家了解这个工具有所帮助。
PowerQuery技巧之PQ-M及函数:如何按某列数据筛选出一个表里最大的行?
PowerQuery技巧之PQ-M及函数:如何按某列数据筛选出
一个表里最大的行?
PQ-M 及函数:如何按某列数据筛选出一个表里最大的
行?
关于筛选出最大行的问题,通常有两种情况,即:
1、最大行(按年龄)没有重复,比如这样:
2、最大行(按年龄)有重复,比如这样:
对于第1种情况,要筛选出来比较简单,直接用Table.Max函数即可(得到的是一个记录,也体现了其结果的唯一性),如下图所示:
对于第2种情况,可以考虑用Table.SelectRows函数来进行筛选,即筛选出年龄等于源表(数据导入Power Query后做了类型更改,产生了”更改的类型“步骤)中最大值(通过List.Max函数取得,主要其引用的是源表中的年龄列)的内容:
当然,第2种情况其实是适用于第1种情况的。
这也是为什么说——Table.SelectRows这个函数非常常用,其可使用的场景非常的多。
PowerQuery技巧之自定义函数
PowerQuery技巧之⾃定义函数⾃定义函数基础⽤法:在M语⾔中,标准库函数(standard library functions)约有700个。
但是如果你觉得太少了,或者说不好⽤,那么也可以通过⾃定义函数来实现⾃⼰想要的效果。
⾃定义函数的基本语法为:函数名=(参数1,参数2,参数3...)=>表达式先来看个例⼦:letget_list = (start as number,end as number)=>{start..end},result = get_list(1,100)inresult⾸先定义⼀个名为"get_list"的⾃定义函数,需要2个形参:start和end,并且限制类型为number,所以当如果我们传⼊的实参类型为text等时就会报错。
as number可以不写,如果不写默认的类型为any,在M中定义变量类型是⾮必需的。
最右边是函数的表达式,我们构建了⼀个起⽌分别为这两个参数的list。
参数与表达式之间⽤=>隔开,这是固定组合。
然后调⽤⾃定义函数,将实参1和100传⼊函数,表达式变为{1..100},即最后的结果。
如果在变量前加上optional,则声明该参数为可选参数,⽐如optional end as number,那么调⽤该函数的时候这个参数就可省略。
但是在M中并没有默认参数的概念,不能对可选参数指定⼀个默认值。
如果要实现默认参数的效果,可以在=>后⾯⽤if start is null then...else...的⽅式判断是否传⼊了实参,稍微⿇烦了⼀点。
匿名函数:先看案例:letselect = (x)=>Table.SelectRows(source, each [index] <= x),source = Excel.CurrentWorkbook(){[Name="table"]}[Content],result = Table.AddColumn(source, "acc", each List.Sum(select([index])[index]))inresult定义⼀个名为"select"的⾃定义函数,筛选index<=变量的⾏,然后深化出筛选表的index列,再进⾏求和,实现根据index累计求和的效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
按条件筛选行后提取 Table.SelectRows 函数详解Table.SelectRows(table as table, condition as function) as table
参数1位需要操作的表;参数2是筛选的条件,为一个函数;返回的结果也是表。
例:
Table.SelectRows(源,each [学科]="语文") =
Table.SelectRows(源, each [成绩]>=List.Average(源[成绩])) =
解释:通过先计算成绩的平均值,然后再用成绩大于平均成绩作为条件进行筛选。
Table.SelectRows(源, each Text.Contains([姓名], "张") or Text.Contains([姓名],"李")) =
解释:筛选姓名包含"张"或者姓名包含"李"的结果。
Table.SelectRows(源, each List.ContainsAny(Text.ToList([姓名]),{"张","李"})) =
解释:和上面的结果是同样的,但是思路不一样。
先通过Text.ToList函数把姓名拆分成单个字的列表,例如张三拆分成{"张","三"},李四拆分成{"李","四"}。
随后用拆分后的这个列表去和另外一个含有关键词的列表去比较,List.ContainsAny代表的是任何匹配,也就是姓名拆分后的列表1和关键词的列表2只要有同一个关键词则作为成立的条件进行提取。
如果这样写得话有优点是,可以指定一个列表的关键词去匹配,如果关键词很多那就不需要一个一个or去连接,而直接用列表去匹配。
Table.SelectRows(源, each List.Contains({"张三","张四","李四"},[姓名])) =
解释:这次把条件倒过来了,通过一个姓名列表去筛选源表中符合条件的数据。
把姓名中含有{"张三","张四","李四"}这个列表的数据筛选出来。
版权声明: 自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)。