带参数的 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
。也可能是格式问题。
我有一个 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
。也可能是格式问题。