无法创建MDX集/计算成员

时间:2016-06-23 18:43:27

标签: visual-studio mdx cube

我是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()日期,该日期已经用可以解决问题的数据进行更新!

1 个答案:

答案 0 :(得分:0)

这种语法有帮助吗?如果格式化为'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,请在Date表中添加“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
  )
)