使用“大于”的数据透视表的报表过滤器

Posted

技术标签:

【中文标题】使用“大于”的数据透视表的报表过滤器【英文标题】:PivotTable's Report Filter using "greater than" 【发布时间】:2013-12-12 06:56:40 【问题描述】:

我有一个数据透视表,其中包含报告过滤器中的一个字段(概率)。它的值是步长为 5 (0,5,10,15,...,100) 的百分比。我想用它来过滤大于或等于某个值的概率,但过滤器只过滤精确的选择。

现在我使用允许多个值的解决方法,然后从我想要的阈值中选择所有值,一直到 100 此解决方案除了尴尬之外,不显示我的选择,这是打印此表所必需的。过滤器的显示值为“(多个值)”,我想显示所有选择的值,或者更好的是,类似于“>=20%”。我真的不在乎它们是否显示在字段本身或数据透视表之外的另一个单元格中。

我的问题: 1)我可以让过滤器过滤 >= 我的选择吗?如果不 2)我可以显示多个选择,如 ">=20%"

【问题讨论】:

【参考方案1】:

执行此操作的一种方法是将您的字段从过滤器部分拉到数据透视表的行部分。然后使用菜单上的组选项将要保留的值分组。完成后,将您的字段拖回“过滤器”部分。分组将保留,您可以选中或取消选中一个框以删除大量值。

【讨论】:

【参考方案2】:

我不能说这对您有多大帮助,但只是找到了解决我遇到的类似问题的方法。 在枢轴-

    右键单击并选择数据透视表选项 选择显示选项 取消选中第一个“显示展开/折叠按钮” 检查'经典数据透视表布局(允许拖动网格中的字段) 点击确定。

这将优化数据。然后,我刚刚将此数据复制并粘贴到一个新选项卡中,在该选项卡中我已将过滤器应用于我的 Total 列,其值大于某个百分比。

这在我的情况下确实有效,希望它对你也有帮助。

【讨论】:

【参考方案3】:

也许在您的数据源中添加一个对所有行执行 sumif 的列。 不确定您的数据是什么样的,但类似于 =(sumif([保持枢轴行头的列),[行中的当前行头值],概率列)>.2)。 当数据透视表显示 >20% 时,这将为您提供 True。 然后在此列的数据透视表上添加过滤器以获取 TRUE 值

【讨论】:

【参考方案4】:

我知道这有点晚了,但如果这对任何人都有帮助,我认为您可以在数据中添加一列来计算概率是否为">='PivotSheet'$D$2"(参考pivot table 表上的单元格)。

然后,将该列添加到您的数据透视表中,并将新列用作true/false 过滤器。

然后您可以更改存储在引用单元格中的值以更新您的概率阈值。

如果我理解你的问题,这可能会得到你想要的。过滤器值将与枢轴一起显示在工作表上,并且可以更改以适应对概率阈值的任何快速更改。 T/F 过滤器可以标记为“Above/At Probability Threshold”或类似的东西。

我用它来做类似的事情。在数据透视表工作表上有单元格引用很方便,这样我就可以更新值并刷新数据透视表以快速修改结果。我为之做这件事的人无法决定该阈值应该是多少。

【讨论】:

【参考方案5】:

使用值过滤器。单击行标签旁边的下拉箭头,您将看到从 A 到 Z 排序、标签过滤器和值过滤器之间的选择。选择大于值过滤器可以让您选择用于过滤行的列,即使该列本身没有下拉箭头。

【讨论】:

【参考方案6】:

经过一番研究,我终于得到了一个 VBA 代码,可以在另一个单元格中显示过滤器值:

Dim bRepresentAsRange As Boolean, bRangeBroken As Boolean
Dim sSelection As String
Dim tbl As Variant
bRepresentAsRange = False
bRangeBroker = False

With Worksheets("Forecast").PivotTables("ForecastbyDivision")
            ReDim tbl(.PageFields("Probability").PivotItems.Count)
            For Each fld In .PivotFields("Probability").PivotItems

                If fld.Visible Then
                    tbl(n) = fld.Name
                    sSelection = sSelection & fld.Name & ","
                    n = n + 1
                    bRepresentAsRange = True
                Else
                    If bRepresentAsRange Then
                        bRepresentAsRange = False
                        bRangeBroken = True
                    End If
                End If

            Next fld

            If Not bRangeBroken Then
                Worksheets("Forecast").Range("ProbSelection") = " >= " & tbl(0)
            Else
                Worksheets("Forecast").Range("ProbSelection") = Left(sSelection, Len(sSelection) - 1)
            End If

        End With

【讨论】:

【参考方案7】:

在 Excel 数据透视表中,过滤器只允许显式选择的值是正确的。但是,如果过滤器字段放置在数据透视表的行或列上,您将获得更广泛的标签过滤条件集,包括大于。如果您在您的情况下这样做,那么额外的好处将是与您的条件相匹配的各种概率水平显示在表格的正文中。

【讨论】:

不幸的是,概率必须保持在页面级别。有什么方法可以通过 VBA 获取选定的过滤器值?这样我就可以将它们显示在表格外的单元格中...... 我不确定您所说的“停留在页面级别”是什么意思。 我的意思是它必须留在报告过滤器部分。 一种方法是从我关于在数据透视表而不是过滤器中包含概率的建议开始,然后做一些连接数据透视表该列中的所有值并显示连接字符串的操作回到数据透视表上方的单元格中。我想到的那种串联在***.com/questions/8135995/…中讨论

以上是关于使用“大于”的数据透视表的报表过滤器的主要内容,如果未能解决你的问题,请参考以下文章

过滤数据透视表的最后一项 (vba)

过滤数据透视表列,仅在

Excel数据透视表、切片器如何做?

EXCEL 我想用日期命名自动建立多个工作表

删除工作簿中每个数据透视表的筛选器

您可以将公式应用于数据透视表的计数过滤器吗?尝试在大型数据集中查找重复项