powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
16 сообщений из 16, страница 1 из 1
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #37615931
Leanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, помогите пожалуйста облегчить нелюбимую рутинную операцию с помощью VBA:
Есть Сводная таблица у которой источник ОЛАП.
Из всего списка артикулов отфильтровано только одно значение (путем выбора галочки), надо отфильтровать другое значение, а предыдущее скрыть. Попробовала написать макрос на эту тему, но столкнулась с тем что почему-то команда .PivotItems(i).Visible не работает для ОЛАПовской сводной.
Кроме того, For i = 1 To .PivotItems.Count - перечисляет только значения отмеченные галочкой (=видимые) , т.е. даже для того что бы составить список для команды .HiddenItemsList = Array(…) нужно выделить все значения, для расчета которых система зависает на полчаса.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
With Sheets("артикулы").PivotTables("СводнаяТаблица2").PivotFields("[Артикулы 5].[Артикулкраткий]")
For i = 1 To .PivotItems.Count
If .PivotItems(i).Name <> [h1].Value Then
.PivotItems(i).Visible = False 'не работает здесь!!!
End If
Next
End With



Как не отображая все значения (долго будет рассчитывать) отфильтровать одно единственное заранее известное значение.
Благодарю за рассмотрение.
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #37616404
Добрый день
Перебор значений в фильтре совершенно не нужен.
Можно передать в фильтр сразу массив нужных значений

Примерно так в вашем случае может выглядеть макрос, который поместит в фильтр сразу нужное значение
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
' для красоты и порядка ввожу объектную переменную, ссылающуюся на нужное поле сводной таблицы
Dim pf As PivotField
Set pf = Sheets("артикулы").PivotTables("СводнаяТаблица2").PivotFields("[Артикулы 5].[Артикулкраткий]")
' чтобы код сработал наверняка, принудительно включаю множественный выбор в поле
If Not pf.CubeField.EnableMultiplePageItems Then pf.CubeField.EnableMultiplePageItems = True
' записываю в свойство поля массив, состоящий из одного элемента    
pf.VisibleItemsList = Array("[Артикулы 5].[Артикулкраткий].&[_идентификатор_нужного_члена_измерения]")
'в последней строке подставьте Name реально существующего в кубе члена
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #37616412
например,
Код: c#
1.
pf.VisibleItemsList = Array("[Артикулы 5].[All Артикулы 5].[А0650]")
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #37617459
Leanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ.
У меня выдает ошибку на строке pf.CubeField.EnableMultiplePageItems = True если не отображены все значения (до запуска макроса у меня выбрано только одно значение).
Но даже если я не выделяю все значения он стопорится на pf.VisibleItemsList = Array("[Артикулы 5].[All Артикулы 5].[А0650]"), видимо потому что у меня Excel 2003, по крайней мере это предположение в этой теме делали Мучаем PivotTable

Может можно как-нибудь собрать список всех артикулов, не пересчитывая сводную?
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #37617497
Leanna, сначала проверьте название элемента
[Артикулы 5].[All Артикулы 5].[А0650] - я скопировал с листа вашего файла, Вы уверены, что это именно то что, нужно?
а к примеру, не [Артикулы 5].[Артикулкраткий].&[A0650] ?
если сомневаетесь - попробуйте записать макрорекордером смену значения фильтра

P.S. а какая ошибка возникает, кстати?
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #37617526
Leanna, уточнил. в Excel 2003 работать не будет. свойство PivotField.VisibleItemsList добавлено в Excel 2007
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #37617917
Leanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасение нашла в том что перенесла артикулы с поле "Страница", кот. в левом верхнем углу.
Там работает с помощью CurrentPageName
Код: vbnet
1.
2.
    ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("[Артикулы 5]"). _
        CurrentPageName = "[Артикулы 5].[All Артикулы 5].[" & [нужная ячейка с артикулом].Value & "]"


Судя по всему пора подумывать о 2007 Excel.
Спасибо Виктор за советы.
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #37618045
Leanna, пожалуйста
Имхо, если обновлять версию Excel, то лучше не на 2007, а на 2010
Там добавлено кое-что вкусное для работы с OLAP по сравнению с 2007
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #39350584
nikioioio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как пройти циклом for each по фильтру olap таблицы?
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #39351025
Slicer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nikioioio,

Если есть много сводных таблиц в одном екселе, к которым требуется применять общие фильтры, то это можно сделать с помощью Slice в екселе:
На отдельном листе настраиваете слайсы и по кнопке (создать на форме или сделать как надстройку в отдельном меню) запускаете обновление всех сводных таблиц (можно сделать еще один лист, в котром настривать применимость слайсов к разным сводным таблицам).

Такое решение проверено временем и пользователям удобно.
(есть примеры отчетов в которых десятки листов с множествой сводных таблиц в каждом)
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #39355440
nikioioio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне бы хотелось пройти по коллекции циклом for each in , но вот проблема - pivotitem не реагирует.
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #39357384
nikioioio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Slicer,

Попробовал сделать через срезы. там тот же принцип. Макрорекордер дает вот такие команды

Sub Ìàêðîñ4()

ActiveWorkbook.SlicerCaches("ыы").VisibleSlicerItemsList = _
Array( _
"[аа].[Видтары].[Вид].&[Коробка]", _
"[аа].[Видтары].[Вид].&[Бочка]", _
"[аа].[Видтары].[Вид].&[мал_бочка]")
End Sub

То что работает с обычными сводами, с олап не работает

Это обычная сводная все работает.

Sub ff()

Dim SlCash As SlicerCache
Dim slit As SlicerItem


For Each SlCash In ThisWorkbook.SlicerCaches


If SlCash.Name = "Ñðåç_¹" Then

For Each slit In ThisWorkbook.SlicerCaches(SlCash.Name).SlicerItems
On Error Resume Next

If slit.Name = 1 Then
ThisWorkbook.SlicerCaches(SlCash.Name).SlicerItems(slit.Name).Selected = True
Else
ThisWorkbook.SlicerCaches(SlCash.Name).SlicerItems(slit.Name).Selected = False

End If


Next

End If
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #39958656
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с такой же проблемой фильтры с (PivotTables OLAP Filters).
У меня необходимость макросом выставлять фильтр последние 12 мес и последние 30 дней.
Через свойство VisibleItemsList можно выставить необходимый фильтр. Функцией генерирую массив 12 мес или 30 дней.
Но может так получится, что какой то даты не окажется в фильтре выходит ошибка, как можно это обойти/проверить, судя по комментариям выше циклом пройтись по элементам фильтра нет возможности.
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #39958667
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valdemar_ru,

В кубе не хотите сделать иерархию
- Последние 30 дней
- Остальные
?
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #39958804
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Критик
valdemar_ru,

В кубе не хотите сделать иерархию
- Последние 30 дней
- Остальные
?


Спасибо за ответ.

Т.е., если создать вычисляемый флаг последних 30 дней и отдельно еще один по 12 месяцам, если я Вас правильно понял?
Мне кажется сопровождать не очень удобно, допустим, завтра квартал нужен будет или полугодие.
...
Рейтинг: 0 / 0
Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
    #39958952
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valdemar_ru

Т.е., если создать вычисляемый флаг последних 30 дней и отдельно еще один по 12 месяцам, если я Вас правильно понял?
Мне кажется сопровождать не очень удобно, допустим, завтра квартал нужен будет или полугодие.

ну добавьте сразу "последний квартал" и "последне поглугодие" - вот и все сопровождение
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Сводная таблица на базе ОЛАП как макросом отфильтровать нужное значение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]