以编程方式排除olap pivot中的页面项

时间:2008-09-19 11:34:44

标签: excel excel-vba pivot-table olap vba

我在olap多维数据集上有一个数据透视表。我可以进入页面字段并手动取消选择多个项目。如何根据我需要排除的项目列表在VBA中执行此操作? (n.b.我没有相应的项目列表,我需要包括在内)

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

3 个答案:

答案 0 :(得分:1)

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

设置oCat =新ADOMD.Catalog

循环通过这个例子:     oCat.CubeDefs(sCube).Dimensions(3).Hierarchies(0).Levels(2).Members(I)

答案 1 :(得分:0)

我为C#中的这个例子道歉,但我真的不知道有足够的VBA来翻译它(也许有人可以编辑这个条目并在下面添加它。)

你是在引用这样的东西吗?

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

其中MOE是Microsoft.Office.Interop.Excel命名空间,[NAME]是您要删除的字段的名称

答案 2 :(得分:0)

我发现一个不完全令人满意的解决方案。在单独的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的查询,从而使其变得不切实际。它只是感觉不对。