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 多维数据集数据透视表中获取数据

Excel 中显示的 OLAP 多维数据集连接

按大维度过滤数据透视表

在 Excel 中的 OLAP 多维数据集中搜索

Excel 2013 - VBA AddDataFiled 1004 错误

在 excel 数据透视过滤器中选择多个项目。但在提及代码中的项目时,我不想具体说明。还有比这更好的方法吗?