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

Programmatically exclude page items in olap pivot

提问人:Hobbo 提问时间:9/19/2008 最后编辑:CommunityHobbo 更新时间:4/9/2014 访问量:3134

问:

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

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

Excel 数据透视表 OLAP VBA

评论


答:

0赞 juan 9/19/2008 #1

对于这个示例是用 C# 编写的,我深表歉意,但我真的没有足够的 VBA 来翻译它(也许有人可以编辑此条目并在下面添加它)。

你指的是这样的事情吗?

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

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

评论

0赞 Hobbo 9/19/2008
不好意思。。我想从 PivotField 中分离 ITEMS,而不是 pivot 字段本身。
0赞 juan 9/19/2008
我认为 PivotField 是行/列/值轴中的一个项目。数据透视字段不包含项目(虽然不是 100% 确定,但很接近)
0赞 Hobbo 9/19/2008
我们预计我们在术语上有所不同,我希望胡安。我从 Excel 的数据透视表对象模型中绘制我的数据透视表,其中数据透视字段确实包含数据透视项的集合。
0赞 Hobbo 9/19/2008 #2

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

1赞 Magnus Smith 10/14/2008 #3

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

设置 oCat = 新 ADOMD。目录

例如,循环执行以下操作: oCat.CubeDefs(sCube)。尺寸(3)。层次结构 (0)。级别(2)。成员(i)