带参数的 Reporting Services 和 MDX 查询

Reporting Services & MDX Queries with parameter

我有一个 MDX 查询,它适用于 fin 年份(即 1213、1314、1415),它由参数 @FYear 返回。

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

因此,如果用户选择 fin year 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"))

但它在这里似乎不起作用。我得到的错误是 "Query (16, 16) Operator or expression '&' is not supported in this context."

我尝试将 2 个 IIf 与 +""+ 和 &""& 连接起来,但没有成功。

如有任何建议,我们将不胜感激。

我假设您正在使用 SSRS 之类的报告应用程序来使用此参数。如果从字体末尾开始 @FYear returns 1213、1314 等数值,则您必须先将其设计得有点像层次结构成员。像这样..

"Calendar.FinYear.&[" + @FYear + "]"//----->It would now look like Calendar.FinYear.&[1314]

现在,如果您要在 MDX 查询中使用此参数,则必须将其转换为一个集合。现在这是一个字符串。所以你想使用StrToSet函数。

StrToSet("Calendar.FinYear.&[" + @FYear + "]")

最后,你说你想真正进入上一个财政年度。

在MDX层级树中,成员是这样一个接一个地堆叠起来的-
1011
第1112章【=49=】 1213
1314
1415等等..

有多种方法可以从成员“1314”联系到成员“1213”。最简单的方法之一是使用 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 中的参数。我觉得不是返回1314。也可能是格式问题。