繁体   English   中英

SSRS - 多个时间表报告

[英]SSRS - multiple timesheet reports

我目前有一个时间表报告,它使用单个TimesheetID 但是,我现在正在考虑通过在WeekEnding日期将Timesheets分组在一起来为员工节省一些时间,并且我希望将每个页面填充到一个报告中。 例如,第1页上的Joe Bloggs,第2页上的Steve Jobs等等......作为一项规则,时间表的长度从未超过1页。

我创建了一个新的报表调用GroupTimesheet。 并添加了一个名为General的数据集,其中包含以下信息:

SELECT 
StaffTable.Staffname,
Timesheet.WeekEnding
FROM Timesheet
INNER JOIN StaffTable ON Timesheet.StaffID = StaffTable.StaffID
WHERE Timesheet.WeekEnding = @WeekEnding

下一步我该怎么做才能挣扎 我在下面有这个查询,其中包含Timesheet行,但仍然引用TimesheetID 如果我将其更改为WeekEnding ONLY,它会显示所有员工的所有TimesheetLines,而不是每个TimesheetID:

SELECT
TimesheetLine.LineDate,
TimesheetLine.StartTime,
TimesheetLine.FinishTime
FROM TimesheetLine
INNER JOIN Timesheet ON TimesheetLine.TimesheetID = Timesheet.TimesheetID
WHERE Timesheet.TimesheetID = @TimesheetID
AND Timesheet.WeekEnding = @WeekEnding

我如何设置报告以实现我的目标?

这是我正在使用的当前数据库设计,包含示例数据:

CREATE TABLE Timesheet (TimesheetID INT IDENTITY (1,1) NOT NULL,
WeekEnding DATE,
StaffID INT)

CREATE TABLE StaffTable (StaffID INT IDENTITY (1,1) NOT NULL,
Staffname VARCHAR(50))

CREATE TABLE TimesheetLine (TimesheetLineID INT IDENTITY (1,1) NOT NULL,
TimesheetID INT,
LineDate DATE,
StartTime VARCHAR(5),
FinishTime VARCHAR(5))

ALTER TABLE Timesheet ADD CONSTRAINT TimesheetID_PK PRIMARY KEY (TimesheetID)
ALTER TABLE StaffTable ADD CONSTRAINT StaffID_PK PRIMARY KEY (StaffID)
ALTER TABLE TimesheetLine ADD CONSTRAINT TimesheetLineID_PK PRIMARY KEY (TimesheetLineID)

ALTER TABLE Timesheet ADD CONSTRAINT StaffID_T2ST FOREIGN KEY (StaffID) REFERENCES StaffTable (StaffID)
ALTER TABLE TimesheetLine ADD CONSTRAINT TimesheetID_TL2T FOREIGN KEY (TimesheetID) REFERENCES Timesheet (TimesheetID)

--DATA
INSERT INTO StaffTable VALUES ('Joe Bloggs')
INSERT INTO StaffTable VALUES ('Steve Jobs')

INSERT INTO Timesheet VALUES ('2017-07-23', 1)
INSERT INTO Timesheet VALUES ('2017-07-23', 2)

INSERT INTO TimesheetLine VALUES (1, '2017-07-17', '09:00', '17:30')
INSERT INTO TimesheetLine VALUES (1, '2017-07-18', '09:00', '17:30')
INSERT INTO TimesheetLine VALUES (1, '2017-07-19', '09:00', '17:30')
INSERT INTO TimesheetLine VALUES (1, '2017-07-20', '09:00', '17:30')
INSERT INTO TimesheetLine VALUES (1, '2017-07-21', '09:00', '17:30')

INSERT INTO TimesheetLine VALUES (2, '2017-07-17', '08:00', '17:00')
INSERT INTO TimesheetLine VALUES (2, '2017-07-18', '08:00', '17:00')
INSERT INTO TimesheetLine VALUES (2, '2017-07-19', '08:00', '17:00')
INSERT INTO TimesheetLine VALUES (2, '2017-07-20', '08:00', '17:00')
INSERT INTO TimesheetLine VALUES (2, '2017-07-21', '08:00', '17:00')

如果您已经有一个可以正确输出单个时间表的报告,那么您没有太多工作要做。 我们可以将此报告用作子报告。

创建一个新报告。 使用查询添加数据集'dsTimesheets'作为SELECT TimeSheetID FROM Timesheet WHERE Weekending = @WeekEnding

添加一个简单的表/ tablix,其中包含一列,一行并将其数据集设置为dsTimesheets ,这将作为我们的循环。 在Tablix单元格中,插入子报表并将子报表的参数设置为TimesheetID 你想要拉伸单元格,使其符合报告的宽度,我猜也是如此。

此时,只要每个星期值有几个条目(您的样本数据只有一个),报告就应该有效。

一旦测试完毕,您可以通过右键单击行组并将分页符属性设置为“介于...之间”来完成。

您还可以更改dsTimesheets查询以加入您的员工表,以便您可以按员工姓名等订购时间表。

只要有可能,您的SSRS报告设计最简单的方法就是拥有一个包含所需数据的数据源的SQL查询。

如果我将其更改为WeekEnding ONLY,它会显示所有员工的所有TimesheetLines

这听起来像你的目标 - 一个只输入日期参数​​的报告,它为所有员工提供所有相关的时间表。 如果将所有三个表连接在一起,则可以查看哪些工作人员与哪些时间表行相关:

SELECT
    StaffTable.StaffID,
    StaffTable.StaffName,
    Timesheet.TimesheetID,
    Timesheet.WeekEnding,
    TimesheetLine.TimesheetLineID,
    TimesheetLine.LineDate,
    TimesheetLine.StartTime,
    TimesheetLine.FinishTime
FROM
    StaffTable
    INNER JOIN Timesheet ON StaffTable.StaffID = Timesheet.StaffID
    INNER JOIN TimesheetLine ON Timesheet.TimesheetID = TimesheetLine.TimesheetID
WHERE
    Timesheet.WeekEnding = @WeekEnding

通过这种方式,您可以使用表或列表设置报表,并按StaffIDTimesheetID对其进行StaffID (如果工作人员在同一周内有多个时间表)。 您可能还希望将分组中的分页符设置为“在组的每个实例之间”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM