关于 ssas:MDX 计算成员子立方体

MDX Calculated Member SubCube

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

所以从简单的开始,我只是想实现我自己的 COUNT 计算成员/度量(甚至不使用 .Net)来根据当前上下文计算给定维度中的成员数。因此,假设我有一个带有客户 ID 键的维度客户。假设我的数据库中共有 100 个客户。所以 Count(Customer.CustomerId.AllMembers) 将是 100。现在,当您开始使用浏览器并说对 Customer.CustomerId 进行过滤时。


您可能在这里遇到了一些问题,我在尝试做类似的事情时遇到了。

您的计算成员不遵守客户子选择,这是正常的。理论上您要做的是创建一个动态集,然后在计算成员中使用它来强制在您的过滤器创建的子立方体的上下文中评估维度计数。 Mosha在这里有一篇很好的文章:http://sqlblog.com/blogs/mosha/archive/2007/08/25/mdx-in-katmai-dynamic-named-sets.aspx

所以你最终会得到类似的东西:

1
2
3
4
5
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 查询的一部分,我无法将它创建为多维数据集对象:

1
2
3
4
5
6
7
8
9
10
11
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]

让我们知道你的进展情况。