以编程方式排除OLAP Pivot中的页面项目

时间:2020-03-06 14:25:35  来源:igfitidea点击:

我在olap多维数据集上有一个数据透视表。我可以进入页面字段并手动取消选择多个项目。如何根据需要排除的项目列表在VBA中执行此操作? (n.b.我没有相应的物品清单)

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

解决方案

我为使用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的查询,从而使查询变得缓慢。而且感觉很不对劲。

我们不必运行MDX查询来列出维的成员,我们可以在VBA中查看多维数据集对象的属性。
从此开始,看看它能!

设置oCat =新ADOMD。

例如,循环遍历:
oCat.CubeDefs(sCube).Dimensions(3).Hierarchies(0).Levels(2).Members(i)