在Excel中对于分数评级,最简单快捷的办法就是用VLOOKUP函数了,评级的条件可以使用做好的评级表格,也可以直接用数组写在公式内部。
![82b793121aad223c5b0208dd225476a8.png](https://i-blog.csdnimg.cn/blog_migrate/3eaa16f73fc62edb28e172a8430710e6.jpeg)
或者这样:
![b7091b219d3bfc231f78c2bb65c21d6b.png](https://i-blog.csdnimg.cn/blog_migrate/0379aef221bbd8ece93a316c5298b808.jpeg)
在Power Query中我们用什么办法才能做到这样的分级呢?
List.Accumulate
List.Accumulate函数每次从给定的数组中取出两位:
- x:起始值
- y:终止值
这是不是正符合我们的要求,只要我们的分数落在xy之间,我们就可以给出一个评级,我们来测试一下:
我们先做一个评级标准的表格:
![cf4a8f11dc0acd0684879d19a2df6127.png](https://i-blog.csdnimg.cn/blog_migrate/115d15c10b3721163eb4312514139839.jpeg)
我们用分数这一列来做为List.Accumulate函数的第一参数,第二参数从0开始:
![c85e2431be7b85696f188c6dc87f61fb.png](https://i-blog.csdnimg.cn/blog_migrate/5367013a91b91620d37a3f4f44517053.jpeg)
可能看不太清楚,我把自定义列的公式复制出来:
List.Accumulate(T[分数],0,(x,y)=>if [分数]>=x and [分数]
就像我们开始时描述的一样,[分数]>=x and [分数]
有了这个结果再来返回文字描述就简单多了。
List.PositionOf
List.PositionOf函数可以返回一个列表元素在列表中的位置,然后我们根据这个位置找到对应的文本描述:
![ec8dbd9d4ac117c92afc1ad2ece2a4a9.png](https://i-blog.csdnimg.cn/blog_migrate/a78e0f663356d2a6906c96845c3db50a.jpeg)
我们来看具体的公式:
T[评级]
{List.PositionOf(T[分数],
List.Accumulate(T[分数],0,(x,y)=>if [分数]>=x and [分数]
这样就看的很清楚,T[评级]就是我们要找的评级文本列,后面的大括号就是行号,这个行号要通过List.PositionOf函数来获得。
List.PositionOf函数:
- 第一参数用的就是T[分数],评级标准表格中的分数列
- 第二参数用的就是上面的List.Accumulate函数返回的结果
函数的含义就是返回List.Accumulate函数返回的结果在T[分数]这个列表中的位置。
我们最终得到的评级的结果与LOOKUP函数得到同样的结果。
在Power Query中的数据处理方式其实更直接。