首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >水晶报表,链接子报表到日期组

水晶报表,链接子报表到日期组
EN

Stack Overflow用户
提问于 2018-10-02 23:25:57
回答 2查看 926关注 0票数 1

我正试图创建一个报告,以显示我们的总体质量随着时间的推移,按月或季度(跨越数年)。主报表将显示我们在指定时间内按月/季度分组的所有货件,而子报表将显示在该月/季度期间输入的所有导致报废或返工的返回。

我正在处理的问题是将子报告链接到主报告中的日期组。经过几次使用不同方法的尝试后,我所能做的最好是在每个组页脚中显示date参数中的所有返回。

这是我第一次发帖,所以我不知道需要什么额外的信息来帮助。如果还有更多的需要,请告诉我。

*编辑更多信息

我希望该子报告显示给定时间内每个月或每个季度的数据。因此,如果报告的日期范围是2018-9/2018年的1/1/9/2018年,并且数据是按月分组的,我希望子报告只显示每个月组的数据。总体布局如下。

1月份

发货

报表(显示1月份数据的子报告)

2月份

发货

报表(显示2月份数据的子报告)

*第二次编辑以添加屏幕截图和更多信息

我删除了子报表中的所有参数,因为我无法让它们中的任何一个工作。主报表中的唯一参数是提示用户输入开始日期和结束日期的日期范围。

主要报告载于详细资料部分。

下面是当前的布局。如果我能够解决当前的问题,我将添加从子报告中传递出来的值,以计算每个月的质量等级,然后将它们传递回第二个子报告以进行汇总和图表。

质量趋势布局

*对数据源和示例数据进行第三次编辑

主报表和子报表从我们公司数据库中的表中提取。

用于主报表的SQL查询。只有"Releases“表用于显示每个部件发送的数量和时间。DelType=0正在指定客户交付。日期范围由用户输入的参数定义。

主报告

代码语言:javascript
复制
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的datetime链接(因为它没有工作,所以目前没有在参数处链接),并且只选择客户返回的记录,从而导致返工、报废、排序或修复。

子报告

代码语言:javascript
复制
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'

质量趋势示例数据

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-08 22:51:08

首先,我要感谢Digital.Aaron。你在解决这个问题上的帮助是非常感谢的。

你的回答非常接近我所需要的。在将额外的行添加到SQL语句之后,我仍然无法让子报表显示任何数据,所以我尝试了一些不同的东西。我在公式字段中做了额外的陈述。

主报表字段

DATEADD("D", -1*(DATEPART("D",{Releases.DateComplete})-1),{Releases.DateComplete})

子报告字段

DATEADD("D", -1*(DATEPART("D",{CustReturn.DateEnt})-1),{CustReturn.DateEnt})

我使用这些字段作为主报表和子报表之间的链接,但仍然无法获得要显示的数据。结果,问题是在子报表的记录选择公式中将它们设置为=。我把公式命名为DatePeriod

原始记录选择

{@DatePeriod} = {?Pm-@DatePeriod}

修改的记录选择

{@DatePeriod} in Date({?Pm-@DatePeriod})

一旦我做了改变,一切都安排好了。

再次感谢,

杰夫

票数 1
EN

Stack Overflow用户

发布于 2018-10-03 18:42:52

所以看起来你是在Releases.DateComplete上分组。让我们假设这个值对于与给定月份相关的所有记录都是相同的。我们还假设Shipments的以下(简化)示例数据

代码语言:javascript
复制
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数据需要如下所示:

代码语言:javascript
复制
ReturnDate   | PartNo | Qty | DateComplete
01/15/2018   | 0031   | 7   | 01/31/2018

注意,它们都有一个DateComplete列。

现在,在水晶报表模板中,您将使用主报表结果集中的DateComplete字段作为子报表参数的输入。您的设计布局在这里看起来是正确的,因为您希望在组页脚中调用子报表。

编辑:所以看起来,对于给定月份的所有记录,DateComplete都不是相同的。这很好。我们将在主查询和子报表查询中添加一个列,该列对于给定月份中的所有记录都是相同的,然后我们可以使用该列链接记录。

您的主要查询将变成:

代码语言:javascript
复制
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'}) 

然后,您的子报表查询将变成:

代码语言:javascript
复制
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字段。您还可以考虑将此字段作为组的字段,而不是月份值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52617717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档