2013-10-01 17 views
1

我一直试图在ActivePivot Live中创建一个新的操作,它调用QueriesService上的retrieveObject。事情是这样的:分布式多维数据集上的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查询和钻取查询才具有分布式实现。

对于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。