问询:部门规模净变化的SQL查询优化及PowerBI实现方法
部门规模净变化计算方案
原表结构与示例数据
| EmployeeID | PreviousDept | NewDept | UpdateDate |
|---|---|---|---|
| 101 | Sales | Marketing | 2026-01-14 |
| 102 | Admin | Sales | 2026-02-02 |
简洁SQL实现方案
可以通过UNION ALL合并部门流入、流出记录,再一次性聚合计算净变化,比双CTE写法更简洁:
SELECT Dept AS Department, SUM(Change) AS NetChange FROM ( SELECT NewDept AS Dept, 1 AS Change FROM DepartmentChanges UNION ALL SELECT PreviousDept AS Dept, -1 AS Change FROM DepartmentChanges ) AS DeptChanges GROUP BY Dept ORDER BY NetChange DESC;
逻辑说明
- 第一部分将员工的新部门标记为
+1(代表部门流入) - 第二部分将员工的原部门标记为
-1(代表部门流出) - 外层按部门分组求和,直接得出该部门的规模净变化,结果与原CTE方案一致。
PowerBI实现步骤
1. 导入数据
打开PowerBI Desktop,点击主页选项卡的获取数据,选择对应数据源(如SQL Server、Excel等),找到DepartmentChanges表完成导入。
2. 计算部门净变化
方法1:DAX创建计算表
在建模选项卡点击新建表,输入以下DAX公式:
部门净变化 = VAR 流入记录 = SELECTCOLUMNS(DepartmentChanges, "部门", DepartmentChanges[NewDept], "变化值", 1) VAR 流出记录 = SELECTCOLUMNS(DepartmentChanges, "部门", DepartmentChanges[PreviousDept], "变化值", -1) VAR 合并记录 = UNION(流入记录, 流出记录) RETURN SUMMARIZE(合并记录, 合并记录[部门], "净变化", SUM(合并记录[变化值]))
方法2:Power Query预处理数据
- 进入转换数据界面,选中
DepartmentChanges表 - 点击主页选项卡的追加查询,选择追加为新查询,将原表追加一次
- 添加条件列:第一次导入的表设
变化值=1、部门=NewDept;追加的表设变化值=-1、部门=PreviousDept - 移除多余列,按
部门分组,对变化值求和得到净变化
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

