我想建立一个报告,该报告返回一组员工的记录,并通过特定的日期和主管,并呈现员工的报告(如一批)。我正在使用主要报告和3个子报告这样做。我的子报告单独工作,我刚刚从Main中获得了一个子报告,但只有组中的第一张记录。
MAIN上的数据集具有3个参数,userId,bebdate,enddate。子报告上的数据集以empid,bebdate,enddate为单位。我在主和子报告参数上插入了子报告,如下所示:
Name Value
CurEmp =First(Fields!EMPID.Value, "DataSet1")
BegDate [@BegDate]
EndDate [@EndDate]
其中 CurEmp
在dataSet1/sql查询的WHERE子句中使用,即WHERE EMPID = @CurEmp
数据集中的主要报告参数为:
Name Value
@USERID [@USERID]
@BegDate [@BegDate]
@EndDate [@EndDate]
现在,我意识到,参数Value
中的表达式中的=First
应该仅呈现第一个记录,但我将其更改为完全不会呈现。我做了教程,并用Google搜索了2天。我可以让简单的子报告工作,但似乎没有任何东西适用于我要做的事情。有人可以将我带到适用于我情况的示例吗?
顺便说一句,我已经将我的VS2008环境设置为业务智能项目。
更新:我在下面添加了我的SQL查询,以帮助@SAM的建议解释。实际上,我开始看一个事实,也许我写了错误的问题。我对应该将主要报告查询与子查询进行比较感到困惑。...我希望这有助于澄清我的含义。
主报告数据集=
SELECT
v.EMPID,
UPPER(p.FirstName + ' ' + p.LastName) as EmpFullName,
v.dtmDate,
v.TCode,
v.Hours,
v.ProjectNo,
from vwPersonSummary v
join tblPerson t on v.EMPID = p.EMPID
WHERE v.USERID = @USERID --Supervisor’s EMPID
AND
v.dtmDate BETWEEN @BegDate AND @EndDate
ORDER BY v.EMPID, v.dtmDate
subreport dataset =
SELECT
v.EMPID,
UPPER(p.FirstName + ' ' + p.LastName) as EmpFullName,
v.dtmDate,
v.Tcode,
v.Hours,
v.ProjectNo
from vwPersonSummary v
join tblPerson t on v. EMPID = t. EMPID
WHERE
v.EMPID = @CurEmp
AND v.dtmDate BETWEEN @BegDate AND @EndDate
ORDER BY v.dtmDate
,因此您的修复/答案将如下所示。
从主报告定义参数时,应该是这样的。
=Join(LookupSet(1,1,Fields!EMPID.Value,"DataSet1"),",")
定义后,确保将sub Report参数数据类型设置为 text 和允许多个值已被检查。
之后,对于子报告的数据集,请勿设置一个条件。而是在数据集属性中转到过滤器。
in expression 设置
之类的东西=CStr(Fields!EMPID.Value)
和set 操作员 as in >> 中,并将 value 设置为类似于下面的东西。
=Split(Parameters!EmpId.Value(0),",")
基本上就是这样。希望这会有所帮助。