2

我对 MDX 相对较新(刚刚在订购一本书的过程中)并且在创建计算度量时有所突破,该度量应该根据一组日期范围(来自我的时间维度),应该由另一个维度的属性过滤。不幸的是,我似乎陷入了困境,看不到明确的出路。我查看了其他类似的问题,但没有看到任何尝试做同样的事情,只有单维度测量。

我有一个测量组,其中包含物理测量SourceMeasure

我有一个名为 的时间维度,[Time]我想用它来指定我的计算范围。这与我的日期键与上述度量组有关。

我有一个名为 的 Account 维度,[Dim Account]其中包含两个日期属性:[Account Start Date][Account End Date]。这通过帐户 ID 与上述度量值组相关。

我想要做的是将[Time]维度过滤到基于[Account Start Date]and的范围内,并返回为该帐户指定的期间[Account End Date]的总和。[SourceMeasure]

显然,这对于每个帐户都会有所不同,因此不应聚合,除非按[Dim Account]维度进行聚合(如果未应用,可能返回 0 或 null)。

下面的示例测试表达式,由于 FORMAT_STRING 语法错误(根据 MDX Studio),目前无法正常工作。

WITH 
  MEMBER [Measures].[LifetimeMeasure] AS 
    Sum
    (
      {
          StrToMember
          (
        "[Time].[Date].&[" 
            + Format([Dim Account].[Account Start Date].CurrentMember.MemberValue,"yyyy-MM-ddThh:mm:ss")
            + "]"
          )
        : 
          StrToMember
          (
            "[Time].[Date].&[" 
            + Format([Dim Account].[Account End Date].CurrentMember.MemberValue,"yyyy-MM-ddThh:mm:ss")
            + "]"
          )
      }
     ,[Measures].[SourceMeasure]
    ) 
SELECT 
{
    [Measures].[LifetimeMeasure]
    ,[Measures].[SourceMeasure]
}
ON COLUMNS
,{
    [Dim Account].[Account].[AccountName]
} 
ON ROWS
FROM 
    [MyCube]

我尝试了几种不同的方法(SCOPE、过滤器、IIF),但每次我似乎回到同一个症结点 - 如何根据 [Dim Account] 开始和结束的值过滤 [时间] 维度日期。

现在,可能是我完全误解了维度之间的关系如何工作和/或 SSAS 如何计算计算的度量,但我还没有达到我确定要寻找什么的水平,所以我我在转圈。

我正在尝试做的事情是否可能,如果是这样,是否有任何关于在哪里寻找帮助我找出哪里出错的指示?我是否应该改用计算维度?

我希望这一切都有意义,让我知道我是否遗漏了什么或者是否需要更多细节。我正在使用MDX Studio进行测试。

4

1 回答 1

0

我通过将 CONSTRAINED 标志添加到 StrToMember 函数来发现错误。

我的 [Time] 维度的日期条目似乎默认为时间“00:00:00”,而我的 [Dim Account] 维度的日期条目默认为“12:00:00”。它看起来像 24 小时制和 12 小时制之间的不匹配。我在 [Dim Account] 维度上的日期字段被标记为“常规”,而不是“日期”,因为该维度不是自然时间维度。我认为这可能是导致不匹配的原因。

为了暂时解决这个问题,我从我的格式表达式中删除了时间格式,并在搜索根本原因时将“00:00:00”附加到字符串中。解决后我会更新。

更新:不匹配的原因不是维度,而是我在StrToMember表达式中使用的格式字符串。MSDN 上没有记录,但以下字符串输出 12 小时时间格式:

"yyyy-mm-ddThh:mm:ss"

虽然此字符串输出 24 小时时间格式:

"yyyy-mm-ddTHH:mm:ss"
于 2012-11-15T15:10:19.323 回答