经常看我推文的读者应该会有体会,同样的案例,在有不同解决方案的情况下,Power Query 往往是方法最简单的,而且设置完后就不用再管了,以后只要刷新就能同步数据源。

Power Query 的功能非常强大,如果要完全释放其能力,光会使用图形界面是不够的,高级的需求还要学习 M 语言。

有的同学一听说要写代码就放弃了,其实没有想象的那么可怕,最近我开始陆续用最简单的方法教大家学习一些简单的 M 语言。在结合图形界面操作的基础上稍微修改部分语句,就能简单地实现目标效果。

很多同学都反馈这个教学方式非常适合小白学习。以下是部分案例:

  • Excel – 如何批量修改列标题,且固定不再变?
  • Excel 中最常用的 if 函数在 Power Query 中怎么用?

今天教大家如何在 Power Query 中查找最大值。

案例:

下图 1 为各班级考试成绩,请用 Power Query 分别按以下条件查找:

  1. 查找出全年级数学分数最高的同学
  2. 查找出一班数学成绩最高的同学

上述第 2 个案例效果如下图 2 所示。




QSqlquery查询sqlite_QSqlquery查询sqlite


QSqlquery查询sqlite_list 查找_02


解决方案 1:查找全年级数学最高分

1. 选中数据表的任意区域 --> 选择菜单栏的“数据”-->“从表格”


QSqlquery查询sqlite_QSqlquery查询sqlite_03


2. 在弹出的对话框中点击“确定”


QSqlquery查询sqlite_QSqlquery查询sqlite_04


表格已上传至 Power Query。


QSqlquery查询sqlite_list 查找_05


点击“数学”旁边的箭头,在“数字筛选器”下面有多种查找条件,然而并没有最大值这个条件,所以得自己写函数。


QSqlquery查询sqlite_Power_06


3. 在“数学”的筛选区域任意勾选一个分数 --> 点击“确定”


QSqlquery查询sqlite_list 查找_07


此时,公示栏中将刚才的操作记录成了以下的对应公式:

= Table.SelectRows(更改的类型, each ([数学] = 43))


QSqlquery查询sqlite_QSqlquery查询sqlite_08


4. 在上述公式的基础上,将“43”替换为“List.Max(更改的类型[数学])”,完整公式如下:

= Table.SelectRows(更改的类型, each ([数学] = List.Max(更改的类型[数学])))

公式释义:

  • List.Max:相当于 Excel 中的 max 函数
  • 更改的类型[数学]:“更改的类型”是上一个步骤的名称,可以在“应用的步骤”区域看到,“[数学]”是列名


QSqlquery查询sqlite_QSqlquery查询sqlite_09


5. 回车以后,就查找出了全年级数学最高分的对应行数据。


QSqlquery查询sqlite_QSqlquery查询sqlite_10


解决方案 2:查找一班数学最高分

开始设置之前,先将刚才的查找记录清除:在右侧的“查询设置”区域,将最后一个步骤删除。


QSqlquery查询sqlite_Power_11


1. 点击“班级”旁边的箭头 --> 勾选“一班”--> 点击“确定”


QSqlquery查询sqlite_QSqlquery查询sqlite_12


QSqlquery查询sqlite_QSqlquery查询sqlite_13


此时如果我们仿照上一个案例中的做法,在“数学”列中随便选一个值,公式如下:

= Table.SelectRows(更改的类型, each ([班级] = "一班") and ([数学] = 54))

如果要在此基础上替换成 List.Max 函数,结果是查找不到的。为什么呢?因为上述 M 语句中用了 and,即表示:既是“一班”,又要数学分数最高。这个结果不存在,因为最高分在二班。

所以这个方法行不通,得另找途径。


QSqlquery查询sqlite_Power_14


QSqlquery查询sqlite_list 查找_15


2. 点击“数学”旁边的箭头 --> 在“数字筛选器”中选择任意一个选项,比如“大于...”


QSqlquery查询sqlite_QSqlquery查询sqlite_16


3. 在弹出的对话框中输入任意值 --> 点击“确定”


QSqlquery查询sqlite_list 查找_17


4. 现在公式如下:

= Table.SelectRows(筛选的行, each [数学] > 60)

仿照上一个案例的解决方案,将“>60”替换为“= List.Max(筛选的行[数学])”,完整公式如下:

= Table.SelectRows(筛选的行, each [数学] = List.Max(筛选的行[数学]))


QSqlquery查询sqlite_list 查找_18


QSqlquery查询sqlite_Power_19


5. 回车后,即查找出了一班数学成绩最高的同学所对应的行。


QSqlquery查询sqlite_list 查找_20


6. 选择菜单栏的“主页”-->“关闭并上载”-->“关闭并上载至...”


QSqlquery查询sqlite_list 查找_21


7. 在弹出的对话框中选择“现有工作表”及需要上传的位置 --> 点击“加载”


QSqlquery查询sqlite_QSqlquery查询sqlite_22


这就是最终结果。


QSqlquery查询sqlite_list 查找_02


很多同学会觉得 Excel 单个案例讲解有些碎片化,初学者未必能完全理解和掌握。不少同学都希望有一套完整的图文教学,从最基础的概念开始,一步步由简入繁、从入门到精通,系统化地讲解 Excel 的各个知识点。

现在终于有了,以下专栏,从最基础的操作和概念讲起,用生动、有趣的案例带大家逐一掌握 Excel 的操作技巧、快捷键大全、函数公式、数据透视表、图表、打印技巧等……学完全本,你也能成为 Excel 高手。