这适用于为报表动态设置数据和呈现报表的应用程序.
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]