Dynamic 如何为计算成员构建动态MDX公式?
我正在尝试创建一个计算过的成员,以获得截至上周的总结。 获取周值没有问题(我需要它是两位数字,即“05”,因此添加100-1) --这是意料之中的事Dynamic 如何为计算成员构建动态MDX公式?,dynamic,mdx,Dynamic,Mdx,我正在尝试创建一个计算过的成员,以获得截至上周的总结。 获取周值没有问题(我需要它是两位数字,即“05”,因此添加100-1) --这是意料之中的事 member [Measures].SalesUpToWeek as 'strtomember( "aggregate(periodstodate([Dim].[2015],[Dim].[2015].[" + ([Measures].Week) + "]),[Measures].[Sales])")' 我得到了文本值 aggrega
member [Measures].SalesUpToWeek as
'strtomember(
"aggregate(periodstodate([Dim].[2015],[Dim].[2015].[" + ([Measures].Week) + "]),[Measures].[Sales])")'
我得到了文本值
aggregate(
periodstodate([Dim].[2015],[Dim].[2015].[25])
,[Measures].[Sales]
)
我需要的是这个MDX
计算的值
所有其他尝试最终都会出现语法错误。举个例子
member [Measures].SumToWeek as
'aggregate(
periodstodate(
[Dim].[2015],[Dim].[2015].[' + strtomember([Measures].Week) + '])
,[Measures].[Sales])'
错误
第2行第0列出现词法错误。遇到:在“[\n”之后
有什么想法吗?这是你的错误:
strtomember([Measures].Week)
假设[Measures].Week
等于15,则您尝试执行以下操作:
strtomember(15)
因此,上面有两个错误:
strotmember
函数放在表示该成员的字符串周围:
MEMBER[Measures].SumToWeek AS
'aggregate(
periodstodate(
[Dim].[2015],
strtomember('[Dim].[2015].[' + [Measures].Week + ']', constrained)
)
,[Measures].[Sales])'
以下是函数strotmember的MSDN参考:strotmember
:编辑 查看前一篇帖子:()
…在将成员输入新度量值之前,您需要创建该成员,因此:
WITH
MEMBER [Measures].[Week] AS
Right
(
Str(Int(99 + Datepart('ww',Now())))
,2
)
MEMBER [Dim].[2015].[TargetWeek] AS
StrToMember
(
'[Dim].[2015].[' + [Measures].Week + ']'
,constrained
)
MEMBER [Measures].SumToWeek AS
Aggregate
(
PeriodsToDate
(
[Dim].[2015]
,[Dim].[2015].[TargetWeek]
)
,[Measures].[Sales]
)
Edit2 好的,如果您希望使用
PeriodsToDate
,那么我们需要使用stroset
,然后在函数中使用此集合中的成员。这是因为自定义成员失去了家庭关系,因此在某些mdx
函数中没有用处。
以下是AdvWrks
中的工作脚本,说明了我建议的方法:
WITH
MEMBER [Measures].[Wk] AS
Right
(
Str(Int(99 + Datepart('ww',Now())))
,2
)
SET [TargetWeek] AS
StrToSet
(
'[Date].[Calendar Weeks].[Calendar Week].[Week ' + cstr([Measures].[Wk]) + ' CY 2007]'
)
MEMBER [Measures].[SumToWeek] AS
Aggregate
(
PeriodsToDate
(
[Date].[Calendar Weeks].[Calendar Year]
,[TargetWeek].item(0).item(0)
)
,([Measures].[Internet Sales Amount])
)
SELECT
{[Measures].[SumToWeek]} ON 0,
[Product].[Product Categories].[All] ON 1
FROM [Adventure Works];
这是您的错误:
strtomember([Measures].Week)
假设[Measures].Week
等于15,则您尝试执行以下操作:
strtomember(15)
因此,上面有两个错误:
strotmember
函数放在表示该成员的字符串周围:
MEMBER[Measures].SumToWeek AS
'aggregate(
periodstodate(
[Dim].[2015],
strtomember('[Dim].[2015].[' + [Measures].Week + ']', constrained)
)
,[Measures].[Sales])'
以下是函数strotmember的MSDN参考:strotmember
:编辑 查看前一篇帖子:()
…在将成员输入新度量值之前,您需要创建该成员,因此:
WITH
MEMBER [Measures].[Week] AS
Right
(
Str(Int(99 + Datepart('ww',Now())))
,2
)
MEMBER [Dim].[2015].[TargetWeek] AS
StrToMember
(
'[Dim].[2015].[' + [Measures].Week + ']'
,constrained
)
MEMBER [Measures].SumToWeek AS
Aggregate
(
PeriodsToDate
(
[Dim].[2015]
,[Dim].[2015].[TargetWeek]
)
,[Measures].[Sales]
)
Edit2 好的,如果您希望使用
PeriodsToDate
,那么我们需要使用stroset
,然后在函数中使用此集合中的成员。这是因为自定义成员失去了家庭关系,因此在某些mdx
函数中没有用处。
以下是AdvWrks
中的工作脚本,说明了我建议的方法:
WITH
MEMBER [Measures].[Wk] AS
Right
(
Str(Int(99 + Datepart('ww',Now())))
,2
)
SET [TargetWeek] AS
StrToSet
(
'[Date].[Calendar Weeks].[Calendar Week].[Week ' + cstr([Measures].[Wk]) + ' CY 2007]'
)
MEMBER [Measures].[SumToWeek] AS
Aggregate
(
PeriodsToDate
(
[Date].[Calendar Weeks].[Calendar Year]
,[TargetWeek].item(0).item(0)
)
,([Measures].[Internet Sales Amount])
)
SELECT
{[Measures].[SumToWeek]} ON 0,
[Product].[Product Categories].[All] ON 1
FROM [Adventure Works];
[Measures].Week
已经是一个字符串实体。您不需要在其周围放置strotmember
。相反,您应该将其置于动态定义的字符串之外
with
Member [Measures].Week as
"right(str(int(99+datepart ( ''ww'', Now()))),2)"
member [Measures].SumToWeek as
aggregate(
periodstodate(
[Dim].[2015],
StrToMember("[Dim].[2015].[" + [Measures].Week + "]")
)
,
[Measures].[Sales]
)
[Measures].Week
已经是一个字符串实体。您不需要在其周围放置strotmember
。相反,您应该将其置于动态定义的字符串之外
with
Member [Measures].Week as
"right(str(int(99+datepart ( ''ww'', Now()))),2)"
member [Measures].SumToWeek as
aggregate(
periodstodate(
[Dim].[2015],
StrToMember("[Dim].[2015].[" + [Measures].Week + "]")
)
,
[Measures].[Sales]
)
我在Pentaho论坛上得到了一个有趣的建议,建议我写一篇很好的博客文章,可以写一个优雅的解决方案:
Thks我在Pentaho论坛上得到了一个有趣的建议,建议我写一篇很好的博客文章,可以写一个优雅的解决方案:
Thks我在发布之前已经尝试了这两个建议:)Whytheq:语法错误Sourav_Agasti:没有函数匹配签名“+”,我在发布之前已经尝试了这两个建议:)Whytheq:语法错误Sourav_Agasti:没有函数匹配签名“+”,Hi Sourav-这将不起作用。我将在今天晚些时候添加一个完整的编辑到我的帖子中-使用explanation and working
AdvWrks
示例。嗨,苏拉夫-这不起作用。我今天晚些时候会在我的帖子中添加完整的编辑内容,包括解释和工作AdvWrks
示例。我会很快在我的答案中添加Edit2
,因为我想我现在知道发生了什么:这是一个有趣的案例。我会很快在m中添加Edit2
我想我现在知道发生了什么,所以我回答:这是一个有趣的案例。非常好-羞耻currentdatemember
仅是mondrian
而已。非常好-羞耻currentdatemember
仅是mondrian
而已。