我在 olap 多维数据集上有一个数据透视表。我可以进入页面字段并手动取消选择多个项目。如何根据需要排除的项目列表在 VBA 中执行此操作?(注意我没有相应的我需要的物品清单)
我知道如何以其他方式排除这些项目,例如通过更改基础查询。我特别想复制取消选择数据透视中项目的用户操作。
我在 olap 多维数据集上有一个数据透视表。我可以进入页面字段并手动取消选择多个项目。如何根据需要排除的项目列表在 VBA 中执行此操作?(注意我没有相应的我需要的物品清单)
我知道如何以其他方式排除这些项目,例如通过更改基础查询。我特别想复制取消选择数据透视中项目的用户操作。
您不必运行 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 查询中,我检索了与页面字段对应的维度的所有成员。我还建立了要排除的项目的字典。然后我像这样遍历成员:
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 的查询,使其速度慢得不切实际。它只是感觉不对。