2013-07-17 110 views
2

我对MDX这个深度比较陌生,但这里是我的两难境地。我的目标是使用.Net存储过程实现计算成员。计算(XIRR)将基于一组现金流量日期和现金流量。理想情况下,这将是我的多维数据集中的一个计算结果,可作为Excel/Browser用户的衡量指标。MDX被计算成员SubCube

所以开始简单我只是试图实现我自己的COUNT计算成员/度量(甚至不使用.Net)来说根据当前上下文计算给定维度中的成员数量。因此,让我们说我有一个维度客户与客户ID密钥。假设我的数据库中共有100个客户。因此,Count(Customer.CustomerId.AllMembers)将为100.现在,当您开始使用浏览器并在Customer.CustomerId上说过滤器时。 & 1,Customer.CustomerId。 & 2(客户ID为1和2)我希望我的计数成员返回2,但它返回的总数为100。我曾尝试使用存在。我相信有一些我根本不了解的东西。

希望这是有道理的,非常感谢来自对SSAS/MDX和计算有很好理解的人的帮助。提前致谢。

马蒂

回答

1

你可能有一些问题,在这里,我没有当我试图做类似的事情。

您的计算成员不尊重客户端子选择,这是正常的。理论上你会做的是创建一个动态集合,然后在计算的成员中使用它来强制维度计数在您的过滤器创建的子多维数据集的上下文中进行评估。磨沙在这里有一个很好的文章: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个bug,因此上面的代码,这将可能在本地工作得很好,会杀死一个生产魔方。这对我来说是一个令人兴奋的学习经历。

看看你是否可以得到任何解决方法,我不能。

我能得到我想要的东西,但我不得不创建查询范围的动态集合为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] 

让我们知道您的身体情况如何。

+0

谢谢你指点我正确的方向。我现在正在使用一个解决方案,现在我使用了与我的XIRR(现金流)所需的度量关联的维度上的动态命名集。在我的计算指标中结合使用EXISTING可以为我提供准确的现金流量。我最终会想找出一个更好的解决方案,以处理用于Filter/SubCube的其他维度或其他维度的现金流量。但现在这会起作用。非常感谢你!! – kapacity