![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]()
Привет, кто может помочь с таким вопросом:
есть PivotTable (сводная таблица), в которую данные загружаются из PowerPivot (OLAP-источник). Как для выделенной ячейки можно получить список всех дочерних элементов (уровня leaf) в иерархии, которые соответствуют определенному полю? Вот пример (на рисунке): Ячейки, для которых нужно получить все непустые дочерние элементы, помечены красным, голубым и серым. Дочерние элементы, представляющие собой значения поля "код", выделены оранжевым. Их и нужно получать. Для "Бразилия" и столбца "1" будет список 1,10,19,28, для столбца "2" - 2,11,20,29 и т.п. Для ячейки на пересечении "23.08.10" и столбца "1" дочерними будут только 1 и 10. Для общего итога - все: 1,2,3,10,11,12,19,20,21,28,29,30. При этом, так как элементов может быть много, а получать их надо быстро, лучше не обращаться к самим ячейкам таблицы, так как обычно это медленно, а обращаться к объекту типа PivotCell. Похоже, надо копать в сторону PivotItems или подобной коллекции элементов, но как сделать точно - в этом и вопрос. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 04.08.2009
Сообщений: 112
|
![]()
Как-то так, но без самой таблицы как-то непривычно:
Код:
KL [MVP - Microsoft Office Excel]
CPU: Intel Core 2, 2.17GHz | RAM: 3.25GB (4GB) | GPU: nVidia Quadro FX 2500M OS: Windows 7 Ultimate x64 EN | MSO: 2010 Professional Plus x86 EN Последний раз редактировалось KL (XL); 27.08.2010 в 20:13. |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]()
Если везде поставить 1-й индекс, появляется ошибка 1004: невозможно получить свойство PivotItems класса PivotFields.
Также если менять индексы у PivotField, иногда появляется ошибка такого же рода о LabelRange у класса PivotItems А свойство ChildItems для OLAP не работает! (http://msdn.microsoft.com/en-us/libr...hilditems.aspx) Последний раз редактировалось motorway; 27.08.2010 в 21:59. |
![]() |
![]() |
![]() |
#4 | |
Форумчанин
Регистрация: 04.08.2009
Сообщений: 112
|
![]() Цитата:
Кстати с первыми индексами - логично. У вас PivotField(1) - Акции даже не включен в таблицу, так откуда у него будут PivotItems?
KL [MVP - Microsoft Office Excel]
CPU: Intel Core 2, 2.17GHz | RAM: 3.25GB (4GB) | GPU: nVidia Quadro FX 2500M OS: Windows 7 Ultimate x64 EN | MSO: 2010 Professional Plus x86 EN Последний раз редактировалось KL (XL); 27.08.2010 в 22:21. |
|
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]()
Пока что получается, что вообще нерешаемая проблема - ChildItems-то не работает
И эту проблему я видел в Интернете - у многих она есть. Но решения пока не нашел Кроме этого, у вас не используется текущая ячейка Последний раз редактировалось motorway; 27.08.2010 в 22:23. |
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 04.08.2009
Сообщений: 112
|
![]() Цитата:
Насчет текущей ячейки, я думал, вы сами разберетесь, там совсем легко, если найдем уровень объекта, на котором у вас эти значения ![]() И нерешаемых задач не бывает, бывает недостачно информации или мотивации :-)
KL [MVP - Microsoft Office Excel]
CPU: Intel Core 2, 2.17GHz | RAM: 3.25GB (4GB) | GPU: nVidia Quadro FX 2500M OS: Windows 7 Ultimate x64 EN | MSO: 2010 Professional Plus x86 EN Последний раз редактировалось KL (XL); 27.08.2010 в 22:30. |
|
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]()
А будет ли она работать у вас без подключения к источнику?
OK, посмотрите, может, что получится Понятно, что каким-то способом можно перебрать эти элементы, но хотелось бы это сделать максимально эффективно. А мотивация большая Последний раз редактировалось motorway; 27.08.2010 в 22:31. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 04.08.2009
Сообщений: 112
|
![]()
Как-то так, хотя Union достаточно медленная функция. Но если значений не тысячи, то должно бегать быстро:
Option Explicit Код:
KL [MVP - Microsoft Office Excel]
CPU: Intel Core 2, 2.17GHz | RAM: 3.25GB (4GB) | GPU: nVidia Quadro FX 2500M OS: Windows 7 Ultimate x64 EN | MSO: 2010 Professional Plus x86 EN |
![]() |
![]() |
![]() |
#9 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]()
Что-то пока не работает, пробую вывести значения, ничего не показывает, даже Msgbox не появляется. Как проверить полученные результаты?
Значений как раз может быть много в случае, если элемент достаточно высоко. При этом OLAP начинает тормозить, то же может быть и с макросом... Если >10000 ячеек, то в сводной таблице это уже не показывается Еще есть один способ - получать текущий уровень вложенности элемента и идти вниз по элементам, пока их уровень вложенности будет больше значения для текущей ячейки. Но надо еще определить их общее кол-во. Последний раз редактировалось motorway; 27.08.2010 в 23:41. |
![]() |
![]() |
![]() |
#10 | |
Форумчанин
Регистрация: 04.08.2009
Сообщений: 112
|
![]() Цитата:
![]() - Кликните мышью перед E в строке End Sub - Меню Debug > Run to cursor - В окне Locals найдите + arr - Кликните на плюс и изучайте значения массива В каком виде вам нужен список?
KL [MVP - Microsoft Office Excel]
CPU: Intel Core 2, 2.17GHz | RAM: 3.25GB (4GB) | GPU: nVidia Quadro FX 2500M OS: Windows 7 Ultimate x64 EN | MSO: 2010 Professional Plus x86 EN |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Много дочерних форм... | L.A.M.E.R. | Общие вопросы Delphi | 4 | 03.08.2010 08:13 |
запретить переопределение в дочерних классах | MAcK | Общие вопросы Delphi | 2 | 20.05.2010 09:29 |
массив в PivotTable | jungo | Microsoft Office Excel | 1 | 21.01.2010 09:33 |
Расположение дочерних MDI окон слева-направо и сверху-вниз | Umdis | Общие вопросы Delphi | 2 | 30.11.2009 07:05 |
AlphaSkins. Как убрать скин с дочерних MDI Форм? | chandrasecar | Компоненты Delphi | 4 | 11.02.2009 20:06 |