我对 MDX 的这个深度还比较陌生,但这是我的困境。我的目标是使用 .Net 存储过程实现计算成员。计算 (XIRR) 将基于一组现金流量日期和现金流量。理想情况下,这将是我的多维数据集中的计算,可作为 Excel/浏览器用户的度量。
因此,为了简单起见,我只是尝试实现我自己的 COUNT 计算成员/度量(甚至不使用 .Net)来计算基于当前上下文的给定维度中的成员数量。因此,假设我有一个带有客户 ID key 的维度客户。假设我的数据库中共有 100 个客户。所以 Count(Customer.CustomerId.AllMembers) 将为 100。现在,当您开始使用浏览器并在 Customer.CustomerId.&1、Customer.CustomerId.&2(客户 ID 1 和 2)上说过滤器时,我希望我的计数计算成员返回 2 但它返回总数 100。我试过使用存在。我确信有些事情我根本还不理解。
希望这是有道理的,非常感谢对 SSAS/MDX 和计算有很好理解的人的任何帮助。提前致谢。
马蒂
最佳答案
你可能在这里遇到了一些问题,我在尝试做类似的事情时遇到过。
您的计算成员不支持客户端子选择,这是正常的。理论上你要做的是创建一个动态集,然后在计算成员中使用它来强制在你的过滤器创建的子多维数据集的上下文中评估维度计数。 Mosha 在这里有一篇很好的文章:http://sqlblog.com/blogs/mosha/archive/2007/08/25/mdx-in-katmai-dynamic-named-sets.aspx
所以你最终会得到这样的东西:
CREATE DYNAMIC SET CurrentCube.Customers AS
EXISTING(Customer.CustomerId.CHILDREN);
CREATE MEMBER CurrentCube.Measures.CustomerCount AS
Customers.COUNT
现在您遇到的真正问题是 SSAS 中的错误 https://connect.microsoft.com/SQLServer/feedback/details/484865/calcuated-member-with-a-reference-to-dynamic-named-set-kills-the-cubes-performance所以上面的代码,可能会在本地运行得很好,会杀死一个生产多维数据集。这对我来说是一次激动人心的学习经历。
看看您是否可以使用任何变通方法,我做不到。
我能够得到我想要的,但我必须创建查询范围的动态集作为 MDX 查询的一部分,我无法将其创建为立方体对象:
WITH DYNAMIC SET Customers AS
EXISTING(Customer.CustomerId.CHILDREN);
MEMBER Measures.CustomerCount AS
Customers.COUNT
SELECT
Measures.CustomerCount
ON COLUMNS
FROM [Cube]
WHERE Customer.CustomerId.&[1]
让我们知道您的进展情况。
关于ssas - MDX 计算成员子多维数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17710436/