2008-09-19 16 views
1

Ich habe eine Pivot-Tabelle auf einem Olap Cube. Ich kann in ein Seitenfeld gehen und mehrere Elemente manuell abwählen. Wie kann ich dies in VBA basierend auf einer Liste von Elementen, die ich ausgeschlossen habe, tun? (n.b. Ich habe keine entsprechende Liste von Artikeln, die ich brauche)Programmatische Ausschluss von Seitenelementen in Olap Pivot

Ich weiß, wie diese Elemente auf andere Weise ausgeschlossen werden können, indem Sie beispielsweise die zugrunde liegende Abfrage ändern. Ich möchte speziell die Benutzeraktion des Abwählens von Elementen im Pivot replizieren.

Antwort

0

Ich entschuldige mich für dieses Beispiel in C#, aber ich weiß wirklich nicht genug VBA, um es zu übersetzen (vielleicht kann jemand diesen Eintrag bearbeiten und es unten hinzufügen).

Beziehen Sie sich auf so etwas?

((MOE.PivotField)pivotTableObject.PivotFields("[NAME]")).Delete(); 

Wo MOE ist die Microsoft.Office.Interop.Excel Namespace und [NAME] ist der Name des Feldes Sie

+0

Entschuldigung .. Ich möchte ITEMS von einem PivotField, nicht das Pivot-Feld selbst delfte. – Hobbo

+0

Ich denke, ein PivotField ist ein Element in der Zeile/Spalte/Wert-Achse. Ein PivotField enthält keine Elemente (nicht 100% sicher, aber nahe) – juan

+0

Wir haben einen Unterschied in der Terminologie, die ich von Juan erwarte. Ich zeichne meins aus dem PivotTable-Objektmodell von Excel, wo ein PivotField tatsächlich eine Sammlung von PivotItems enthält. – Hobbo

0

Ich fand eine nicht ganz befriedigende Lösung entfernt werden sollen. In einer separaten MDX-Abfrage habe ich alle Elemente der Dimension abgerufen, die dem Seitenfeld entsprechen. Ich habe auch ein Wörterbuch der auszuschließenden Elemente erstellt. Ich habe dann eine Schleife durch die Mitglieder wie folgt:

PivotField.CubeField.EnableMultiplePageItems = True 
firstTime = True 
For Each member In dimensionMembers 
    If Not HiddenMembers.Exists(member) Then 
     'firstTime = true is the equivalent of unchecking 
     ' the root node of the items treeview 
     PivotField.CubeField.AddPageItem "[Dimension].[" & member & "]", firstTime 
     firstTime = False 
    End If 
Next 

ich unbefriedigend sagen, weil jeder Aufruf AddPageItem eine Abfrage zu Analysis löst Server es unpraktikabel langsam machen. Und es fühlt sich einfach falsch an.

2

Sie müssen keine MDX-Abfrage ausführen, um die Elemente einer Dimension aufzulisten. Sie können die Eigenschaften des Cube-Objekts in VBA anzeigen. Beginnen Sie damit und sehen Sie, wo es Sie hinbringt!

Set OCAT = New ADOMD.Catalog

Schleife durch das zum Beispiel: oCat.CubeDefs (SCUBE) .Dimensions (3) .Hierarchies (0) .Levels (2) .Members (i)