我有一个基于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个缩进后出现,它将隐藏其他项目的非空白。仍然不确定这是否有意义:)我需要一些睡眠。
答案 0 :(得分:1)
我认为您应该可以在数据透视表选项下的“显示”中查看Show items with no data on rows
和/或Show items with no data on columns
。
答案 1 :(得分:1)
我最终使用Flattned PivotTable而不是PowerPivot“Manage”屏幕。这似乎做了我需要的。
答案 2 :(得分:1)
我需要解决完全相同的问题,但希望在更改pivottable过滤或刷新数据时自动隐藏行,所以我在工作表上写了一个来自'Worksheet_PivotTableUpdate'事件的函数如果你愿意的话,你可以把它从按钮上移开来。这最初通过扫描枢轴表中的每一行来完成这项工作,如果它是可见的则隐藏它并且不需要(因为行的第一个单元格是'(空白)'),或者如果它被隐藏并且不应该显示它不,只是让它隐藏或可见。
但是,我发现函数运行得很慢,所以这是我的下一次尝试,它最初取消隐藏了pivottable中的所有行,然后查找第一列中的所有空白单元格,将它们添加到范围对象,然后它隐藏该范围内每个单元格的整行。这个版本的速度大约快十倍: - )
传入pivottable所在的工作表的名称,pivottable的名称以及要在需要隐藏的行中查找的可选字符串;如果调用函数没有提供,则默认为'(空白)'。
如果我违反任何人的变量或函数命名约定(我只是一个黑客; - ),请提前道歉。)
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类型功能之一选择第一列中的所有'空白'单元格,但找不到符合条件的任何内容,所以如果你有任何问题请告诉我知道如何做这样的事情,因为它会加快这一点。
我希望这有助于那里的人!
答案 3 :(得分:0)
尝试选择数据透视表中的单元格“空白”按删除按钮并按空格键。
答案 4 :(得分:0)
不知道为什么或如何工作,但我选择了数据透视表中包含(空白),然后是热空格键的其中一个单元格。然后我点击返回键,同一列中的所有(空白)单元格都空白。对表中的其他列重复此操作。