我尝试在多维数据集的MDX计算中设计计算,以便在使用维度的特定值时,度量返回的行为/值会更改为其他内容,具体取决于来自同一维度属性的其他值。
这是我的代码示例:
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;
我们在这里看到的是,我想要创建一个具有某种维度的元组'指标'值,除了一个。我在此维度属性中有3000多个值。
接下来,当用户选择属性指标时,以及所选择的值中,一个是“指标每日差异”,我想要更改度量返回的值'价值单位',而是从每日差异单位'中获取值。
这最后一项措施已经过测试和运作。
到目前为止,我已设法使用当前未注释的代码获得结果。但正如您所看到的,这仅适用于“指标”的1个值。维度,当我需要让它成千上万的时候。
我已尝试使用子注册表,您可以在评论代码中看到,但我得到了这个例外:
当前上下文中不允许使用任意形状的集。
我还尝试在THIS语句中使用元组集[NonBreakDownIndicators],如下所示:
SCOPE([Measures].[Value Unit], [Indicator Label].[Indicator].&[Indicator Daily Diff]);
THIS = ([NonBreakDownIndicators],[Measures].[Daily Diff Unit]);
END SCOPE;
然而,我最终会得到一个' null'我的立方体中的值(非空或未显示,单元格填充为null)。
我不是SSAS专家,而且我主要做的事情是希望找到一些关键词来查找,但到目前为止,互联网博客对我的主题几乎没有信息,我可以找到我周围的人对这项技术有足够的了解。
有没有人知道如何在不指定MDX的每一个指标的情况下实现这一目标?
PS:我不能用一个措施来解决这个问题。我的客户明确要求提供这个每日差异单元'显示为指标,以便只有一个度量,并且需要尽可能多的指标。
我做了这个改变,确实它解决了任意形状的套装'错误。但现在我在查询时没有得到任何数字。
我可以看到其他'指标'上的其他数字,但是[指标每日差异]指标没有返回任何单元格。我现在正在使用它:
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;
答案 0 :(得分:2)
尝试将设置更改为以下内容,以查看是否可以避免任意形状错误:
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;
答案 1 :(得分:0)
(代表问题作者发布)。
按照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;
它甚至允许我拒绝其他度量值组的行为(简单值,反价值等)。它支持当前使用的指标,并过滤掉其他指标。