オラップ キューブにピボット テーブルがあります。ページ フィールドに移動して、複数の項目を手動で選択解除できます。除外する必要があるアイテムのリストに基づいて、VBA でこれを行うにはどうすればよいですか? (nb 私が含める必要がある項目の対応するリストを持っていません)
たとえば、基になるクエリを変更するなど、他の方法でこれらのアイテムを除外する方法を知っています。具体的には、ピボットでアイテムの選択を解除するユーザー アクションを再現したいと考えています。
オラップ キューブにピボット テーブルがあります。ページ フィールドに移動して、複数の項目を手動で選択解除できます。除外する必要があるアイテムのリストに基づいて、VBA でこれを行うにはどうすればよいですか? (nb 私が含める必要がある項目の対応するリストを持っていません)
たとえば、基になるクエリを変更するなど、他の方法でこれらのアイテムを除外する方法を知っています。具体的には、ピボットでアイテムの選択を解除するユーザー アクションを再現したいと考えています。
ディメンションのメンバーを一覧表示するために MDX クエリを実行する必要はありません。VBA でキューブ オブジェクトのプロパティを確認できます。これから始めて、どこにたどり着くか見てみましょう!
oCat を設定 = New ADOMD.Catalog
たとえば、これをループします: oCat.CubeDefs(sCube).Dimensions(3).Hierarchies(0).Levels(2).Members(i)
この例が C# であることをお詫びしますが、翻訳するのに十分な VBA を知りません (誰かがこのエントリを編集して以下に追加できるかもしれません)。
このようなことを指していますか?
((MOE.PivotField)pivotTableObject.PivotFields("[NAME]")).Delete();
MOE は Microsoft.Office.Interop.Excel 名前空間で、[NAME] は削除するフィールドの名前です。
完全に満足できる解決策ではないことがわかりました。別の MDX クエリで、ページ フィールドに対応するディメンションのすべてのメンバーを取得しました。除外する項目の辞書も作成しました。次に、次のようにメンバーをループします。
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
AddPageItem を呼び出すたびに Analysis Server へのクエリがトリガーされ、実行速度が非常に遅くなるため、満足できないと言えます。そして、それはただ間違っていると感じます。