我在数据库中有以下情况:
部门表包含公司中的所有部门。
员工表包含所有员工以及他们的部门ID和AllowedAbsenceDays字段,该字段告诉我们当前年度员工缺勤的天数。
缺席表包含公司中发生的所有缺席。它有员工身份和缺勤日期,以及缺席的原因(休假,病假,个人日,以及未来可能更多......)
我应该创建一份报告,列出所有员工,并显示他们被允许缺席的天数以及他们缺席的天数(以及缺勤的原因是什么)。
我按员工和缺席原因对数据进行了分组:
这是我迄今为止能够获得的,通过将部门,员工和允许缺勤天数放在数据区域中,列区域中的原因和数据区域中没有的天数:
问题在于我无法获得每个部门允许缺勤天数的小计(这是一个确定的要求)。最终的报告应该看起来有点像这样(我已经拍过这张照片)。
有没有办法获得这些小计?也许我应该以不同的方式为数据透视表准备数据?请注意,Grand Total列应仅包括实际缺勤天数(不包括允许缺勤天数)。
示例工作簿可供下载here
感谢所有仍在阅读的人:)
P.S。真实情况不同(在问题域中)。这是一个有点人为的例子,但基本问题是一样的。
答案 0 :(得分:3)
这是典型的数据规范化问题。 “允许缺勤日”字段与员工有关,而与任何特定缺勤无关。每一行(记录)中重复此信息都是造成问题的原因。
要在Excel工作表和数据透视表中实现此目的,您可以删除“允许缺勤天数”列,而是使用“允许缺勤天数”作为“原因”列中的值之一。将允许的天数显示为负数量或将其他缺席原因显示为负数可能是有益的。否则整体总计将毫无意义。
工作表和数据透视表应该大致如下:
为每位员工重复部门似乎并不理想,但我认为员工可以在一年内更换部门,因此您可能/可能不必以某种方式对此进行说明。你还需要它来使数据透视表工作
如果绝对100%不能以这种方式影响总计,那么我不相信你可以通过数据透视表实现这一点。您可能希望使用ADO查询工作表并使用某些VBA宏来格式化并输出结果。 This page应该让您了解所涉及的内容
答案 1 :(得分:0)
在所有行中留下“允许缺席天数”空白,然后在底部/顶部放入行,其中包含“允许缺席天数”的数字和其他内容的空白。
然后将您的“允许缺席天数”放入数据而不是数据库中的列,并将其拖到左侧。