【问题标题】:Trouble creating MDX set/calculated member创建 MDX 集/计算成员时遇到问题
【发布时间】:2016-06-23 18:43:27
【问题描述】:

我是 MDX 新手,正在努力创建:

1) 引用动态日期的静态集
2) 一个静态集合可以引用的新计算成员

我已经能够在查询范围命令中检索我想要的值,如下所示:

    WITH MEMBER [Time].[Date].[Yesterday] 
    AS VBAMDX.Format(VBAMDX.Now()-1,"MM-dd-yyyy")
    SELECT [Time].[Date].[Yesterday]  ON COLUMNS 
    FROM
    [Test Cube];

但这并不能转化为 Visual Studio 中的函数。我希望能够制作如下所示的集合:

CREATE SET CurrentCube.[Test]
AS {[Time].[Date].&[20160613] : [Time].[Date].&[20160620]},
DISPLAY_FOLDER = 'Test' ;

...除了将昨天的日期作为范围开头的成员。 如果不可能,或者我想知道如何在时间维度中创建一个新的计算度量。语法全错,但概念被捕获:

CREATE MEMBER CURRENTCUBE.[Time].[Date].[YesterDay]
AS VBAMDX.Format(VBAMDX.Now()-1,"MM-dd-yyyy"),
FORMAT_STRING = "MM-dd-yyy";

非常感谢这里的任何帮助!!!

编辑:应该提到 LastChild() 和 Tail()/NonEmptyCrossJoin() 不适用于我的数据集,因为时间维度填充了直到月底的日期。但是,所有度量(即 GRS)都是空的,所以如果有办法让它选择 LastChild() 日期,该日期已经用数据更新了就可以了!

【问题讨论】:

    标签: visual-studio mdx cube


    【解决方案1】:

    这些语法有帮助吗?如果格式如下 'yyyyMMdd'

    WITH 
      MEMBER [Measures].[Key for Today] AS 
        Format
        (
          Now()
         ,'yyyyMMdd'
        ) 
      MEMBER [Measures].[Today string] AS 
          '[Time].[Date].[Date].&[' + [Measures].[Key for Today]
        + ']' 
      SET [Today] AS 
        StrToMember
        (
          [Measures].[Today string]
         ,constrained
        ) 
    

    我认为以上内容相对容易转化为 CREATE 脚本:

    CREATE MEMBER CURRENTCUBE.Measures.[Key for Today] AS 
    'Format(Now(),'yyyyMMdd')';
    
    CREATE MEMBER CURRENTCUBE.Measures.[Today string] AS 
    ''[Time].[Date].[Date].&[' + [Measures].[Key for Today] + ']'';
    
    CREATE SET CURRENTCUBE.[Today] AS 'StrToMember([Measures].[Today string],constrained)' 
    

    如果你有类似上面的东西,那么下面就容易多了......

    SET [TodayLstYr] AS 
        ParallelPeriod
        (
          [Date].[Date - Calendar Month].[Calendar Year]
         ,1
         ,[Today]
        ) 
      SET [ThisYear] AS 
        {
            Ancestor
            (
              [Today]
             ,[Date].[Month Calendar].[Calendar Day]
            ).Item(0)
          : 
            [Today]
        } 
      ...
      ...
    

    正方体

    以下方法比在多维数据集脚本中创建成员和度量要高效得多。

    要在您的多维数据集中包含Today,请将“今天”列添加到您的日期表中。列基于这样的表达式,名称为DW Today

    case when convert(carchar(8), FullDateAlternateKey, 112) =
              convert(carchar(8), GetDate(), 112) 
      then 'Yes'
      else 'no' 
    end
    

    然后在 VS 中将 Date 维度表的新列拖到属性中。保持与键属性的关系不变 - 灵活。


    查找最后一个日期成员的数据:

    TAIL(
      NONEMPTY(
        [Time].[Date].[Date].MEMBERS
      )
    )
    

    【讨论】:

    • 语法有道理!虽然应该在原始问题中提到 - 问题不是让单个查询获得我想要的日期范围,而是在多维数据集的计算中插入一个永久集,以便用户始终可以按昨天的日期进行过滤。据我所知,with 子句不适用于 Visual Studio 中的 CREATE SET CurrentCube 或 CREATE MEMBER CurrentCube 命令。
    • @HouseHay 最好在您的日期维度中添加一个 IsPastDate 标志作为新属性。如果你想使用Create,那么上面的翻译应该很容易吧?
    猜你喜欢
    • 2011-01-05
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多