2014-10-08 82 views
1

对于我的报告,我需要选择从数据库动态访问哪些列。更precice:SSRS选择动态列

在数据库中的列被命名为这样的:

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) 

结果是20144这正是我需要的。如果我使用了以下内容:

=("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) 

是否有解决此问题的方法?

回答

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) 
+0

,完美的工作,也是你的简化的表达是非常有益的。谢谢你的帮助。 – Maierlu 2014-10-09 06:08:27