![](/img/trans.png)
[英]SSAS, MDX, calculated member, pytd, reference on another value/month
[英]How to build a dynamic MDX formula for a calculated member?
我正在尝试创建一个计算所得的成员以得出上周的总和。 取得星期值没有问题(我需要为两位数,即'05',所以加100-1)
with
Member [Measures].Week as
'right(str(int(99+datepart ( ''ww'', Now()))),2)'
-效果正常
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)
因此,上面有两个错误:
也许尝试将strToMember
函数放在表示成员的字符串周围:
MEMBER[Measures].SumToWeek AS
'aggregate(
periodstodate(
[Dim].[2015],
strtomember('[Dim].[2015].[' + [Measures].Week + ']', constrained)
)
,[Measures].[Sales])'
这是功能strtomember
的MSDN参考:
https://msdn.microsoft.com/en-us/library/ms146022.aspx?f=255&MSPPError=-2147217396
编辑
看上一篇文章:( StrToMember不接受计算量度(mdx) )
...您需要先创建成员,然后再将其输入新度量,因此:
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
那么我们需要使用StrToSet
,然后在函数内使用此set中的成员。 这是因为自定义成员失去了家庭联系,因此在某些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
已经是一个字符串实体。 您无需在其周围放置StrToMember
。 相反,您应该将其放在动态定义的字符串之外。
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论坛上,我得到了一个有趣的建议,使我指向了一个不错的博客文章,该博客文章允许编写一个优雅的解决方案:
http://diethardsteiner.blogspot.com.es/2009/10/current-date-function-on-mondrian.html
with
member [Measures].sm as aggregate(
periodstodate(
currentdatemember([Dim],'["Dim"]\.[yyyy]'), -- current year
currentdatemember([Dim],'["Dim"]\.[yyyy]\.[ww]').lag(1) -- previous week
),
[Measures].[Sales])
THKS
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.