MDX 计算脚本:元组集和范围存在语法错误
MDX Calculation script : syntax error with tuple set and scope
我正在尝试在多维数据集的 MDX 计算中设计一个计算,以便在使用维度的特定值时,度量返回的 behavior/values 会根据其他值更改为其他值来自相同的维度属性。
这是我的代码示例:
CREATE SET CURRENTCUBE.[NonBreakDownIndicators]
AS {([Indicator Label].[Indicator].MEMBERS - [Indicator Label].[Indicator].&[Indicator Daily Diff])}
;
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
//SCOPE([NonBreakDownIndicators]);
THIS = ([Indicator Label].[Indicator].&[SensiDiv],[Measures].[Daily Diff Unit]);
//THIS = [Measures].[Daily Diff Unit];
//END SCOPE;
END SCOPE;
我们在这里可以看到,我想创建一个具有某些维度 'Indicator' 值的元组,除了一个。我在这个维度属性中有 3000+ 个值。
接下来,当一个用户select,除其他外,属性Indicator,在selected值中,一个是'Indicator Daily Diff',我想改变返回的值度量 'Value Unit',而不是从 'Daily Diff Unit' 获取值。
最后一项措施已经过测试并且有效。
到目前为止,我已经设法用当前未注释的代码得到了结果。但是正如您所见,这仅适用于 'Indicator' 维度的 1 个值,而我需要使其适用于数千个维度。
我已尝试使用子范围,如您在注释代码中所见,但出现此异常:
An arbitrary shape of sets is not allowed in the current context.
我还尝试在 THIS 语句中使用元组集 [NonBreakDownIndicators],如下所示:
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
THIS = ([NonBreakDownIndicators],[Measures].[Daily Diff Unit]);
END SCOPE;
但是我最终会在我的多维数据集中得到一个 'null' 值(不为空或不显示,单元格填充为空)。
我不是 SSAS 专家,我主要做的事情是希望获得一些关键字来查找,但到目前为止,互联网博客上关于我的主题的信息很少,我可以找到我周围任何有足够知识的人关于这项技术。
有没有人知道我如何在不必指定 MDX 的每个指标的情况下实现这一点?
PS: 我没有办法解决这个问题。我的客户明确要求将此 'Daily Diff Unit' 显示为指标,以便只有一个指标,以及他们需要的尽可能多的指标。
编辑
我做了这个更改,确实它解决了 'arbitrary shape of sets' 错误。但是现在查询时我没有得到任何数字。
我可以在其他 'Indicators' 上看到其他数字,但是 [Indicator Daily Diff] 指标没有返回单元格。我现在正在使用它:
CREATE SET CURRENTCUBE.[NonBreakDownIndicators]
AS {([Indicator Label].[Indicator].[Indicator].MEMBERS - [Indicator Label].[Indicator].&[Indicator Daily Diff])}
;
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
SCOPE([NonBreakDownIndicators]);
THIS = ([NonBreakDownIndicators],[Measures].[Daily Diff Unit]);
END SCOPE;
END SCOPE;
尝试将设置更改为以下内容,看看是否可以避免任意形状错误:
CREATE SET CURRENTCUBE.[NonBreakDownIndicators]
AS {([Indicator Label].[Indicator].[Indicator].MEMBERS - [Indicator Label].[Indicator].&[Indicator Daily Diff])}
;
您可以在该集合中拥有单个级别和范围的随机成员。但是你不能在那个集合上有多个级别和范围的随机成员。上面的更改从集合中删除了所有成员,我认为这应该确保集合中的所有成员都处于同一级别。
那我试试:
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
THIS = ([Measures].[Daily Diff Unit]);
END SCOPE;
或者可能:
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
THIS = SUM([NonBreakDownIndicators],[Measures].[Daily Diff Unit]);
END SCOPE;
(代题作者发表).
根据 Greg 的建议,这是完美满足我需求的 MDX 代码:
CREATE DYNAMIC SET CURRENTCUBE.[NonBreakDownIndicators]
AS {(
[Indicator Label].[Indicator].[Indicator].MEMBERS
- [Indicator Label].[Indicator].&[Indicator Daily Diff]
- [Indicator Label].[Indicator].&[Params Variation]
- [Indicator Label].[Indicator].&[Secondary Variation]
- [Indicator Label].[Indicator].&[Primary Variation]
- [Indicator Label].[Indicator].&[Expired Variation]
)};
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
THIS = SUM([NonBreakDownIndicators],[Measures].[Daily Diff Unit]);
END SCOPE;
SCOPE([Measures].[Value k¤], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
THIS = SUM([NonBreakDownIndicators],[Measures].[Daily Diff k¤]);
END SCOPE;
它甚至允许我拒绝其他度量值组的行为(简单值、计数器值等)。它支持当前使用的指标并过滤掉其他指标。
我正在尝试在多维数据集的 MDX 计算中设计一个计算,以便在使用维度的特定值时,度量返回的 behavior/values 会根据其他值更改为其他值来自相同的维度属性。
这是我的代码示例:
CREATE SET CURRENTCUBE.[NonBreakDownIndicators]
AS {([Indicator Label].[Indicator].MEMBERS - [Indicator Label].[Indicator].&[Indicator Daily Diff])}
;
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
//SCOPE([NonBreakDownIndicators]);
THIS = ([Indicator Label].[Indicator].&[SensiDiv],[Measures].[Daily Diff Unit]);
//THIS = [Measures].[Daily Diff Unit];
//END SCOPE;
END SCOPE;
我们在这里可以看到,我想创建一个具有某些维度 'Indicator' 值的元组,除了一个。我在这个维度属性中有 3000+ 个值。
接下来,当一个用户select,除其他外,属性Indicator,在selected值中,一个是'Indicator Daily Diff',我想改变返回的值度量 'Value Unit',而不是从 'Daily Diff Unit' 获取值。
最后一项措施已经过测试并且有效。
到目前为止,我已经设法用当前未注释的代码得到了结果。但是正如您所见,这仅适用于 'Indicator' 维度的 1 个值,而我需要使其适用于数千个维度。
我已尝试使用子范围,如您在注释代码中所见,但出现此异常:
An arbitrary shape of sets is not allowed in the current context.
我还尝试在 THIS 语句中使用元组集 [NonBreakDownIndicators],如下所示:
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
THIS = ([NonBreakDownIndicators],[Measures].[Daily Diff Unit]);
END SCOPE;
但是我最终会在我的多维数据集中得到一个 'null' 值(不为空或不显示,单元格填充为空)。
我不是 SSAS 专家,我主要做的事情是希望获得一些关键字来查找,但到目前为止,互联网博客上关于我的主题的信息很少,我可以找到我周围任何有足够知识的人关于这项技术。
有没有人知道我如何在不必指定 MDX 的每个指标的情况下实现这一点?
PS: 我没有办法解决这个问题。我的客户明确要求将此 'Daily Diff Unit' 显示为指标,以便只有一个指标,以及他们需要的尽可能多的指标。
编辑
我做了这个更改,确实它解决了 'arbitrary shape of sets' 错误。但是现在查询时我没有得到任何数字。
我可以在其他 'Indicators' 上看到其他数字,但是 [Indicator Daily Diff] 指标没有返回单元格。我现在正在使用它:
CREATE SET CURRENTCUBE.[NonBreakDownIndicators]
AS {([Indicator Label].[Indicator].[Indicator].MEMBERS - [Indicator Label].[Indicator].&[Indicator Daily Diff])}
;
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
SCOPE([NonBreakDownIndicators]);
THIS = ([NonBreakDownIndicators],[Measures].[Daily Diff Unit]);
END SCOPE;
END SCOPE;
尝试将设置更改为以下内容,看看是否可以避免任意形状错误:
CREATE SET CURRENTCUBE.[NonBreakDownIndicators]
AS {([Indicator Label].[Indicator].[Indicator].MEMBERS - [Indicator Label].[Indicator].&[Indicator Daily Diff])}
;
您可以在该集合中拥有单个级别和范围的随机成员。但是你不能在那个集合上有多个级别和范围的随机成员。上面的更改从集合中删除了所有成员,我认为这应该确保集合中的所有成员都处于同一级别。
那我试试:
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
THIS = ([Measures].[Daily Diff Unit]);
END SCOPE;
或者可能:
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
THIS = SUM([NonBreakDownIndicators],[Measures].[Daily Diff Unit]);
END SCOPE;
(代题作者发表).
根据 Greg 的建议,这是完美满足我需求的 MDX 代码:
CREATE DYNAMIC SET CURRENTCUBE.[NonBreakDownIndicators]
AS {(
[Indicator Label].[Indicator].[Indicator].MEMBERS
- [Indicator Label].[Indicator].&[Indicator Daily Diff]
- [Indicator Label].[Indicator].&[Params Variation]
- [Indicator Label].[Indicator].&[Secondary Variation]
- [Indicator Label].[Indicator].&[Primary Variation]
- [Indicator Label].[Indicator].&[Expired Variation]
)};
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
THIS = SUM([NonBreakDownIndicators],[Measures].[Daily Diff Unit]);
END SCOPE;
SCOPE([Measures].[Value k¤], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
THIS = SUM([NonBreakDownIndicators],[Measures].[Daily Diff k¤]);
END SCOPE;
它甚至允许我拒绝其他度量值组的行为(简单值、计数器值等)。它支持当前使用的指标并过滤掉其他指标。