以编程方式排除 olap pivot 中的页面项目
Posted
技术标签:
【中文标题】以编程方式排除 olap pivot 中的页面项目【英文标题】:Programmatically exclude page items in olap pivot 【发布时间】:2010-09-11 04:50:45 【问题描述】:我在 olap 多维数据集上有一个数据透视表。我可以进入页面字段并手动取消选择多个项目。如何根据需要排除的项目列表在 VBA 中执行此操作? (n.b. 我没有相应的我需要包含的项目列表)
我知道如何以其他方式排除这些项目,例如通过更改基础查询。我特别想复制取消选择枢轴中项目的用户操作。
【问题讨论】:
【参考方案1】:您不必运行 MDX 查询来列出维度的成员,您可以在 VBA 中查看多维数据集对象的属性。 从这个开始,看看它会把你带到哪里!
设置 oCat = 新的 ADOMD.Catalog
循环通过这个例如: oCat.CubeDefs(sCube).Dimensions(3).Hierarchies(0).Levels(2).Members(i)
【讨论】:
【参考方案2】:我很抱歉这个例子是用 C# 编写的,但我真的不知道足够的 VBA 来翻译它(也许有人可以编辑这个条目并在下面添加它)。
你指的是这样的东西吗?
((MOE.PivotField)pivotTableObject.PivotFields("[NAME]")).Delete();
其中 MOE 是 Microsoft.Office.Interop.Excel 命名空间,[NAME] 是您要删除的字段的名称
【讨论】:
抱歉.. 我想从数据透视字段中删除项目,而不是数据透视字段本身。 我认为 PivotField 是行/列/值轴中的一个项目。 PivotField 不包含项目(虽然不是 100% 肯定,但很接近) 我们在术语上有所不同,我希望 Juan。我正在从 Excel 的数据透视表对象模型中绘制我的数据,其中数据透视字段确实包含数据透视项的集合。【参考方案3】:我找到了一个不完全令人满意的解决方案。在单独的 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 的查询,这使得它非常慢。而且感觉不对。
【讨论】:
以上是关于以编程方式排除 olap pivot 中的页面项目的主要内容,如果未能解决你的问题,请参考以下文章
为 Excel Pivot 提供支持的 OLAP 多维数据集。啥是更好的解决方案?