0

我有一张表(我们以葡萄酒为例),上面列出了我地窖里的每一瓶酒、我买的时间、付了多少钱等。

有一列以逗号分隔的标签描述葡萄酒,例如“Fruity, White”。

我已经根据该数据创建了一个数据透视表,并将描述作为过滤列。但是我不能用“白色”过滤它。我必须找到每个包含“白色”的描述,例如“干、白”、“白、脆”等。

作为一个 RDBMS 背景,我的自然倾向是将标签放在他们自己的表中,与葡萄酒行键控,这样每个葡萄酒行就有零个或多个标签行。

如何,我到底如何使用它来过滤酒行?

4

4 回答 4

1

是的,您可以在 Excel 中执行此操作,并且描述字段可以保留为“干、白”等,因为您不需要拆分逗号分隔的值。

假设表源包含一个用于描述的文本列、一个用于值的数字列和一个用于购买年份的数字列。

您的枢轴设置如下

  • 字段:描述、价值和购买年份。

  • 列标签:购买年份

  • 行标签:描述
  • 价值之和:价值之和

行标签上有一个下拉标签过滤器 - 单击它,应该有一个选择标签过滤器的选项。选择此项,然后选择包含。您可以输入“白色”,它将选择所有包含白色的描述,例如“干,白”,“白,脆”。过滤器包括 ? 表示单个字符, * 表示任何一系列字符。

“开始于”和“结束于”以及否定都有类似的标签过滤器。

我在 Excel 2007 中尝试过,它在 2003 年也应该可以工作。我认为在 Excel 2003 中,您甚至可以组合过滤器,例如包含“白色”但不包含“干”,但在 2007 年我找不到这样做的方法。

于 2009-12-24T17:27:11.590 回答
0

如果我说的很明显,请原谅我,但您在这里遇到问题的原因是描述列不在 1NF 中,并且 Excel 数据透视界面不够灵活,无法进行基于模式的搜索。

最简单的选择是将 CSV 标准化为一系列列,每个列代表一个属性——一列代表葡萄酒颜色,一列代表甜度,一列代表原产国等等——并在多个列中应用过滤器。但是,如果(正如您对问题的评论所暗示的那样)葡萄酒是您真正问题的隐喻,那么您可能没有重新审视源数据设计的奢侈。

另一种可能性可能是使用宏(或数据库查询 - 我不清楚您是否已经实施了标签系统)根据您的标签值预先过滤数据透视表源表上的输入数据想要搜索,然后根据该数据重新刷新数据透视表。

第三种可能性是这个问题中使用的 VBA ,看起来它将自定义过滤数据透视表的可见行。

于 2009-10-12T07:32:29.587 回答
0

=IF(ISERR(查找(“白色”,UPPER(B5))),0,1)

创建一个额外的列并添加一个公式。这有2个技巧。一种是使用upper 在描述列中搜索WHITE - 以克服excel find 区分大小写的事实。二是如果字符串不存在,它会返回一个值错误 - 因此 iserr 将允许您捕获它并在此示例中返回 0(如果不存在)或 1(如果存在)。你可以用白色和空白代替 1 和 0。

于 2009-10-12T08:25:18.470 回答
0

您可以编写一个循环遍历数据的脚本,并为描述列中的每个逗号分隔项添加新行。这将允许数据透视表更好地过滤。

于 2009-10-12T17:01:04.723 回答