2008-09-19 4 views
1

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

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

ответ

0

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

Вы имеете в виду что-то вроде этого?

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

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

+0

Извините. Я хочу делить ITEMS с PivotField, а не на сводное поле. – Hobbo

+0

Я думаю, что PivotField является элементом на оси Row/Column/Value. PivotField не содержит элементов (не на 100% уверен, хотя, но близко) – juan

+0

У нас есть разница в терминологии, которую я ожидаю от Хуана. Я рисую мой из объектной модели PivotTable Excel, где PivotField действительно содержит коллекцию PivotItems. – Hobbo

0

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

2

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

Набор oCat = Новый ADOMD.Catalog

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