Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2010, 19:02   #21
KL (XL)
Форумчанин
 
Аватар для KL (XL)
 
Регистрация: 04.08.2009
Сообщений: 112
По умолчанию

Да, но к PowerPivot вы подключаетесь с помощью OLEDB:

Код:
OLEDB;
Provider=MSOLAP.4;
Persist Security Info=True;
Initial Catalog=Microsoft_SQLServer_AnalysisServices;
Data Source=$Embedded$;
MDX Compatibility=1;
Safety Options=2;
MDX Missing Member Mode=Error;
Optimize Response=3;
Cell Error Mode=TextValue
Код:
SELECT 
   NON EMPTY Hierarchize({DrilldownLevel({[Магазины].[КодМагазина].[All]},,,
      INCLUDE_CALC_MEMBERS)}) DIMENSION PROPERTIES PARENT_UNIQUE_NAME,
   HIERARCHY_UNIQUE_NAME ON COLUMNS , 
   NON EMPTY Hierarchize(DrilldownMember(DrilldownMember(
   CrossJoin({[Продукты].[Производитель].[All],
   [Продукты].[Производитель].[Производитель].AllMembers}, 
   {([Дата].[Дата].[All],[Продажи].[Код].[All])}), 
   [Продукты].[Производитель].[Производитель].AllMembers, [Дата].[Дата]), 
   [Дата].[Дата].[Дата].AllMembers, [Продажи].[Код])) 
   DIMENSION PROPERTIES PARENT_UNIQUE_NAME,HIERARCHY_UNIQUE_NAME 
   ON ROWS  
FROM 
   [Sandbox] 
WHERE 
   ([Measures].[Сумма Сумма]) CELL PROPERTIES VALUE, 
   FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS
Что мешает проделать похожее через VBA только с запросами попроще
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) вне форума Ответить с цитированием
Старый 28.08.2010, 19:09   #22
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Насколько я понял, ваш пример выводит в Msgbox все значения для строк с уровнем вложенности, большим чем у текущей ячейки. При этом выводятся и значения для элементов, которые не относятся к текущему, как Child'ы. Да, пока было достаточно быстро, но выводились значения для всех строк, которые даже не являются вложенными в текущую ячейку (может, так вы и задумывали), ну и выводятся не коды, а сами значения. Впрочем, это не так важно, при необходимости можно разобраться. В принципе, можно сравнить и с моим примером по скорости.
motorway вне форума Ответить с цитированием
Старый 28.08.2010, 19:11   #23
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Цитата:
Что мешает проделать похожее через VBA только с запросами попроще
Ну если реально как-то через VBA сделать запрос к OLAP и получить для текущей ячейки все вложенные элементы на самом глубоком уровне (ключи), то я буду только рад, только я пока не настолько разбираюсь в программных запросах к OLAP, чтобы понять, как это сделать (чтобы еще было без вывода в таблицу, т.к. это долго занимает по времени). А вы?

Последний раз редактировалось motorway; 28.08.2010 в 19:13.
motorway вне форума Ответить с цитированием
Старый 28.08.2010, 19:19   #24
KL (XL)
Форумчанин
 
Аватар для KL (XL)
 
Регистрация: 04.08.2009
Сообщений: 112
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
Насколько я понял, ваш пример выводит в Msgbox все значения для строк с уровнем вложенности, большим чем у текущей ячейки. При этом выводятся и значения для элементов, которые не относятся к текущему, как Child'ы. Да, пока было достаточно быстро, но выводились значения для всех строк, которые даже не являются вложенными в текущую ячейку (может, так вы и задумывали), ну и выводятся не коды, а сами значения. Впрочем, это не так важно, при необходимости можно разобраться. В принципе, можно сравнить и с моим примером по скорости.
Не совсем - пример выводит в Msgbox все значения для строк с последним уровнем вложенности. И да, я почему-то решил, что нужны значения, но это легко поправить.
Насчет "выводятся и значения для элементов, которые не относятся к текущему", мы наверное опять работаем с разными таблицами. Я писал код для картинки в первом посте (см.вложение), а универсальность надо еще дорабатывать.
Вложения
Тип файла: zip VBA.PT.ListItemValuesOnClick.zip (111.4 Кб, 8 просмотров)
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) вне форума Ответить с цитированием
Старый 28.08.2010, 19:27   #25
KL (XL)
Форумчанин
 
Аватар для KL (XL)
 
Регистрация: 04.08.2009
Сообщений: 112
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
Ну если реально как-то через VBA сделать запрос к OLAP и получить для текущей ячейки все вложенные элементы на самом глубоком уровне (ключи), то я буду только рад, только я пока не настолько разбираюсь в программных запросах к OLAP, чтобы понять, как это сделать (чтобы еще было без вывода в таблицу, т.к. это долго занимает по времени). А вы?
То, что реально делать запросы, - это несомненно, а остальное - это полноценная работа, требующая, помимо знаний и желания, времени и возможности подключения к источнику :-)
Вот тут есть кое-что про ADO:
http://www.erlandsendata.no/english/...php?t=envbadac
http://office.microsoft.com/en-au/ac...006252688.aspx
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) вне форума Ответить с цитированием
Старый 28.08.2010, 19:34   #26
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

В вашем новом примере для ячейки J22 выводятся почему-то еще и данные, уже относящиеся к России, хотя Бразилия и Россия находятся на одинаковых уровнях вложенности, так что в сумму слагаемые из России не должны входить.
Мне главное было понять принцип, как можно быстро получать эти значения. Остальную работу, конечно, придется делать самому, но вот принципиально узнать, какой способ нужно использовать, чтобы хотя бы при миллионе строк эти значения не доставались очень долго. То, что вы предлагаете, это, видимо, запросы с помощью SQL? Понятно, что с помощью них достать нужные данные реально, но смысл использования PowerPivot состоит в ускорении этих запросов. Может, как раз в случае если надо достать именно большое количество данных, надо использовать SQL (хотя почему?)?
По крайней мере, суммарное значение продаж, например, появляется очень быстро - значит ли это, что миллион чисел складывается быстро, а вот если надо достать их ID, то это уже долго по каким-то причинам получается?
motorway вне форума Ответить с цитированием
Старый 28.08.2010, 19:42   #27
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Да, и еще проблема в том, что если свернуть группу значений, то это все уже не работает. А если бы можно было обращаться к объекту, в котором все эти значения содержатся, такого бы не было
motorway вне форума Ответить с цитированием
Старый 30.08.2010, 20:01   #28
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

А есть ли способ программно поместить в группу строк в PivotTable нужное поле из таблицы полей? Если это пробовать записать макрорекордером, ничего не появляется. Только запрос писать свой?
motorway вне форума Ответить с цитированием
Старый 30.08.2010, 22:14   #29
KL (XL)
Форумчанин
 
Аватар для KL (XL)
 
Регистрация: 04.08.2009
Сообщений: 112
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
А есть ли способ программно поместить в группу строк в PivotTable нужное поле из таблицы полей? Если это пробовать записать макрорекордером, ничего не появляется. Только запрос писать свой?
Код:
Sub Test()
    Dim pt As PivotTable
    Set pt = ActiveSheet.PivotTables(1)
    With pt.CubeFields(3)     'либо .CubeFields ("[Query1].[MyField]")
        .Orientation = xlRowField
        .Position = 1
    End With
End Sub
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) вне форума Ответить с цитированием
Старый 30.08.2010, 23:12   #30
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Спасибо за помощь. А можно аналогично удалить заданное поле из той же области?

Последний раз редактировалось motorway; 30.08.2010 в 23:19.
motorway вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Много дочерних форм... 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