将MDX计算的度量值转换为SSAS计算中的范围

将MDX计算的度量值转换为SSAS计算中的范围,ssas,mdx,business-intelligence,bids,Ssas,Mdx,Business Intelligence,Bids,我有一个度量,得到货币汇率的最后一个值。具有汇率的事实在维度usage中配置为time维度,并且是基于每日的。因此,使用MDX,我通过使用计算出的度量值,成功地获得了以我的货币表示的换算度量值: with member [Measures].[Calculated Comp Money In] as SUM([Dim Time].[Date Key].CurrentMember, [Measures].[Comp Money In]/[Measures].[Last Curre

我有一个度量,得到货币汇率的最后一个值。具有汇率的事实在维度usage中配置为time维度,并且是基于每日的。因此,使用MDX,我通过使用计算出的度量值,成功地获得了以我的货币表示的换算度量值:

with member [Measures].[Calculated Comp Money In] as 
SUM([Dim Time].[Date Key].CurrentMember,
        [Measures].[Comp Money In]/[Measures].[Last Currency Rate])
然后在where条款中,我会过滤掉我报告数据的货币

[Dim Currency].[Currency Key].&[200]

然而,我不喜欢的是我有一个[Measures].[Comp Money In],和一个[Measures].[Comp Money In Calculated]我可以在MDX中使用SCOPE函数吗,这样[Measures.[Comp Money in]是否配置了上述计算??然后我会将此计算添加到SSAS的计算部分。

如果您使用SSAS的企业版,则可以使用度量值do货币转换的度量值表达式属性。这在Analysis Services文档中没有很好的文档记录,但可以如下操作ws:您只使用一个度量(即
[Measures].[computed Comp Money In]
[Measures].[Comp Money In]
,并在该度量的“measure expression”属性中,输入您在上述问题中的表达式:

[Measures].[Comp Money In] / [Measures].[Last Currency Rate]
然后AnalysisServices引擎将为您处理其余部分。请注意,此表达式可能只包含您定义它的度量值、乘以或除以一个其他度量值(通常是汇率),而不包含其他内容

如果没有Analysis Services的企业版,则可以或多或少地将定义复制到计算成员:

若要继续使用现有度量值,请可能将度量值
[Measures].[Comp Money In]
重命名为
[Measures].[u Comp Money In]
(并在检查一切正常后使该度量值不可见)。然后定义与原始度量值同名的计算成员:

create member CurrentCube.[Measures].[Comp Money In] as 
       SUM([Dim Time].[Date Key].CurrentMember,
           [Measures].[_Comp Money In]/[Measures].[Last Currency Rate])
更好的方法是,使用
范围
计算度量值,并避免在一天内进行聚合:假设包含
[Measures].[Comp Money In]
的度量值组和包含
[Measures].[Last Currency Rate]
的度量值组之间的唯一公共维度是
[Dim Time]
这具有键属性
[Dim Time].[Date key]
,并且您的日期层次结构名为
[Dim Time].[Date]
,您可以使用

CREATE MEMBER CurrentCube.[Measures].[Comp Money In] as NULL;
SCOPE([Dim Time].[Date Key].[Date Key].members);
    [Measures].[Comp Money In] =
        [Measures].[_Comp Money In] / [Measures].[Last Currency Rate];
END SCOPE;
SCOPE([Dim Time].[Date].Members);
    [Measures].[Comp Money In] =
        Sum(EXISTING [Dim Time].[Date Key].[Date Key].members);
END SCOPE;

如果您使用SSAS的企业版,则可以使用度量值do货币转换的度量值表达式属性。这在Analysis Services文档中没有很好的说明,但其工作原理如下:您只使用一个度量值(即
[Measures].[computed Comp Money in]
[Measures].[Comp Money in]
,并在该度量的“度量表达式”属性中,输入您在上述问题中的表达式:

[Measures].[Comp Money In] / [Measures].[Last Currency Rate]
然后AnalysisServices引擎将为您处理其余部分。请注意,此表达式可能只包含您定义它的度量值、乘以或除以一个其他度量值(通常是汇率),而不包含其他内容

如果没有Analysis Services的企业版,则可以或多或少地将定义复制到计算成员:

若要继续使用现有度量值,请可能将度量值
[Measures].[Comp Money In]
重命名为
[Measures].[u Comp Money In]
(并在检查一切正常后使该度量值不可见)。然后定义与原始度量值同名的计算成员:

create member CurrentCube.[Measures].[Comp Money In] as 
       SUM([Dim Time].[Date Key].CurrentMember,
           [Measures].[_Comp Money In]/[Measures].[Last Currency Rate])
更好的方法是,使用
范围
计算度量值,并避免在一天内进行聚合:假设包含
[Measures].[Comp Money In]
的度量值组和包含
[Measures].[Last Currency Rate]
的度量值组之间的唯一公共维度是
[Dim Time]
这具有键属性
[Dim Time].[Date key]
,并且您的日期层次结构名为
[Dim Time].[Date]
,您可以使用

CREATE MEMBER CurrentCube.[Measures].[Comp Money In] as NULL;
SCOPE([Dim Time].[Date Key].[Date Key].members);
    [Measures].[Comp Money In] =
        [Measures].[_Comp Money In] / [Measures].[Last Currency Rate];
END SCOPE;
SCOPE([Dim Time].[Date].Members);
    [Measures].[Comp Money In] =
        Sum(EXISTING [Dim Time].[Date Key].[Date Key].members);
END SCOPE;

Hi@FrankPI我不能使用半加法,因为我是标准的。这也意味着我不能使用表达式。如果我使用了它,可能会容易得多:)关于你的答案,我试图避免创建[计算的公司货币]…在SSAS的计算部分是否可以改变实际[公司货币]的方式是生成的吗?@Mez我不确定它是否能够避免为此目的而使用未转换和转换的度量值,我发现更清楚的是,可以同时使用未转换和转换的度量值进行调试。我添加了一个建议,即使原始度量值对我的答案不可见,从最终用户的角度来看,很明显,未转换的度量值“确定项不应可见。@Mez您可以尝试类似以下操作:
SCOPE([Dim Time].[Date Key].[Date Key].[Date Key].[Members];[Measures].[Comp Money In]=[Measures].[Comp Money In]/[Measures].[Last Currency Rate];END SCOPE;
在计算脚本中。这是一个递归赋值,在某些情况下它可以工作,就像检测并避免无限递归一样。在某些情况下,它不会检测到它并失败。当它工作时和不工作时都没有记录。也许它现在可以工作,但将来在calc脚本中的一个小更改将触发它没有意识到这种情况。对我来说,这太危险了,无法部署。@Mez不,您可以将计算放入多维数据集计算脚本:只需将多维数据集中原始度量值
Comp Money In
重命名为,例如
\u Comp Money In
,然后在多维数据集计算脚本中添加一个计算度量值:
创建成员CurrentCube.[Measures].[Comp Money In]作为总和([Dim Time].[Date Key]。CurrentMember,[Measures].[Comp Money In]/[Measures].[Last Currency Rate])
。如果所有测试都已完成,请将度量值
.[U Comp Money In
设置为不可见。因此,从out访问多维数据集