1

我有一个基于 PowerPivot 的数据透视表,在“行”部分中有多个级别。相当多的元素是空白的。有没有办法抑制空白行?

我的数据透视表现在看起来像这样。

Product1
    Release 1
        Iteration 1
            (blank)
        Iteration 2
            (blank)
    Release 2
        (blank)
            (blank)
Product2
    (blank)
Product3
    Release 1
        Iteration 1
            Sprint 1
            (blank)
        (blank)
(blank)

这就是我想要的样子

Product1
    Release 1
        Iteration 1
        Iteration 2
    Release 2
Product2
Product3
    Release 1
        Iteration 1
            Sprint 1

这只是一个例子。我尝试为每个级别设置过滤器以不显示空白,但如果我过滤每个级别以隐藏空白字段,则数据透视表中没有任何项目。似乎 Excel 最终会过滤掉具有任何空白值的每个级别。

不确定我是否有意义或提供了足够的信息来进行故障排除。我现在几乎脑死了,所以我道歉。

请让我知道这是否没有意义,或者我是否可以提供任何其他信息来澄清我正在尝试做的事情和遇到的事情。

谢谢。

编辑:将代码块更改为更清晰,并添加一个“之后”代码块以显示我想要的内容。我想问题是整个数据透视表的行的“深度”必须相等。例如,如果我对第一个项目有 3 个缩进,其他项目也必须显示 3 个级别的数据缩进。如果我隐藏空白并导致第一个项目的数据缩进 1 个,那么如果其他项目出现在 1 个缩进之后,它也会隐藏其他项目的非空白。仍然不确定这是否有意义:) 我需要睡觉。

4

5 回答 5

1

我认为您应该能够在数据透视表选项下检查Show items with no data on rows和/或显示。Show items with no data on columns

于 2013-08-07T16:46:20.337 回答
1

我最终改用 PowerPivot“管理”屏幕中的扁平数据透视表。这似乎做了我需要的。

于 2013-08-16T13:42:07.340 回答
1

我需要解决完全相同的问题,但希望在更改数据透视表过滤或刷新数据时自动隐藏行,所以我编写了一个从保存数据透视表的工作表上的“Worksheet_PivotTableUpdate”事件调用的函数,虽然如果您愿意,我想您可以按一下按钮。这最初是通过扫描数据透视表中的每一行来完成这项工作的,如果它是可见的并且不需要它则隐藏它(因为该行的第一个单元格是“(空白)”),或者如果它被隐藏并且应该显示它不是,否则只是让它隐藏或可见。

但是,我发现该函数运行得很慢,所以这是我的下一次尝试,它最初取消隐藏数据透视表中的所有行,然后找到第一列中的所有空白单元格,将它们添加到范围对象,然后它隐藏该范围内每个单元格的整行。这个版本的运行速度大约是原来的十倍 :-)

传入数据透视表所在工作表的名称、数据透视表的名称和一个可选字符串,以便在需要隐藏的行中查找;如果调用函数没有提供,则默认为“(空白)”。

如果我违反任何人的变量或函数命名约定,请提前道歉(我只是一个黑客;-))

Sub FixBlankPivotRowsV2(ByVal SheetName As String, ByVal PivotName As String, Optional HideDefn as String = "(blank)")
Dim CurrPivot As PivotTable
Dim CurrRow As Range
Dim BlankRange As Range        'NB This is where we'll build the range of things to hide, which will initially be Nothing, as we never initialise it.
Dim oldStatusBar As Boolean

'Show a nice message in the status bar
oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
Application.StatusBar = "Hiding blank entries in " & SheetName & ", back in a sec..."
Application.ScreenUpdating = False

'Get the pivottable to work with        
Set CurrPivot = ActiveWorkbook.Sheets(SheetName).PivotTables(PivotName)

'Unhide all of the pivot rows first
CurrPivot.RowRange.Rows.EntireRow.Hidden = False

'Loop around each row in the pivottable
For Each CurrRow In CurrPivot.RowRange.Rows
    If CurrRow.Offset(0, 0).value = HideDefn Then
        If BlankRange Is Nothing Then
            'This is the first blank row we've found, so just set the range up to be the first cell of that range
            Set BlankRange = CurrRow.Offset(0, 0)
        Else
            'Add the newly found blank row to the range using a Union
            Set BlankRange = Union(BlankRange, CurrRow.Offset(0, 0))
        End If
    End If
Next

'Only hide things if there's anything to hide!
If BlankRange Is Nothing Then
    Debug.Print "Nothing to hide!"
Else
    BlankRange.EntireRow.Hidden = True
End If

'Set the status bar back the way it was
Application.ScreenUpdating = True
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar
End Sub

我寻找一种方法来使用 Go To Special 类型功能之一选择第一列中的所有“空白”单元格,但找不到任何符合要求的内容,所以如果您知道如何,请告诉我做这样的事情,因为它会加快速度。

我希望这可以帮助那里的人!

于 2015-11-25T16:43:10.323 回答
0

不知道为什么或如何工作,但我选择了数据透视表中包含(空白)的单元格之一,然后是热空格键。然后我按回车键,同一列中的所有(空白)单元格都变为空白。对表中的其他列重复此操作。

于 2014-02-27T20:55:13.367 回答
0

尝试选择数据透视表“空白”中的一个单元格按删除按钮并按空格键。

于 2013-12-12T03:58:17.173 回答