Вы можете вставить слайсер для каждого из этих четырех полей. После того, как они будут добавлены, вы можете перейти к Slicer Connections и выбрать все ваши опорные точки, которые связаны друг с другом.
Если вы ищете 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? – onevba
Этот мир, вероятно, должен быть более чистым и коротким, чтобы прокручивать поворотные точки с помощью или для каждого цикла. –