我想构建一个报告,返回一组员工的记录,按特定日期和主管,并按员工呈现报告(如批量)。我这样做的主要报告和3个子报告。我的子报表单独工作,我只有一个子报表从main呈现,但只显示组中的第一条记录。
main上的数据集有3个参数,USERID,BegDate,EndDate。子报表上的数据集采用EMPID,BegDate,EndDate。我在main和子报表参数上插入了子报表,如下所示:
Name Value
CurEmp =First(Fields!EMPID.Value, "DataSet1")
BegDate [@BegDate]
EndDate [@EndDate]
在DataSet1 / sql查询的where子句中使用CurEmp
,WHERE EMPID = @CurEmp
DataSet1中的主要报告参数是:
Name Value
@USERID [@USERID]
@BegDate [@BegDate]
@EndDate [@EndDate]
现在我意识到参数=First
中的表达式中的Value
应该只呈现第一条记录,但我没有改变任何内容就会呈现。我做了tutorials并用Google搜索了2天。我可以让简单的子报告工作,但似乎没有什么似乎适用于我想要做的事情。有人可以指导我一个适用于我的情况的例子吗?
BTW我已将我的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
子报告数据集=
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
答案 0 :(得分:0)
所以你的修复/答案将如下所示。
从主报表定义参数时,它应该是这样的。
=Join(LookupSet(1,1,Fields!EMPID.Value,"DataSet1"),",")
确定后,请确保将子报表参数数据类型设置为文本,并选中允许多个值。
之后,子报告的数据集不设置where条件。而不是在数据集属性中转到过滤器。
在表达式中设置类似
的内容=CStr(Fields!EMPID.Value)
并将运算符设置为在中,并将值设置为如下所示。
=Split(Parameters!EmpId.Value(0),",")
基本上就是这样。希望这会有所帮助。