簡體   English   中英

如何為計算所得成員建立動態MDX公式?

[英]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)

因此,上面有兩個錯誤:

  1. 您正在將數字輸入到將字符串轉換為Memebers的函數中
  2. 您需要輸入成員的完整字符串表示形式,即“ [Dim]。[2015]。[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM