2017-08-14 57 views
8

這是爲應用程序動態設置和呈現報告的數據。MDX查詢在報告中返回值,但不在Visual Basic代碼中

我有一個依賴於參數的報表的MDX查詢。查詢內容爲:

SELECT NULL ON COLUMNS, strtomember(@DateYear) ON ROWS FROM [MYDATACUBE] 

在報表查詢設計器中運行時,它會正確返回一個值。但是,在Visual Basic代碼中運行時,它不會返回任何內容。這裏是我的代碼的重要組成部分:

Dim cn = New AdomdConnection(adomdparamconnectionstrings(countparamsadomd)) 
    Dim da As AdomdDataAdapter = New AdomdDataAdapter() 
    Dim cmd = New AdomdCommand(paramcommands(countparamsadomd), cn) 
    Dim tbl = New DataTable 

    If (adomdparams) Then 'If there are parameters, adds them to the query 
     For l As Integer = 0 To (countparamsadomd - 1) 
      If (adomdparamconnectionstrings(l) = "NODATASET") Then 
       Dim p As New AdomdParameter(paramvaradomd(l), paramadomd(l)) 
       cmd.Parameters.Add(p) 
      Else 
       Dim p As New AdomdParameter(paramvaradomd(l), adomdqueryvalues(l)) 
       cmd.Parameters.Add(p) 
      End If 
     Next 
    End If 

    da.SelectCommand = cmd 

    cn.Open() 
    da.Fill(tbl) 
    cn.Close() 

我知道連接字符串的工作,因爲所有其他數據集使用同一個。我知道命令是正確的使用斷點。我知道參數的值也是正確的,也使用斷點。我知道代碼的整體工作原理,因爲它適用於我測試過的每個數據集,除了這一個。使用中斷點,一切似乎都像其他數據集一樣工作,但它不會返回任何值。

由此產生的表具有正確命名的列([Date]。[Year]。[Year]。[MEMBER_CAPTION]),但沒有行。返回的值應該是包含年份的單行。

+0

不必返回在列軸的任何數據,即'選擇NULL ON COLUMNS'。我在下面提供了一個示例,它返回參數化成員的MEMBER_CAPTION屬性。 – jhenninger

回答

1

我在C#中做了類似的事情。

如果您有機會獲得維度和層次結構的名字,那麼你可以有這樣的通用查詢:

WITH 
    MEMBER [Measures].[Member Caption] AS StrToMember(@Hierarchy).HIERARCHY.CURRENTMEMBER.MEMBER_CAPTION 
SELECT 
    [Measures].[Member Caption] ON COLUMNS, 
    StrToMember(@DateYear) ON ROWS 
FROM 
    [MYDATACUBE] 

請注意,你必須之前添加參數,@Hierarchy,到命令執行查詢。計算成員的值表達式中有一個小技巧。將層次表達式傳遞給StrToMember()時,它會從該層次結構返回默認成員。從默認成員中,您可以使用HIERARCHY函數向後工作來獲取層次結構。從層次結構中,您可以獲取CURRENTMEMBER及其MEMBER_CAPTION屬性。

如果你想具體的在你的榜樣層次的查詢,你可以使用:

WITH 
    MEMBER [Measures].[Member Caption] AS [Date].[Year].CURRENTMEMBER.MEMBER_CAPTION 
SELECT 
    [Measures].[Member Caption] ON COLUMNS, 
    StrToMember(@DateYear) ON ROWS 
FROM 
    [MYDATACUBE] 
+0

對不起,我沒有檢查這個網站一段時間,沒有看到你的答案。謝謝,我會試試這個,稍後再回來 – ShadowShine57