不可能的透视表之如何在透视表中显示文本
我们面对的问题很简单。
假设有以下数据:
现在我们需要将这份数据进行如下的展示:
我们有什么方法能快速做出这个报表,并且这个过程还能够自动化:即如果源数据有变化,这个结果还能够自动刷新?
首先,我们必须排除使用函数的做法。Excel的函数确实无所不能,肯定可以实现这个报表,某种程度上也可以说是自动的,但是如果部门增加或者部门增减人员,往往需要调整公式,因此不能完全自动化。
其次,我们要排除VBA的方法,第一有点杀鸡用牛刀的感觉。第二,大部分不掌握这个方法。
再其次,数据透视表是肯定做不出这个报表的!
很多人遇到这种情况往往就会直接手工完成了。其实有简单的办法实现这个需求,今天我们介绍两种方法。
我们以前介绍过一个进行文本透视的方法(详细内容看这篇文章),利用其中的方法,可以做出这样的结果:
跟我们想要的结果很接近,但是还差点。
当然,你可以在这个基础上用分列做出这个报表来,但是这就是一个手工的工作了,不能实现自动化的要求。
我们可以变动一下,首先在源数据表上添加一列,使用公式:
=COUNTIF($B$3:B3,[@部门])
然后在“Power Pivot”选项卡中,点击“添加到数据模型”:
然后在“Power Pivot”选项卡中,点击“度量值”,“新建度量值”:
使用下面的公式创建度量值“部门人员”:
=CONCATENATEX('表1','表1'[人员],",")
进入“Power Pivot for Excel”界面,在“主页”选项卡下,点击“数据透视表”:
选择在新工作表中创建透视表,得到的透视表如下:
将部门放置行标签字段,辅助列放在列标签字段,度量值“部门人员”放在值字段:
得到透视表如下:
这就是我们要求的结果
我们在前面刚开始介绍Power Query的时候就讲过,Power Query是一个非常强大的数据处理工具包,它甚至可以不借助透视表就可以完成很多形式的报表。今天讲的就是一个例子。
选中数据区域的任意单元格,在“数据”选项卡中,点击“从表格”:
弹出“Power Query编辑器”:
在“转换"选项卡下,点击”分组依据":
在分组对话框中,将分组依据选为“部门”,新列名修改为“分组”,操作选为“所有行”:
点击确定后,得到:
将上面的公式修改为:
= Table.Group(更改的类型, {"部门"}, {{"分组", each Table.AddIndexColumn(_,"a",1,1)}})
得到结果:
点击分组列名称右边的图标:
选择人员和“a"(即每组的索引列):
得到表格:
选中最后一列“分组.a”,在“转换”选项卡下,点击“透视列”:
在对话框中,将值列选择为“分组.人员”,点击高级选项,将聚合值函数选择为“不要聚合”:
点击确定后,得到下表:
现在,只要点击关闭并上载:
就可以得到需要的结果:
这是一个很有代表性的例子,也是“文本透视”最常用的方式。但是无论是传统的数据透视表还是Power Pivot都不能直接得到这个结果。如果在原始数据上添加一个辅助列,用Power Pivot可以得到这个结果。如果不想修改原始数据的话(在很多场景下,不能允许我们修改原始数据),我们就可以使用最后一个方法:用Power Query实现这个结果。
在自动化数据处理的大前提下,Power Query可以起到很大的作用,就像这个例子展示的那样,有很多原来需要用透视表或超级透视表完成的报表,使用Power Query可以轻松完成。
在这个例子中,有一步我们修改了菜单项命令产生的结果,用了一个原来没见过的公式,大家不要担心,后面我们会陆续为大家介绍这些公式的用法。
关注本公众号,点击底部菜单“联系客服”,与客服取得联系,索取“不可能的数据透视表之五”案例文件