以下对“我的维度”的MDX查询将根据维度中的成员数返回999/99999值。
WITH MEMBER [Measures].[MaxKey] AS
MAX(
[Fare Media].[Fare Media Id].ALLMEMBERS
, [Fare Media].[Fare Media Id].currentmember.MEMBER_KEY)
SELECT
{[Measures].[MaxKey]} ON 0
FROM
[SPCube]
这给了我一个99999的结果,尽管在实际中,我的值在我的维度中大于这个,并且成员总数是640,000。
对多维数据集中的另一个维度应用相同的逻辑,如下所示:
WITH MEMBER [Measures].[MaxKey] AS
MAX(
[Sales Period].[Sales Period Id].ALLMEMBERS
, [Sales Period].[Sales Period Id].currentmember.MEMBER_KEY)
SELECT
{[Measures].[MaxKey]} ON 0
FROM
[SPCube]
我得到的答案是999作为最大值,但成员总数为675,其中Id大于999。
我尝试了应用StrToValue函数,但后来发现了一个错误:
预期会出现MDX表达式。指定了一个空表达式。
发布于 2015-02-02 14:30:22
这能让你感觉更接近你的期望吗?
WITH
SET [X] AS {[Fare Media].[Fare Media Id].MEMBERS}
MEMBER [Measures].[KeyMeasure] AS
[Fare Media].[Fare Media Id].currentmember.MEMBER_KEY
MEMBER [Measures].[MaxKey] AS
MAX([X],[Measures].[KeyMeasure])
SELECT
[Measures].[MaxKey] ON 0
FROM
[dsvAfmsDWH_ServiceProviderCube]
然后你可以合并:
WITH
SET [X] AS {[Fare Media].[Fare Media Id].MEMBERS}
MEMBER [Measures].[MaxKey] AS
MAX([X],[Fare Media].[Fare Media Id].currentmember.MEMBER_KEY)
SELECT
[Measures].[MaxKey] ON 0
FROM
[dsvAfmsDWH_ServiceProviderCube]
set
X是在脚本的其余部分之前完成的,因此像这样分割它应该会有帮助。自定义集总是在自定义度量之前进行评估,所以现在该度量知道要使用什么设置。
编辑
因为我看不见你的立方体,所以我在AdvWrks
上做了一点测试
这是脚本中错误的简化版本:
WITH
MEMBER [Measures].[x] AS
[Customer].[Customer].CurrentMember.Member_Key
SELECT
{[Measures].[x]} ON 0
,[Customer].[Customer].CurrentMember ON 1
FROM [Adventure Works];
这将返回默认成员“所有客户”,我认为它将对应于您的9999?
如果我扩展到类似于我的第一个表达式,那么我们就有了以下内容:
WITH
SET [s] AS
[Customer].[Customer].MEMBERS
MEMBER [Measures].[KeyMeasure] AS
[Customer].[Customer].CurrentMember.Member_Key
MEMBER [Measures].[maxX] AS
Max
(
[s]
,[Measures].[KeyMeasure]
)
SELECT
[Measures].[maxX] ON 0
FROM [Adventure Works];
它返回一个更好的结果,没有添加到注释中的错误。
如果我将第二个脚本简化为相当于第二个脚本,那么我有以下内容:
WITH
SET [s] AS {[Customer].[Customer].MEMBERS}
MEMBER [Measures].[maxX] AS
Max
(
[s]
,[Customer].[Customer].CurrentMember.Member_Key
)
SELECT
[Measures].[maxX] ON 0
FROM [Adventure Works];
同样,结果也没有问题:
重要
层次结构[Fare Media].[Fare Media Id]
的关键属性是什么数据类型?如果它不是数字,那么MAX
就不能工作。
https://stackoverflow.com/questions/28275528
复制