Excel 2013 过滤多个 OLAP 数据透视表
Posted
技术标签:
【中文标题】Excel 2013 过滤多个 OLAP 数据透视表【英文标题】:Excel 2013 filtering on multiple OLAP pivot tables 【发布时间】:2016-04-06 14:39:01 【问题描述】:这里是 VBA 新手。
虽然我能够使用我在网上找到的 VBA 代码之一同步多个本地数据透视表,但我正在努力解决以下问题:
我在一张纸上有 16 个 OLAP 连接的数据透视表。每个都有 6 个过滤器,其中 4 个过滤器是相同的。我希望能够使用这四个过滤器之一更改所有数据透视表。
【问题讨论】:
【参考方案1】:您可以为这四个字段中的每一个插入一个切片器。添加后,您可以转到切片器连接并选择所有相关的枢轴。
如果您正在寻找 VBA,则必须遍历工作表上的所有枢轴,然后遍历所有报表过滤器成员并将所选值存储到数组中。
或者您可以在隐藏选项卡上创建切片器并使用 CUBERANKEDMEMBER 函数返回切片器的所有选择,然后使用它来构建您的数组并将其应用于您的所有数据透视表当您的任何报告过滤器更改(您可以在工作表中使用 Worksheet_PivotTableAfterValueChange 过程)
以下是我们使用 2 个数据透视表的方法:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
''''variables for pivottable changed
Dim pivotname As String
Dim pivotname2 As String
Dim PT As PivotTable
Dim PT2 As PivotTable
''''variables for pivotrowfields
Dim pti As PivotItem
Dim pti2 As PivotField
''''variables for pagefilters
Dim PF As PivotField
Dim colPageFields As PivotFields
Dim aFilters As Variant
'''Un-enable events to avoid an endless loop
Application.EnableEvents = False
'''Set variables
pivotname = Target.Name
If pivotname = "PivotTable1" Then
pivotname2 = "PivotTable4"
Else
pivotname2 = "PivotTable1"
pivotname = "PivotTable4"
End If
If ActiveSheet.Name = "Slicer Setup" Then
Sheets("By Org Structure").Activate
End If
Set PT = ActiveSheet.PivotTables("" & pivotname & "")
Set PT2 = ActiveSheet.PivotTables("" & pivotname2 & "")
Set colPageFields = PT.PageFields
'''action for changing the filters on Page Fields
For Each PF In colPageFields
PF.CubeField.EnableMultiplePageItems = True
'PT2.PivotFields(PF.Name).CubeField.EnableMultiplePageItems = True
aFilters = PT.PivotFields(PF.Name).VisibleItemsList
If aFilters(1) = "" Then
If PT.PivotFields(PF.Name).CubeField.AllItemsVisible = True Then
PT2.PivotFields(PF.Name).ClearAllFilters
Else
PT2.PivotFields(PF.Name).VisibleItemsList = Array("")
End If
Else
PT2.PivotFields(PF.Name).VisibleItemsList = Array(aFilters)
End If
Next
Set colPageFields = PT.RowFields
'''action for changing the filters on Row Fields
For Each PF In colPageFields
PF.CubeField.EnableMultiplePageItems = True
'PT2.PivotFields(PF.Name).CubeField.EnableMultiplePageItems = True
aFilters = PT.PivotFields(PF.Name).VisibleItemsList
If aFilters(1) = "" Then
If PT.PivotFields(PF.Name).CubeField.AllItemsVisible = True Then
PT2.PivotFields(PF.Name).ClearAllFilters
Else
PT2.PivotFields(PF.Name).VisibleItemsList = Array("")
End If
Else
PT2.PivotFields(PF.Name).VisibleItemsList = Array(aFilters)
End If
Next
'''Re-enable events to allow for this event macro to be kicked off again next time pivottables are changed
Application.EnableEvents = True
ActiveWorkbook.ShowPivotTableFieldList = False
End Sub
【讨论】:
似乎我无法链接切片器,因为数据透视表具有分组字段并且基于 OLAP。我是否正确地假设我需要在调整 VBA 代码时将所有数据透视表变暗并为它们复制代码? 使用 for 或 for 循环遍历枢轴可能会更干净、更短。以上是关于Excel 2013 过滤多个 OLAP 数据透视表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用或过滤器从 Excel 中的 OLAP 多维数据集数据透视表中获取数据