Crystal 报表,Link 子报表截止日期组
Crystal Reports, Link Subreport To Date Group
我正在尝试创建一份报告,以按月或按季度(在几年的时间跨度内)显示我们的整体质量随时间变化的趋势。主报告将显示我们在指定时间段内按 month/quarter 分组的所有出货量,子报告将显示在 month/quarter 期间输入的所有导致报废或返工的 returns。
我遇到的问题是 link 将子报告添加到主报告中的日期组。经过多次尝试使用不同的方法,我能做的最好的就是在每个组页脚的日期参数中显示所有 returns。
这是我第一次发帖,所以我不确定需要哪些额外信息来提供帮助。如果还需要,请告诉我。
*编辑以获取更多信息
我希望子报表显示给定时间段内每个月或每个季度的数据。因此,如果报告的日期范围是 1/1/2018 - 9/30/2018 并且数据按月分组,我希望子报告仅显示每个月组的数据。总体布局如下。
一月
出货量
Returns(显示 1 月份数据的子报表)
二月
出货量
Returns(显示 2 月份数据的子报表)
*第二次编辑以添加屏幕截图和更多信息
我从子报表中删除了所有参数,因为我无法使它们中的任何一个起作用。主报表上的唯一参数是提示用户输入开始和结束日期的日期范围。
主报告在详细信息部分有发货量。
当前布局如下。如果我能解决当前的这个问题,我将添加从子报表传递过来的值以计算每个月的质量评级,然后将它们传递回第二个子报表以进行总结和绘制图表。
Quality Trend Layout
*数据源和示例数据的第三次编辑
主报表和子报表是从我们公司数据库中的 table 中提取的。
SQL 用于主报告的查询。只有 "Releases" table 用于显示每个零件的发货数量和时间。 DelType=0
正在指定客户送货。日期范围由用户输入的参数定义。
主报告
SELECT
"Releases"."DateComplete",
"Releases"."DelType",
"Releases"."PartNo",
"Releases"."Qty",
"Releases"."JobNo",
"Releases"."PartDesc"
FROM "COMPANY"."dbo"."Releases" "Releases"
WHERE "Releases"."DelType"=0 AND
("Releases"."DateComplete">={ts '2018-01-01 00:00:00'} AND
"Releases"."DateComplete"<{ts '2018-10-01 00:00:00'})
我正在尝试在主报告中使用 CustReturn.DateEnt
作为 link 到 Releases.DateComplete
的日期时间(目前没有在参数中 linked,因为它没有工作),并且只有 select 条客户记录 returns 导致返工、报废、分类或维修。
子报表
SELECT
"CustReturn"."DateEnt",
"CustReturn"."CustRMANo",
"CustReturnDet"."OrigJobNo",
"CustReturnDet"."PartNo",
"CustReturnDet"."QtyReturned",
"CustReturnDet"."QtyToRework",
"CustReturnDet"."QtyToRestock",
"NonConformance"."Disposition",
"NonConformance"."ReturnType",
"CustReturn"."IssueDate",
"NonConformance"."NonConfDate",
"CustReturnDet"."PartDesc"
FROM
("COMPANY"."dbo"."CustReturn" "CustReturn" INNER JOIN "COMPANY"."dbo"."CustReturnDet" "CustReturnDet" ON "CustReturn"."CustRMANo"="CustReturnDet"."CustRMANo")
LEFT OUTER JOIN "COMPANY"."dbo"."NonConformance" "NonConformance" ON "CustReturnDet"."NonConfNo"="NonConformance"."NonConfNo"
WHERE ("NonConformance"."Disposition"='REPAIR' OR
"NonConformance"."Disposition"='REWORK' OR
"NonConformance"."Disposition"='SCRAP' OR
"NonConformance"."Disposition"='SORT') AND
"NonConformance"."ReturnType"='CUSTOMER'
Quality Trend Example Data
看来您是在 Releases.DateComplete
上分组。假设此值对于与给定月份关联的所有记录都是相同的。我们还假设 Shipments
的以下(简化)样本数据:
ShipmentDate | PartNo | Qty | DateComplete
01/01/2018 | 0001 | 1 | 01/31/2018
01/05/2018 | 0031 | 10 | 01/31/2018
01/31/2018 | A314 | 4 | 01/31/2018
您的 Returns
数据需要如下所示:
ReturnDate | PartNo | Qty | DateComplete
01/15/2018 | 0031 | 7 | 01/31/2018
注意它们都有一个 DateComplete
列。
现在,在您的 Crystal 报告模板中,您将使用主报告结果集中的 DateComplete 字段作为子报告参数的输入。您的设计布局在这里看起来是正确的,因为您希望在组页脚中调用子报表。
编辑:所以看起来 DateComplete 对于给定月份的所有记录都不相同。没关系。我们将向主查询和子报表查询添加一个列,该列对于给定月份的所有记录都是相同的,然后我们可以将其用于 link 记录。
您的主要查询将变为:
SELECT
Releases.DateComplete,
Releases.DelType,
Releases.PartNo,
Releases.Qty,
Releases.JobNo,
Releases.PartDesc,
DatePeriod = DATEADD(DAY, -1*(DATEPART(DAY,Releases.DateComplete)-1),Releases.DateComplete)
FROM COMPANY.dbo.Releases Releases
WHERE Releases.DelType=0
AND (Releases.DateComplete>={ts '2018-01-01 00:00:00'} AND Releases.DateComplete<{ts '2018-10-01 00:00:00'})
您的子报表查询将变为:
SELECT
CustReturn.DateEnt,
CustReturn.CustRMANo,
CustReturnDet.OrigJobNo,
CustReturnDet.PartNo,
CustReturnDet.QtyReturned,
CustReturnDet.QtyToRework,
CustReturnDet.QtyToRestock,
NonConformance.Disposition,
NonConformance.ReturnType,
CustReturn.IssueDate,
NonConformance.NonConfDate,
CustReturnDet.PartDesc,
DatePeriod = DATEADD(DAY, -1*(DATEPART(DAY,CustReturn.DateEnt)-1),CustReturn.DateEnt)
FROM COMPANY.dbo.CustReturn CustReturn
INNER JOIN COMPANY.dbo.CustReturnDet CustReturnDet ON CustReturn.CustRMANo = CustReturnDet.CustRMANo
LEFT OUTER JOIN COMPANY.dbo.NonConformance NonConformance ON CustReturnDet.NonConfNo = NonConformance.NonConfNo
WHERE NonConformance.ReturnType='CUSTOMER'
AND (
NonConformance.Disposition='REPAIR'
OR NonConformance.Disposition='REWORK'
OR NonConformance.Disposition='SCRAP'
OR NonConformance.Disposition='SORT'
)
DatePeriod
将始终是该月第一天的日期。现在我们可以将其用作主报表和子报表之间的 Link 字段。您还可以考虑将其作为您分组的字段,而不是月份值。
首先,我要非常感谢Digital.Aaron。非常感谢您帮助解决这个问题。
您的回答非常接近我的需要。在 SQL 语句中添加额外的行后,我仍然无法让子报表显示任何数据,所以我尝试了一些不同的东西。我将附加语句添加到公式字段中。
主要报表字段
DATEADD("D", -1*(DATEPART("D",{Releases.DateComplete})-1),{Releases.DateComplete})
子报表字段
DATEADD("D", -1*(DATEPART("D",{CustReturn.DateEnt})-1),{CustReturn.DateEnt})
我将这些字段用作主报表和子报表之间的 link,但仍然无法显示数据。问题原来是在子报表的记录 select 公式中将它们设置为彼此 =
。我将公式命名为 DatePeriod
原始记录Select
{@DatePeriod} = {?Pm-@DatePeriod}
修改记录Select
{@DatePeriod} in Date({?Pm-@DatePeriod})
一旦我做出改变,一切就都准备就绪了。
再次感谢,
杰夫
我正在尝试创建一份报告,以按月或按季度(在几年的时间跨度内)显示我们的整体质量随时间变化的趋势。主报告将显示我们在指定时间段内按 month/quarter 分组的所有出货量,子报告将显示在 month/quarter 期间输入的所有导致报废或返工的 returns。
我遇到的问题是 link 将子报告添加到主报告中的日期组。经过多次尝试使用不同的方法,我能做的最好的就是在每个组页脚的日期参数中显示所有 returns。
这是我第一次发帖,所以我不确定需要哪些额外信息来提供帮助。如果还需要,请告诉我。
*编辑以获取更多信息
我希望子报表显示给定时间段内每个月或每个季度的数据。因此,如果报告的日期范围是 1/1/2018 - 9/30/2018 并且数据按月分组,我希望子报告仅显示每个月组的数据。总体布局如下。
一月
出货量
Returns(显示 1 月份数据的子报表)
二月
出货量
Returns(显示 2 月份数据的子报表)
*第二次编辑以添加屏幕截图和更多信息
我从子报表中删除了所有参数,因为我无法使它们中的任何一个起作用。主报表上的唯一参数是提示用户输入开始和结束日期的日期范围。
主报告在详细信息部分有发货量。
当前布局如下。如果我能解决当前的这个问题,我将添加从子报表传递过来的值以计算每个月的质量评级,然后将它们传递回第二个子报表以进行总结和绘制图表。
Quality Trend Layout
*数据源和示例数据的第三次编辑
主报表和子报表是从我们公司数据库中的 table 中提取的。
SQL 用于主报告的查询。只有 "Releases" table 用于显示每个零件的发货数量和时间。 DelType=0
正在指定客户送货。日期范围由用户输入的参数定义。
主报告
SELECT
"Releases"."DateComplete",
"Releases"."DelType",
"Releases"."PartNo",
"Releases"."Qty",
"Releases"."JobNo",
"Releases"."PartDesc"
FROM "COMPANY"."dbo"."Releases" "Releases"
WHERE "Releases"."DelType"=0 AND
("Releases"."DateComplete">={ts '2018-01-01 00:00:00'} AND
"Releases"."DateComplete"<{ts '2018-10-01 00:00:00'})
我正在尝试在主报告中使用 CustReturn.DateEnt
作为 link 到 Releases.DateComplete
的日期时间(目前没有在参数中 linked,因为它没有工作),并且只有 select 条客户记录 returns 导致返工、报废、分类或维修。
子报表
SELECT
"CustReturn"."DateEnt",
"CustReturn"."CustRMANo",
"CustReturnDet"."OrigJobNo",
"CustReturnDet"."PartNo",
"CustReturnDet"."QtyReturned",
"CustReturnDet"."QtyToRework",
"CustReturnDet"."QtyToRestock",
"NonConformance"."Disposition",
"NonConformance"."ReturnType",
"CustReturn"."IssueDate",
"NonConformance"."NonConfDate",
"CustReturnDet"."PartDesc"
FROM
("COMPANY"."dbo"."CustReturn" "CustReturn" INNER JOIN "COMPANY"."dbo"."CustReturnDet" "CustReturnDet" ON "CustReturn"."CustRMANo"="CustReturnDet"."CustRMANo")
LEFT OUTER JOIN "COMPANY"."dbo"."NonConformance" "NonConformance" ON "CustReturnDet"."NonConfNo"="NonConformance"."NonConfNo"
WHERE ("NonConformance"."Disposition"='REPAIR' OR
"NonConformance"."Disposition"='REWORK' OR
"NonConformance"."Disposition"='SCRAP' OR
"NonConformance"."Disposition"='SORT') AND
"NonConformance"."ReturnType"='CUSTOMER'
Quality Trend Example Data
看来您是在 Releases.DateComplete
上分组。假设此值对于与给定月份关联的所有记录都是相同的。我们还假设 Shipments
的以下(简化)样本数据:
ShipmentDate | PartNo | Qty | DateComplete
01/01/2018 | 0001 | 1 | 01/31/2018
01/05/2018 | 0031 | 10 | 01/31/2018
01/31/2018 | A314 | 4 | 01/31/2018
您的 Returns
数据需要如下所示:
ReturnDate | PartNo | Qty | DateComplete
01/15/2018 | 0031 | 7 | 01/31/2018
注意它们都有一个 DateComplete
列。
现在,在您的 Crystal 报告模板中,您将使用主报告结果集中的 DateComplete 字段作为子报告参数的输入。您的设计布局在这里看起来是正确的,因为您希望在组页脚中调用子报表。
编辑:所以看起来 DateComplete 对于给定月份的所有记录都不相同。没关系。我们将向主查询和子报表查询添加一个列,该列对于给定月份的所有记录都是相同的,然后我们可以将其用于 link 记录。
您的主要查询将变为:
SELECT
Releases.DateComplete,
Releases.DelType,
Releases.PartNo,
Releases.Qty,
Releases.JobNo,
Releases.PartDesc,
DatePeriod = DATEADD(DAY, -1*(DATEPART(DAY,Releases.DateComplete)-1),Releases.DateComplete)
FROM COMPANY.dbo.Releases Releases
WHERE Releases.DelType=0
AND (Releases.DateComplete>={ts '2018-01-01 00:00:00'} AND Releases.DateComplete<{ts '2018-10-01 00:00:00'})
您的子报表查询将变为:
SELECT
CustReturn.DateEnt,
CustReturn.CustRMANo,
CustReturnDet.OrigJobNo,
CustReturnDet.PartNo,
CustReturnDet.QtyReturned,
CustReturnDet.QtyToRework,
CustReturnDet.QtyToRestock,
NonConformance.Disposition,
NonConformance.ReturnType,
CustReturn.IssueDate,
NonConformance.NonConfDate,
CustReturnDet.PartDesc,
DatePeriod = DATEADD(DAY, -1*(DATEPART(DAY,CustReturn.DateEnt)-1),CustReturn.DateEnt)
FROM COMPANY.dbo.CustReturn CustReturn
INNER JOIN COMPANY.dbo.CustReturnDet CustReturnDet ON CustReturn.CustRMANo = CustReturnDet.CustRMANo
LEFT OUTER JOIN COMPANY.dbo.NonConformance NonConformance ON CustReturnDet.NonConfNo = NonConformance.NonConfNo
WHERE NonConformance.ReturnType='CUSTOMER'
AND (
NonConformance.Disposition='REPAIR'
OR NonConformance.Disposition='REWORK'
OR NonConformance.Disposition='SCRAP'
OR NonConformance.Disposition='SORT'
)
DatePeriod
将始终是该月第一天的日期。现在我们可以将其用作主报表和子报表之间的 Link 字段。您还可以考虑将其作为您分组的字段,而不是月份值。
首先,我要非常感谢Digital.Aaron。非常感谢您帮助解决这个问题。
您的回答非常接近我的需要。在 SQL 语句中添加额外的行后,我仍然无法让子报表显示任何数据,所以我尝试了一些不同的东西。我将附加语句添加到公式字段中。
主要报表字段
DATEADD("D", -1*(DATEPART("D",{Releases.DateComplete})-1),{Releases.DateComplete})
子报表字段
DATEADD("D", -1*(DATEPART("D",{CustReturn.DateEnt})-1),{CustReturn.DateEnt})
我将这些字段用作主报表和子报表之间的 link,但仍然无法显示数据。问题原来是在子报表的记录 select 公式中将它们设置为彼此 =
。我将公式命名为 DatePeriod
原始记录Select
{@DatePeriod} = {?Pm-@DatePeriod}
修改记录Select
{@DatePeriod} in Date({?Pm-@DatePeriod})
一旦我做出改变,一切就都准备就绪了。
再次感谢,
杰夫