以编程方式排除 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 多维数据集。啥是更好的解决方案?

在页面视图控制器中以编程方式使用情节提要中的视图控制器

Windows Defender - 以编程方式添加排除文件夹

Gitlab - Pivotal Tracker集成

以编程方式访问 JSF 应用程序中的属性文件

使用函数 pivot_longer() 时如何排除多个列? [复制]