今天要讲解的也是一个经典案例,将一列数值按指定的分母分成多个等份,余数单独计一份。
案例:根据下图 1 中每个人的工龄计算他们应得的长期贡献奖金,规则如下:
每满 5 年得 1000 元;
不满 5 年的部分,3 年及以上视同为 5 年;
3 年以下得 500
效果如下图 2 所示。
解决方案:1. 选中数据表的任意单元格 --> 选择工具栏的“数据”-->“从表格”
2. 在弹出的对话框中保留默认设置 --> 点击“确定”
表格已经上传至 Power Query。
3. 选择工具栏的“添加列”-->“自定义列”
4. 输入以下公式 --> 点击“确定”:
List.Transform(List.Split({ 1..[工龄]},5),List.Count)
公式释义:
List.Split({ 1..[工龄]},5):
List.Split 函数用于将列表分割成多个子列表,每个子列表包含指定数量的元素;
语法为 List.Split(list, count),list 是要分割的列表,count 是每个子列表中应包含的元素数量;
比如,马凤英的工龄为 6,List.Split(list, 5) 就会将这个列表分割成 1 个包含 5 个元素的子列表,以及另一个包含剩余元素的子列表,结果为 {{1, 2, 3, 4, 5}, {6}};
List.Transform(...,List.Count):
List.Transform 函数通过将转换函数 transform 应用到列表 list 来返回值的新列表;
语法为 List.Transform(list as list, transform as function) as list;第一个参数 list 是要处理的原始列表,第二个参数 transform 是一个函数,用于定义如何转换列表中的每个元素;转换后的结果会变成一个新的列表;
比如 List.Transform({1, 2}, each _ +1) 表示将 1 与列表 {1, 2} 中的每个值相加,结果为 {2, 3};
本案例中的公式表示统计第一个参数中的列表个数,结果变成一个新的列表。
5. 点开“自定义”旁边的扩展钮 --> 选择“扩展到新行”
6. 选择工具栏的“添加列”-->“条件列”
7. 在弹出的对话框中按以下方式设置 --> 点击“确定”:
列名:选择“自定义”
运算符:选择“大于或等于”
值:输入 3
输出:输入 1000
ELSE:输入 500
8. 选择工具栏的“主页”-->“分组依据”
9. 在弹出的对话框中按以下方式设置 --> 点击“确定”:
在第一个下拉菜单中选择“姓名”;
新列名:输入“奖金”
操作:选择“求和”;
柱:选择“自定义.1”
10. 删除“姓名”列。
11. 选择工具栏的“主页”-->“关闭并上载”-->“关闭并上载至”
12. 在弹出的对话框中选择“表”--> 选择“现有工作表”及所需上传至的位置 --> 点击“加载”
右侧绿色的表格就是每个人的长期贡献奖金,虽然 1 年的不能算“长期”,哈哈。