对于我的报告,我需要选择从动态数据库中访问哪些列。更准确:
在数据库中,列的命名方式如下:
FCST_Sales_2014_Q4_with_SF
FCST_Sales_2015_Q1_with_SF
FCST_Sales_2015_Q2_with_SF
FCST_Sales_2015_Q3_with_SF
我需要报告来选择当前年份和季度,因此我使用Now()
函数来合成我需要的表达式。例如:
=Year(Now())
和
=Switch(
Month(Now()) = 1, 1,
Month(Now()) = 2, 1,
Month(Now()) = 3, 1,
Month(Now()) = 4, 2,
Month(Now()) = 5, 2,
Month(Now()) = 6, 2,
Month(Now()) = 7, 3,
Month(Now()) = 8, 3,
Month(Now()) = 9, 3,
Month(Now()) = 10, 4,
Month(Now()) = 11, 4,
Month(Now()) = 12, 4)
结果为2014
和4
,这正是我所需要的。如果我使用以下内容:
=("Fields!FCST_Sales_" + CStr(Year(Now())) + "_Q" + CStr(Switch(Month(Now()) = 1, 1, Month(Now()) = 2,1,Month(Now()) = 3,1,Month(Now()) = 4, 2, Month(Now()) = 5,2,Month(Now()) = 6,2,Month(Now()) = 7,3,Month(Now()) = 8,3,Month(Now()) = 9,3,Month(Now()) = 10, 4, Month(Now()) = 11,4,Month(Now()) = 12,4)) + "_with_SF")
我得到了我需要的字符串(FCST_Sales_2014_Q4_with_SF
),但问题是,我不知道我不能使用.Value
操作。如果我将Sum()
和.Value
添加到我创建的表达式中,我会收到错误消息,.Value
不是String的成员。我使用的表达是:
=Sum(("Fields!FCST_Sales_" + CStr(Year(Now())) + "_Q" + CStr(Switch(Month(Now()) = 1,1, Month(Now()) = 2,1,Month(Now()) = 3,1,Month(Now()) = 4,2, Month(Now()) = 5,2,Month(Now()) = 6,2,Month(Now()) = 7,3,Month(Now()) = 8,3,Month(Now()) = 9,3,Month(Now()) = 10, 4, Month(Now()) = 11,4,Month(Now()) = 12,4)) + "_with_SF").Value)
这个问题有解决方案吗?
答案 0 :(得分:3)
你不能像这样构建一个字段 - 你实际上在构建一个字符串。你想要做的是建立要在Fields
集合中查找的字段的名称,而不是这样:
Fields!FieldName.Value
看起来像这样:
Fields("FieldName").Value
所以你可以使用你非常大的表达式:
=Sum(Fields("FCST_Sales_" + CStr(Year(Now())) + "_Q" + CStr(Switch(Month(Now()) = 1, 1, Month(Now()) = 2, 1, Month(Now()) = 3, 1, Month(Now()) = 4,2, Month(Now()) = 5, 2,Month(Now()) = 6, 2, Month(Now()) = 7, 3, Month(Now()) = 8, 3, Month(Now()) = 9, 3, Month(Now()) = 10, 4, Month(Now()) = 11, 4, Month(Now()) = 12, 4)) + "_with_SF").Value)
您还可以简化该表达式。要获得该季度,您只需要这样做:
(Month(Today) + 2) \ 3
所以你的表达归结为
=Sum(Fields("FCST_Sales_" + CStr(Year(Today)) + "_Q" + CStr((Month(Today) + 2) \ 3) + "_with_SF").Value)
替代方法:使用SQL动态构建字段名称
使用返回一致字段名称的动态SQL字符串还有另一种可能更简单的方法。例如,如果您的SQL看起来像这样:
SELECT FCST_Sales_2014_Q4_with_SF
FROM MyTable
您可以将其转换为解析为SQL语句的字符串表达式。右键单击数据集,选择“数据集属性”,然后单击查询旁边的表达式编辑器fx
按钮。现在我们可以从字符串构建SQL语句,如此
="SELECT FCST_Sales_" + CStr(Year(Today)) + "_Q" + CStr((Month(Today) + 2) \ 3) + "_with_SF AS FCST_Sales "
&"FROM MyTable"
现在,您正在SQL查询中动态构建字段名称,并在数据集中将其返回别名为FCST_Sales
,以便您可以在整个报表中轻松使用已知字段值,从而使计算更加轻松:
=Fields!FCST_Sales.Value
和
=SUM(Fields!FCST_Sales.Value)