有同学问 Power Query 是不是可有可无的?如果在 Excel 中可以完成的需求,不用 PQ 也无所谓。
如果非要这么说,也不是不对,但是好比你非要说沈阳到广州如果不坐飞机,走着也能到,自然无法反驳。
今天的案例,就好比是在 Excel 用公式相当于步行,而 PQ 却提供了直达航班。
案例:
对下图 1 中的数组分别进行四舍五入和四舍六入,结果保留 2 位小数。
效果如下图 2 所示。
解决方案:
1. 选中数据表的任意单元格 --> 选择菜单栏的“数据”-->“从表格”
2. 在弹出的对话框中点击“确定”。
表格已上传至 Power Query。
3. 选择菜单栏的“添加列”-->“自定义列”
4. 在弹出的对话框中将“新列名”设置为“两位小数”--> 输入以下公式 --> 点击“确定”:
Number.Round([数值],2,0)
公式释义:
Number.Round 的作用是将数值按要求舍入到最接近的值;
前两个参数是必需的,分别表示要舍入的值,以及保留的位数;
第三个参数可选,如果需要四舍五入,那么必须在此输入“0”,否则默认情况下是银行家舍入
既然上面的公式释义提到了一个概念:银行家舍入,那么就解释一下是什么意思。
银行家舍入也称为“四舍六入五成双”;
当尾数 <=4 时,舍去尾数;当尾数 >=6 时,将尾数舍去向前一位进位;
当尾数等于 5 时,如果 5 前面的数字是奇数则进位,是偶数则不进位
如果 5 的后面还有不为 0 的任何数,则均应进位
有关这个算法的 VBA 解法,可以参阅 Excel VBA(10) – 银行家舍入解决方案。
Power Query 中非常方便,只要 Number.Round 中第三个参数不写,默认就是该算法。
5. 再次选择菜单栏的“添加列”-->“自定义列”
6. 在弹出的对话框中将列名定义为“银行家舍入”--> 输入以下公式 --> 点击“确定”:
Number.Round([数值],2)
大家可以比较一下,红框中的结果,就是两种舍入的差异值。
7. 删除“数值”列。
8. 选择菜单栏的“主页”-->“关闭并上载”-->“关闭并上载至”
9. 在弹出的对话框中选择“表”--> 选择“现有工作表”及所需上传至的位置 --> 点击“加载”
绿色的表格就是两种不同的舍入结果,本来挺复杂的事情,在 PQ 中这么简单。