我正在尝试创建一个报告,以显示我们的整体质量在一个月或一个季度(几年的时间)内随时间变化的趋势。主报告将显示在指定时间段内按月/季度分组的所有发货,子报告将显示在该月/季度输入的所有导致报废或返工的退货。
我遇到的问题是将子报表链接到主报表中的日期组。在使用不同的方法进行了几次尝试之后,我能做的最好的事情就是显示每个组页脚中date参数内的所有返回值。
这是我的第一次发布,所以我不确定需要什么其他信息来协助。请让我知道是否还有需要。
*编辑以获取其他信息
我希望子报表显示给定时间段内每个月或每个季度的数据。因此,如果报表的日期范围是1/1/2018-9/30/2018,并且数据按月分组,我希望子报表仅显示每个月组的数据。总体布局如下。
一月
出货量
返回(子报告显示一月的数据)
2月
出货量
返回值(显示2月份数据的子报表)
*第二次编辑以添加屏幕截图和更多信息
我从子报表中删除了所有参数,因为我无法使用其中的任何参数。主报表上的唯一参数是“日期范围”,提示用户输入开始和结束日期。
主报告在详细信息部分中包含发货。
下面的当前布局。如果可以解决当前问题,我将添加从子报表传递来的值,以计算每个月的质量评级,然后将其传回第二个子报表以进行汇总和图表化。
*对数据源和示例数据进行第三次编辑
主报告和子报告从我们公司数据库中的表中提取。
用于主报告的SQL查询。仅使用“发布”表来显示每个零件的发货数量和时间。 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
作为主报表中Releases.DateComplete
的日期时间链接(由于无法正常工作,目前未在参数上链接),并且仅选择作为客户退货的记录导致返工,报废,分类或维修。
子报表
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'
答案 0 :(得分:1)
首先,我要非常感谢Digital.Aaron。非常感谢您为解决此问题提供的帮助。
您的答案与我所需要的非常接近。在将其他行添加到SQL语句后,我仍然无法获得子报表来显示任何数据,因此我尝试了一些不同的操作。我在公式字段中添加了其他语句。
主报告字段
DisplayName : Office 365 Exchange Online
ServicePrincipalNames : {https://manage.protection.apps.mil,
https://ps.compliance.protection.outlook.com,
https://autodiscover-s.office365.us/,
https://outlook.office365.us/...}
子报告字段
DATEADD("D", -1*(DATEPART("D",{Releases.DateComplete})-1),{Releases.DateComplete})
我使用这些字段作为主报表和子报表之间的链接,但仍然无法显示数据。问题是在子报表的记录选择公式中将它们彼此设置为DATEADD("D", -1*(DATEPART("D",{CustReturn.DateEnt})-1),{CustReturn.DateEnt})
。我将公式命名为=
原始记录选择
DatePeriod
修改的记录选择
{@DatePeriod} = {?Pm-@DatePeriod}
一旦我进行了更改,一切都准备就绪。
再次感谢
杰夫
答案 1 :(得分:0)
因此,您似乎正在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 Report模板中,您将使用主报告结果集中的DateComplete字段作为子报告参数的输入。您的设计布局看起来在这里是正确的,因为您希望在组页脚中调用子报表。
编辑:因此对于给定月份中的所有记录,DateComplete看起来并不相同。没关系。我们将在主查询和子报表查询中都添加一列,该列对于给定月份中的所有记录将是相同的,然后可以用来链接这些记录。
您的主要查询将变为:
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
将始终是该月第一天的日期。现在,我们可以将其用作主报表和子报表之间的链接字段。您也可以考虑将此字段设置为您要分组的字段,而不是月份值。