报告服务&带参数的MDX查询

时间:2015-07-02 01:57:07

标签: sql sql-server-2008 mdx

我有一个MDX查询,可以使用由参数@FYear返回的fin年(即1213,1314,1415)。

是否可以将参数更改为之前的finyear?

因此,如果用户选择了鳍年1314,则该值将为1213。

在访问中我可以使用这样的东西:

IIf(Len(Left(@FYear,2)-1)>1,Left(@FYear,2)-1,Format((Left(@FYear,2)-1),"00")) & IIf(Len(Right(@FYear,2)-1)>1,Right(@FYear,2)-1,Format((Right(@FYear,2)-1),"00"))

但它似乎不适用于此。我得到的错误是"查询(16,16)运算符或表达式'&'在此上下文中不受支持。"

我试图将2个IIfs连接到+"" +和&""&但没有运气。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我假设您使用current_path = '/data/prod/current'之类的报告应用程序来使用此参数。如果SSRS从字体结尾返回1213,1314等的数字值,则必须首先将其设置为看起来像层次结构成员。像这样......

@FYear

现在,如果要在MDX查询中使用此参数,则必须将其转换为集合。这是一个字符串。所以你想使用"Calendar.FinYear.&[" + @FYear + "]"//----->It would now look like Calendar.FinYear.&[1314] 函数。

StrToSet

最后,你说你想实际上到上个财政年度。

在MDX层次结构树中,成员一个接一个地加强了 -
    1011
    1112
    1213
    1314
    1415等等..

有多种方式可以联系会员" 1213"来自会员" 1314"。最简单的方法之一就是使用StrToSet("Calendar.FinYear.&[" + @FYear + "]") 函数。

最后,您的参数看起来像 -

PrevMember

但是,所有的说法和做法,如果你仍然坚持以上述方式接触上一个成员,那么两个小的调整。

首先,使用StrToSet("Calendar.FinYear.&[" + @FYear + "].PrevMember") 运算符进行连接,其次,将左右位转换为字符串(也可以在没有这个的情况下工作,但只是为了更安全一面)

+

希望这有帮助。

编辑:

用于调试 -

尝试

CStr(IIf(
    Len(Left(@FYear,2)-1)>1, 
    Left(@FYear,2)-1,
    Format((Left(@FYear,2)-1),"00"))) 
+

CStr(IIf(
    Len(Right(@FYear,2)-1)>1,
    Right(@FYear,2)-1,
    Format((Right(@FYear,2)-1),"00")))

如果这样可行,那么StrToSet("[Discharge Date].[Fiscal Date].[Fiscal Year].&[1314].PrevMember") 就没有问题。您应该检查MDX中的参数。我感觉返回SSRS。也可能是格式问题。