vb.net – MDX Query在报表中返回值,但在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])但没有行.返回的值应该是包含年份的单行.

我在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]
相关文章
相关标签/搜索