![](/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.