29.07.2024, 16:01
Ich versuche, eine Spalte in einer SSAS-Cube-Pivot-Tabelle zu filtern. Ich möchte nur zwei identifizierte Werte aus dieser Spalte ausschließen und alle restlichen Werte in dieser Spalte auswählen.
Irgendwie schließt mein Code viele andere Werte aus und wählt nur wenige andere aus. Irgendwie zufällig.
Kann mir jemand helfen und mir sagen, was ich falsch mache? Hier ist der Code:
ActiveSheet.PivotTables("PivotTable1").PivotFields( _
"[MasterData Publisher Groups].[Publisher Group].[Publisher Group]"). _
ClearAllFilters
Range("E8").Select
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim includeItems As Collection
Dim item As Variant
Dim i As Long
Dim excludeList As Variant
Dim visibleItemsArray() As Variant
Dim itemCount As Long
' Set your PivotTable and PivotField
Set pt = ActiveSheet.PivotTables("PivotTable1")
Set pf = pt.PivotFields("[MasterData Publisher Groups].[Publisher Group].[Publisher Group]")
' Refresh the PivotTable to ensure it has the latest data
pt.RefreshTable
' Define the items to exclude
excludeList = Array("[MasterData Publisher Groups].[Publisher Group].&[30118]", _
"[MasterData Publisher Groups].[Publisher Group].&[27123]")
' Initialize the collection to store items to include
Set includeItems = New Collection
' Loop through all items in the pivot field
For Each pi In pf.PivotItems
' Check if the item is in the exclude list
Dim shouldExclude As Boolean
shouldExclude = False
For i = LBound(excludeList) To UBound(excludeList)
If pi.Name = excludeList(i) Then
shouldExclude = True
Exit For
End If
Next i
' Add the item to includeItems if it should not be excluded
If Not shouldExclude Then
includeItems.Add pi.Name
End If
Next pi
' Convert the collection to an array
itemCount = includeItems.count
ReDim visibleItemsArray(1 To itemCount)
For i = 1 To itemCount
visibleItemsArray(i) = includeItems(i)
Next i
' Clear existing filters
pf.ClearAllFilters
' Set the VisibleItemsList property
pf.visibleItemsList = visibleItemsArray
"[MasterData Publisher Groups].[Publisher Group].[Publisher Group]"). _
ClearAllFilters
Range("E8").Select
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Dim includeItems As Collection
Dim item As Variant
Dim i As Long
Dim excludeList As Variant
Dim visibleItemsArray() As Variant
Dim itemCount As Long
' Set your PivotTable and PivotField
Set pt = ActiveSheet.PivotTables("PivotTable1")
Set pf = pt.PivotFields("[MasterData Publisher Groups].[Publisher Group].[Publisher Group]")
' Refresh the PivotTable to ensure it has the latest data
pt.RefreshTable
' Define the items to exclude
excludeList = Array("[MasterData Publisher Groups].[Publisher Group].&[30118]", _
"[MasterData Publisher Groups].[Publisher Group].&[27123]")
' Initialize the collection to store items to include
Set includeItems = New Collection
' Loop through all items in the pivot field
For Each pi In pf.PivotItems
' Check if the item is in the exclude list
Dim shouldExclude As Boolean
shouldExclude = False
For i = LBound(excludeList) To UBound(excludeList)
If pi.Name = excludeList(i) Then
shouldExclude = True
Exit For
End If
Next i
' Add the item to includeItems if it should not be excluded
If Not shouldExclude Then
includeItems.Add pi.Name
End If
Next pi
' Convert the collection to an array
itemCount = includeItems.count
ReDim visibleItemsArray(1 To itemCount)
For i = 1 To itemCount
visibleItemsArray(i) = includeItems(i)
Next i
' Clear existing filters
pf.ClearAllFilters
' Set the VisibleItemsList property
pf.visibleItemsList = visibleItemsArray
Die Liste der Elemente ist SEHR lang, deshalb kann ich in einer VBA-Anweisung nicht angeben, welche Elemente ausgewählt werden sollen. Als ich anfangs versuchte, alle sichtbaren Elemente in die Liste aufzunehmen, erhielt ich einen Laufzeitfehler, dass die Anweisung zu lang sei. Daher gehe ich diesen Weg, um die excludeList und includeList zu erstellen.
Wenn ich beim Debuggen den Mauszeiger über pi.Name in der obigen LBound-/RBound-Schleife bewege, hat der Wert die Form „[MasterData Publisher Groups].[Publisher Group].&[30118]“ und nicht den tatsächlichen Ausgabenamen (z.B "Test Name Publisher Here"), den ich in der Excel-Pivot sehe. Ist das normal? Vielleicht funktioniert der Code deshalb nicht wie er sollte?