如何在Excel LET函数构建的表格中添加列并按角色/学科筛选
问题描述
我现有以下Excel公式,可筛选出T2单元格指定日期后可用的员工列表:
=LET(uniqueEmployees,UNIQUE(AllStaffProjectAllocationTbl[Employee]), maxDatePerEmployee,BYROW(uniqueEmployees,LAMBDA(e,MAX(FILTER(AllStaffProjectAllocationTbl[End Date],AllStaffProjectAllocationTbl[Employee]=e)))), EmployeesWithMaxDate,CHOOSE({1,2},uniqueEmployees,maxDatePerEmployee), FILTER(EmployeesWithMaxDate,maxDatePerEmployee<=T2))
想请教两个问题:
- 能否在结果表格中加入**Role(职位)和Discipline(学科)**列?
- 能否给新生成的表格设置按学科或职位筛选的功能?
源数据表AllStaffProjectAllocationTbl内容如下:
| Employee | Role | Discipline | Project Name | Start Date | Start Year | End Date |
|---|---|---|---|---|---|---|
| Bob | Senior Programmer | Programming | Project 1 | 01/01/2020 | 2020 | 28/02/2020 |
| Bob | Senior Programmer | Programming | Project 2 | 01/03/2020 | 2020 | 31/03/2020 |
| Bob | Senior Programmer | Programming | Project 3 | 01/04/2020 | 2020 | 30/06/2020 |
| Dave | Mid Level Programmer | Programming | Project 1 | 01/02/2020 | 2020 | 28/02/2020 |
| Dave | Mid Level Programmer | Programming | Project 3 | 01/03/2020 | 2020 | 31/07/2020 |
| Peter | Senior Programmer | Programming | Project 1 | 01/01/2020 | 2020 | 31/01/2020 |
| Peter | Senior Programmer | Programming | Project 2 | 01/04/2020 | 2020 | 31/05/2020 |
| Peter | Senior Programmer | Programming | Project 3 | 01/06/2020 | 2020 | 30/06/2020 |
| Jack | Junior Programmer | Programming | Project 1 | 01/02/2020 | 2020 | 30/06/2020 |
| Richard | Senior Artist | Art | Project 1 | 01/03/2020 | 2020 | 30/04/2020 |
| Richard | Senior Artist | Art | Project 2 | 01/05/2020 | 2020 | 30/09/2020 |
| Rodney | Lead QA | QA | Project 1 | 01/03/2020 | 2020 | 30/06/2020 |
| Chris | Senior Producer | Production | Project 1 | 01/01/2020 | 2020 | 30/08/2020 |
| Roger | QA | QA | Project 1 | 01/01/2020 | 2020 | 30/04/2020 |
| Roger | QA | QA | Project 2 | 01/05/2020 | 2020 | 31/05/2020 |
| Roger | QA | QA | Project 3 | 01/06/2020 | 2020 | 30/06/2020 |
| Wesley | Mid Level Programmer | Programming | Project 1 | 01/02/2020 | 2020 | 31/05/2020 |
| Wesley | Mid Level Programmer | Programming | Project 2 | 01/06/2020 | 2020 | 31/07/2020 |
解决方案
一、修改公式加入Role和Discipline列
可以直接扩展原有LET函数的逻辑,提取每个员工对应的职位和学科,确保与最晚项目结束日期匹配。修改后的公式如下:
=LET( uniqueEmployees, UNIQUE(AllStaffProjectAllocationTbl[Employee]), // 获取每个员工的最晚项目结束日期 maxEndDate, BYROW(uniqueEmployees, LAMBDA(e, MAX(FILTER(AllStaffProjectAllocationTbl[End Date], AllStaffProjectAllocationTbl[Employee]=e)))), // 获取每个员工对应的职位(假设同员工职位固定,取第一条匹配记录) employeeRoles, BYROW(uniqueEmployees, LAMBDA(e, INDEX(FILTER(AllStaffProjectAllocationTbl[Role], AllStaffProjectAllocationTbl[Employee]=e), 1))), // 获取每个员工对应的学科 employeeDisciplines, BYROW(uniqueEmployees, LAMBDA(e, INDEX(FILTER(AllStaffProjectAllocationTbl[Discipline], AllStaffProjectAllocationTbl[Employee]=e), 1))), // 组合员工姓名、职位、学科、最晚结束日期四列 employeeData, CHOOSE({1,2,3,4}, uniqueEmployees, employeeRoles, employeeDisciplines, maxEndDate), // 筛选出最晚结束日期<=T2的员工,无结果时显示提示文本 FILTER(employeeData, maxEndDate<=T2, "无可用员工") )
注意:
如果存在员工职位/学科变更的情况,可将INDEX(...,1)替换为匹配最晚项目对应的职位/学科(比如结合MAX(End Date)筛选对应行的字段)。
二、给结果表格添加筛选功能
有两种简单实现方式:
方法1:转换为结构化表格
- 给公式输出的结果手动添加表头:员工、职位、学科、最晚结束日期。
- 选中整个结果区域(包括表头),点击菜单栏**「插入」→「表格」**,勾选「我的表格有标题」并确认。
- 生成的表格每列标题旁会自动出现筛选按钮,直接点击即可按职位、学科筛选。
方法2:手动添加筛选
- 选中结果区域的表头行。
- 点击菜单栏**「数据」→「筛选」**,表头列会生成筛选按钮,后续操作与表格筛选一致。
内容的提问来源于stack exchange,提问作者Automation Monkey
相关产品推荐
相关产品推荐

