我对MDX这个深度相对较新,但这是我的两难选择。我的目标是使用.Net存储过程实现计算成员。计算(XIRR)将基于一组现金流量日期和现金流量。理想情况下,这将是我的多维数据集中的计算,可用作Excel /浏览器用户的度量。
因此,为了简单起见,我只是尝试实现自己的COUNT计算成员/度量(甚至不使用.Net)来根据当前上下文计算给定维度中的成员数。因此,假设我有一个带有客户ID密钥的维度Customer。让我们说我的数据库中总共有100个客户。因此,Count(Customer.CustomerId.AllMembers)将为100.现在,当您开始使用浏览器并在Customer.CustomerId。& 1,Customer.CustomerId。& 2(客户ID 1和2)上说过滤器时,我希望我的count计算成员返回2,但它返回总计100。我试过使用存在。我确信有些东西我根本就不理解。
希望这是有道理的,非常感谢那些对SSAS / MDX和计算有深入了解的人的帮助。提前谢谢。
玛蒂
答案 0 :(得分:2)
你可能在这里遇到一些问题,当我尝试做类似的事情时我做了。
您的计算成员未遵守客户端子选择,这是正常的。理论上你要做的是创建一个动态集,然后在计算成员中使用它来强制在你的过滤器创建的子多维数据集的上下文中计算维度计数。 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]
告诉我们你是如何上场的。