2013-10-01 4 views
1

Я пытаюсь создать новое действие в ActivePivot Live, которое вызывает retrieveObject в QueriesService. Что-то вроде этого:ActivePivot QueriesService.retrieveObject на распределенном кубе

IQueriesService queriesService = getSessionService(IQueriesService.class); 
ObjectDTO dto = queriesService.retrieveObject("MyDistributedCube", action.getObjectKey()); 

Это отлично работает на локальном кубе, но в распределенной установке, если не удается получить объект с удаленного сервера. Может быть, это не удивительно, но вопрос в том, как заставить его работать?

Может ли мне помочь новый тип запроса, похожий на LargeDealsQuery в этом примере? http://support.quartetfs.com/confluence/display/AP4/How+to+Implement+a+Custom+Web+Service

UPDATE:

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

ответ

0

IQueriesService.retrieveObject() - устаревшая услуга, введенная в ActivePivot 3.x. В это время ActivePivot хранил входные объекты непосредственно в памяти, и было естественно предоставить средства для извлечения этих объектов. Но более поздние версии ActivePivot ввели хранилище столбцов : данные извлекаются из входных объектов и упаковываются и сжимаются в столбчатые структуры. Затем объекты ввода освобождаются, что значительно снижает использование памяти.

Для ActivePivot 4.x в retrieveObject() услуга была несколько поддерживается, хотя и косвенно, как и в самом деле общие объекты восстанавливаются на лету из сжатых данных. Как вы заметили, реализация поддерживает только локальные кубы. Только запросы MDX и запросы Drillthrough имеют распределенную реализацию.

Для ActivePivot 5.x сервис retrieveObject() был удален полностью, в целях прямого доступа к базовому хранилищу данных.

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

В более общем смысле, запросы на сверление (а также запросы MDX и запросы GetAggregates) являются контекстуальными в ActivePivot. Вы можете прикрепить * IContextValue * s к запросу, который изменит способ выполнения запроса. Для детализированных запросов, в частности, вы можете прикрепить значение IDrillThroughProperties контекста к запросу:

public interface IDrillthroughProperties extends IContextValue { 

/** 
* @return The list of hidden columns defined by their header names. 
*/ 
List<String> getHiddenColumns(); 

/** 
* @return The comparator used to sort drillthrough headers (impacts the column order). 
*/ 
IComparator<String> getHeadersComparator(); 

/** 
* Returns the post-processed columns defined as plugin definitions of {@link IPostProcessedProperty}. 
* @return the post-processed columns defines as plugin definitions of {@link IPostProcessedProperty}. 
*/ 
List<IPluginDefinition> getPostProcessedColumns(); 

@Override 
IDrillthroughProperties clone(); 
} 

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

+0

Привет, Антуан. Спасибо за ответ. Я добавил некоторый контекст к вопросу. То, что я действительно хочу, - это стандартное сверление с ограниченным количеством полей и «полное» сверление всех полей для одного факта. Могу ли я получить это с помощью сквозных запросов? –

0

В соответствии с вашим обновлением можно выполнить следующие действия: установить drillthroughProperties не в общем контексте, а в заданной роли или на пользователя, и разрешить каждому пользователю изменять это до запуска DT-запроса. Итак, вам нужно закодировать службу, в которой будут отображаться все атрибуты, к которым пользователь может получить доступ, тогда пользователь может выбрать, какие поля должны появиться в drillthourgh, затем заполнить drillthroughProperties и запустить DT-запрос. Вы увидите только то, что вас интересует. см. Это как валютный контекст песочницы, но здесь он воздействует на DT.

Смежные вопросы