Программно исключить элементы страницы в olap pivot - PullRequest
0 голосов
/ 19 сентября 2008

У меня есть сводная таблица на кубе Олапа. Я могу зайти в поле страницы и вручную отменить выбор нескольких элементов. Как я могу сделать это в VBA на основе списка элементов, которые мне нужно исключить? (Нет, у меня нет соответствующего списка предметов, которые мне нужны)

Я знаю, как исключить эти элементы другими способами, например, изменив базовый запрос. Я специально хочу повторить действие пользователя по отмене выбора элементов в сводной таблице.

Ответы [ 3 ]

1 голос
/ 14 октября 2008

Вам не нужно запускать запрос MDX для получения списка элементов измерения, вы можете посмотреть свойства объекта куба в VBA. Начните с этого и посмотрите, куда он вас приведет!

Set oCat = New ADOMD.Catalog

цикл через это, например: oCat.CubeDefs (SCUBE) .Dimensions (3) .Hierarchies (0) .Levels (2) .Members (я)

0 голосов
/ 19 сентября 2008

Я нашел одно не вполне удовлетворительное решение. В отдельном запросе 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, что делает его практически медленным И это просто неправильно.

0 голосов
/ 19 сентября 2008

Я прошу прощения за этот пример на C #, но я действительно не знаю достаточно VBA, чтобы перевести его (возможно, кто-то может отредактировать эту запись и добавить ее ниже).

Вы ссылаетесь на что-то подобное?

((MOE.PivotField)pivotTableObject.PivotFields("[NAME]")).Delete();

Где MOE - это пространство имен Microsoft.Office.Interop.Excel, а [NAME] - это имя поля, которое вы хотите удалить

...