以编程方式排除olap透视中的页面项目

我在olap立方体上有一个数据透视表。 我可以进入页面字段并手动取消select多个项目。 我如何根据需要排除的项目列表在VBA中执行此操作? (nb我没有我需要的项目的相应列表)

我知道如何通过其他方式排除这些项目,例如通过更改基础查询。 我特别想要复制在数据透视中取消select项目的用户操作。

您不必运行MDX查询来列出维度的成员,就可以查看VBA中多维数据集对象的属性。 从这开始,看看它是哪里得到你!

设置oCat =新的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查询中,我检索了页面字段对应的维度的所有成员。 我还build立了一个要排除的项目的字典。 然后我通过这样的成员循环:

 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都会触发分析服务器的查询,使其不切实际地慢。 而这只是感觉不对。