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