提问人:Hobbo 提问时间:9/19/2008 最后编辑:CommunityHobbo 更新时间:4/9/2014 访问量:3134
以编程方式排除 olap 透视透视表中的页面项
Programmatically exclude page items in olap pivot
问:
我在 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)
评论