2014-02-26 55 views
1

我一直在嘗試一段時間來創建一個(有點複雜?)單元格計算,我需要使用動態公式,但不工作。最後,我獲得了mdx表達式作爲單元格值,這是錯誤的。這裏是我的表達:動態mdx表達式的CELL計算

----------------------------------------------------------------------- 
---SET With 2 elements(Sales Fcst(20131223), Sales Fcst(2014)) 
WITH SET [CategoryFcst] AS 
FILTER([Category].[Category].children, InStr([Category].[Category].CURRENTMEMBER.MEMBER_CAPTION,"Sales Fcst") > 0) 


CELL CALCULATION SalesPlanAch FOR 
       '([Category].[Category].[Sales Plan Att%], [Measures].[Amount])' 
        AS 
        '(StrToMember("' + [CategoryFcst].item(0).UNIQUENAME + '"),[Measures].[Amount])' 


--The formula expression result is: (StrToMember("[Category].[Category].&[29]"),[Measures].[Amount]) 



SELECT [Time].[Calendar Time].[Quarter].members on columns, 
[Category].[Category].children on rows 

from [AllData] 
WHERE ([Measures].[Amount]) 

----------------------------------------------------------------------- 

如果我直接就把「(StrToMember("[Category].[Category].&[29]"),[Measures].[Amount])」作爲細胞計算公式,將工作,但我需要動態計算出。

此外,如果我把'(StrToMember("' + '[Category].[Category].&[29]' + '"),[Measures].[Amount])'不起作用。它將該字符串設置爲單元格值。

這不是真正的細胞計算,而是造成我的問題的部分。 我會很感激任何建議/答案。

最好的問候, 丹尼爾

+0

我以前見過這種東西,它可能與創建集合的時間有關。你能用設定的定義替換計算中的[CategoryFcst]嗎?它可能不是最佳的,但也許你可以在之後優化它?也許你可以創建一個層次結構來對這些成員進行分類,而不是從標題中查找它們? –

+0

嗨Preet。感謝您的回答。如果我替換集合定義的[CategoryFcst],我會得到一個空字符串,並且mdx表達式的結果是:(StrToMember(「」),[Measures]。[Amount])。我需要看看會員的標題,因爲會改變,所以我不能直接這樣寫:[Catgeory]。[Catgeory]。[Sales Fcst(20140124)]。 – Daniel

+0

''(StrToMember([CategoryFcst] .item(0).UNIQUENAME),[Measures]。[Amount])''給你想要的東西? – FrankPl

回答

1

只需使用

'(StrToMember([CategoryFcst].item(0).UNIQUENAME),[Measures].[Amount])' 

據我瞭解,解決這個表達報價的必要性是由於分析服務as described here的歷史。而且,如同一篇文章中Analysis Services 2005版本中所述,WITH子句中的成員和集合定義已更改,但顯然不適用於很少使用的單元計算。因此,這裏的引號不是包含一個字符串的東西,而是或多或少地包含該表達式的語法要求。

我實際上不知道如何在這個表達式中使用單引號。但是,您可以在MDX表達式中使用雙引號或單引號來包含字符串。因此,在這種類型的表達式中,你很少會遇到絕對需要單引號的必要性。