Crystal reports Crystal Reports:需要关于如何避免使用子报表的建议吗

Crystal reports Crystal Reports:需要关于如何避免使用子报表的建议吗,crystal-reports,Crystal Reports,我正试图写一个报告来访问一个非常大的数据库,这使得子报告的使用。。。至少可以说是不愉快的。在这种情况下,我如何避免它们: 我从一张病人就诊表开始。每次就诊都可以有多个重要读数(比如在“重要”表中,与就诊表是多对一),我需要每种类型的最小值和最大值。为此,我按患者就诊分组,然后使用公式计算最小/最大值,并将其显示在组页脚中。到现在为止,一直都还不错。但是,还有另一个表Orders,它也包含了该次访问的所有订单,我还想选择一些最小/最大值来显示该遭遇 为了避免使用子报表,我在抑制的详细信息中添加了一

我正试图写一个报告来访问一个非常大的数据库,这使得子报告的使用。。。至少可以说是不愉快的。在这种情况下,我如何避免它们:

我从一张病人就诊表开始。每次就诊都可以有多个重要读数(比如在“重要”表中,与就诊表是多对一),我需要每种类型的最小值和最大值。为此,我按患者就诊分组,然后使用公式计算最小/最大值,并将其显示在组页脚中。到现在为止,一直都还不错。但是,还有另一个表Orders,它也包含了该次访问的所有订单,我还想选择一些最小/最大值来显示该遭遇

为了避免使用子报表,我在抑制的详细信息中添加了一些公式,这些公式还可以找到这些订单值的最小/最大值,并显示在组页脚中。问题是Crystal只返回有医嘱的患者就诊(尽管是外部连接的),我需要的是所有可能有或可能没有任何医嘱的就诊的列表。让事情进一步复杂化的是,我还需要处理另一个订单表(一个用于药物,一个用于程序)。有什么想法吗

(visitID, patName, visitDate)
------------------------------------------------------------------
1, Patient A, July-24-2009
2, Patient B, July-25-2009

(visitID, line, medName, dosage)
------------------------------------------------------------------
1, 1, Aspirin, 200mg
1, 2, Aspirin, 500mg
2, 1, Codeine, 100mg
2, 2, Codeine, 200mg
2, 3, ValerianCap, 700mg

(visitID, line, procName, procType, cost)
------------------------------------------------------------------
1, 1, Xray-wrist, xray, $500
1, 2, Xray-elbow, xray, $300


您需要展平数据集我建议从查询开始

像这样的。注意:基本上,您是使用union来分别查询每个细节表的联接。完成后,您可以按记录类型分组,并为记录类型组创建多个分区(4个分区)。每个分区都有一个抑制条件(例如,当记录类型为Vitals时,Vitals分区将抑制)。现在,基本上您已经创建了组而不是子报告

SELECT
  'Vitals' As RecordType,
  Vitals.*,
  --Fields For Orders,
  --Fields For Medications,
  --Fields For Procedures  
FROM Visits 
LEFT JOIN Vitals ON Vitals.VisitId = Visits.VisitId 
UNION ALL
SELECT
  'Orders' As RecordType,
  --Fields for Vitals,
  Orders.*,
  --Fields For Medications,
  --Fields For Procedures  
FROM Visits 
LEFT JOIN Orders ON Orders.VisitId = Visits.VisitId
UNION ALL
SELECT
  'Medications' As RecordType,
  --Fields for Vitals,
  --Fields For Orders,
  Medications.*,
  --Fields For Procedures  
FROM Visits 
LEFT JOIN Medications ON Medications.VisitId = Visits.VisitId
UNION ALL
SELECT
  'Procedures' As RecordType,
  --Fields For Vitals,
  --Fields For Orders,
  --Fields For Medications,
  Procedures.*  
FROM Visits 
LEFT JOIN Procedures ON Procedures.VisitId = Visits.VisitId

您需要展平数据集我建议从查询开始

像这样的。注意:基本上,您是使用union来分别查询每个细节表的联接。完成后,您可以按记录类型分组,并为记录类型组创建多个分区(4个分区)。每个分区都有一个抑制条件(例如,当记录类型为Vitals时,Vitals分区将抑制)。现在,基本上您已经创建了组而不是子报告

SELECT
  'Vitals' As RecordType,
  Vitals.*,
  --Fields For Orders,
  --Fields For Medications,
  --Fields For Procedures  
FROM Visits 
LEFT JOIN Vitals ON Vitals.VisitId = Visits.VisitId 
UNION ALL
SELECT
  'Orders' As RecordType,
  --Fields for Vitals,
  Orders.*,
  --Fields For Medications,
  --Fields For Procedures  
FROM Visits 
LEFT JOIN Orders ON Orders.VisitId = Visits.VisitId
UNION ALL
SELECT
  'Medications' As RecordType,
  --Fields for Vitals,
  --Fields For Orders,
  Medications.*,
  --Fields For Procedures  
FROM Visits 
LEFT JOIN Medications ON Medications.VisitId = Visits.VisitId
UNION ALL
SELECT
  'Procedures' As RecordType,
  --Fields For Vitals,
  --Fields For Orders,
  --Fields For Medications,
  Procedures.*  
FROM Visits 
LEFT JOIN Procedures ON Procedures.VisitId = Visits.VisitId

看来这会奏效的。我创建了一个SQL命令,它处理了大部分逻辑,并且报表运行速度比子报表快得多。看起来这就可以解决问题了。我创建了一个SQL命令,它负责大部分逻辑,并且报表运行速度比子报表快得多。