在 Excel 中,我正在构建一个包含国家地图的仪表板报告。该地图由代表国家行政区划的对象组成,通过 VBA,对象会根据该地区的项目存在情况改变颜色。所需的数据是从原始数据表的数据透视表中提取的。数据表由各个项目负责人完成,尽可能简单。这一切都运行正常。
我的问题是,原始表中有两组信息,它们是相关的二进制数据集,我不认为数据透视表可以有效地处理它们。下面是一个非常需要的说明:
在这个版本中,我将项目焦点作为单个文本字符串,将位置作为一组二进制字段。效果很好。数据透视表计算每个位置的项目数量,仪表板上的切片器允许默认将其分组在一起,然后按项目焦点进行调整。数据透视表列中的数据按照虚拟示例显示在地图上,项目数量越多,阴影越深。这正是我需要的。但是,这不是一个令人满意的解决方案,因为某些项目有多个焦点,例如本例中的项目 3。当我单击切片器上的健康按钮时,项目 3 将不会包含在内。在此文件的完整版本中,有许多项目,有许多焦点组合,因此列出每种潜在组合并不切实际。
那么我的原始数据表应该包括焦点和位置的两组二进制字段,如下所示。但这似乎超出了数据透视表的理解能力。
所以 - 我需要一种方法来获取这些数据并生成一个包含项目计数的位置列表,如第一个例子所示。这需要从仪表板简单地调整到特定的焦点区域(使用切片器或下拉菜单)。可以做到吗?
答案1
在我看来,您是在谈论“取消透视”数据的能力。正如您所发现的,像您这样的交叉表布局并不是一个好的数据透视表数据源。交叉表有一个字段贯穿数据的顶部,通常是“年份”字段,如下例所示:
现在,交叉表实际上比平面文件更容易让人理解数据。但是,如果您使用交叉表制作数据透视表,则会得到一个非常繁忙的数据透视表字段窗格,如下图左侧所示,而不是右侧简单得多的数据透视表字段窗格:
为什么这很重要? 原因如下:
- 使用交叉表时,如果希望显示这些年份字段,则必须将每个年份字段分别拖到“值”区域。另一方面,使用平面文件时,一旦将“收入”字段拖到“值”区域,只需通过筛选“日期”字段即可决定显示(或隐藏)哪些年份的收入。
- 使用交叉表时,您必须分别更改 VALUES 区域中所有字段的数字格式。如果您想放弃“Sum of”前缀,或者想将值显示为列总数的百分比,同样如此;每个字段都需要单独更改。
那么解决办法是什么呢?您必须将源数据从交叉表转换为平面文件,这个过程通常称为逆透视或规范化交叉表。
您需要的数据如下所示:
...而不是像这样:
如果您只有少量数据,您可以手动剪切和粘贴以将其保存为平面文件。
如果您拥有具有 PowerQuery(又名获取和转换)的 Excel 版本,那么就会有一个本机的 UNPIVOT 命令,很容易在 YouTube 上找到解释视频。
如果你想要一个 VBA 解决方案,有很多不同的代码,包括我的一个例程http://dailydoseofexcel.com/archives/2013/11/21/unpivot-shootout/