2

我最近问了一个关于多对多关系的问题,以及如何使用它们来计算得到很好回答的交叉点。现在,我们的多维数据集还有另一个很好的需求,可以将其扩展到更多数据。一般问题仍然存在:How many orders contain both product x and y?

但是,度量值组现在要大得多,目前大约有 14 亿行。我尝试使用另一篇文章中描述的方法来实现这一点,其中包含几个隐藏的交叉引用度量组。但是,这对于我们的硬件来说实在是太大了,立方体的大小接近 0.5 TB,并且查询需要几分钟才能完成。

现在我会尝试使用另一个选项:我可以通过计算度量访问我们的关系数据库吗?看来我可以使用本文中描述的UDF 。我可以在 C# 中编写一个函数来查询我们的关系数据库并返回包含用户选择的产品的所有订单。但为了做到这一点,我需要将用户选择的所有维度数据提供给 UDF。我还需要 UDF 返回计算值,以便将其作为计算成员的结果输出。那可能吗?如果是,如何?microsoft 提供的示例仅包含一个小的确定性字符串函数作为 UDF。

4

1 回答 1

0

这是我自己的结果:

这似乎是可能的,尽管有局限性。该类Microsoft.AnalysisServices.AdomdServer.Context可以为您提供每个层次结构的 currentMember,但这不适用于 Excel-Style-Subselects。它要么包含单个成员,要么包含 AllMember。

另一种选择是使用 dmv 获取 MDX 查询SELECT * FROM $System.DISCOVER_SESSIONS。该视图上会有一个列,其中包含给定会话的最后一个 mdx 查询。但是,为了不覆盖您自己的最后一个查询,您将不需要使用当前连接,而是打开一个新连接。session id 可以通过Microsoft.AnalysisServices.AdomdServer.Context.CurrentConnection.SessionID.

第二种方法适用于我们的用例。它不允许你处理轴,因为 udf 函数有一个单元格范围,但你不知道你在哪个单元格中。如果你们中的任何人知道最后一点,请告诉我。谢谢!

于 2013-04-09T15:57:51.293 回答