1

我一直在尝试在 ActivePivot Live 中创建一个新操作,该操作在 QueriesService 上调用检索对象。像这样的东西:

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

更新:

这是上下文。我所拥有的字段可能无法合理地显示在钻取吸墨纸中,因此我将一些字段隐藏在多维数据集钻取配置中,既用于显示,也用于减少传输的数据量。为了在需要时查看所有字段,我在右键菜单中添加了一个“钻取详细信息”项,它将在多维数据集中查询单个钻取行上的所有字段并在弹出窗口中显示. 也许有更好的方法来获得这个功能?

4

2 回答 2

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();
}

这将允许您仅检索特定钻取查询所需的列。

于 2013-10-02T11:51:29.037 回答
0

根据您的更新,可以执行以下操作:不在共享上下文中而是在给定角色或每个用户中设置钻取属性,并允许每个用户在触发 DT 查询之前更改它。因此,您必须编写一个服务来显示用户可以访问的所有属性,然后用户可以选择应该出现在钻探中的字段,然后填充钻取属性并触发 DT 查询。然后您只会看到您感兴趣的内容。将其视为沙盒的货币上下文,但在这里它会影响 DT。

于 2013-10-14T11:18:14.867 回答