我正在尝试使用以下数据在Crystal Reports中创建一个公式,该数据将计算当前RunDt中DxLoaded的差异减去两个数据源中每个数据源的上个月RunDt。每个月都会填充一个新的RunDt。刷新报表时,我需要使用最新的RunDt计算公式,将其与每个数据源的先前RunDt进行比较。
例如,我想计算1203 RunDt的5,491,932减去1202 RunDt的3,830,842。然后让公式为可能填充的每个数据源执行该操作。对于相同的数据源,2012年也将有服务年度,并希望2011年与2011年和2012年相比仅与2012年相比。我尝试使用之前的功能,但没有幸运获得正确的结果。
Yr Data_Source RunDt_YYMM DxLoaded
2011 ABS 1203 5,491,932
2011 ABS 1202 3,830,842
2011 IALT 1203 9,193,144
2011 IALT 1202 6,578,678
2012 ABS 1203 1,837,900
2012 ABS 1202 1,083,124
2012 IALT 1203 4,223,111
2012 IALT 1202 2,985,543
非常感谢任何建议的帮助!!
谢谢!
答案 0 :(得分:0)
这种问题很容易陷入困境。诀窍是通过使用rundt列将表连接到自身来对查询中的数据进行排序。您可以使用自定义命令在Crystal中执行此操作,或者我更喜欢在SQL中创建视图或存储过程。例如:
SELECT *
INTO #TEMP
FROM (
SELECT 2011 Yr, 'ABS' Data_Source, '1203' RunDt_YYMM, 5491932 DxLoaded
UNION SELECT 2011 Yr, 'ABS' Data_Source, '1202' RunDt_YYMM, 3830842 DxLoaded
UNION SELECT 2011 Yr, 'IALT' Data_Source, '1203' RunDt_YYMM, 9193144 DxLoaded
UNION SELECT 2011 Yr, 'IALT' Data_Source, '1202' RunDt_YYMM, 6578678 DxLoaded
UNION SELECT 2012 Yr, 'ABS' Data_Source, '1203' RunDt_YYMM, 1837900 DxLoaded
UNION SELECT 2012 Yr, 'ABS' Data_Source, '1202' RunDt_YYMM, 1083124 DxLoaded
UNION SELECT 2012 Yr, 'IALT' Data_Source, '1203' RunDt_YYMM, 4223111 DxLoaded
UNION SELECT 2012 Yr, 'IALT' Data_Source, '1202' RunDt_YYMM, 2985543 DxLoaded
) A
SELECT * FROM #TEMP
SELECT
a.Yr, a.Data_Source, a.RunDT_YYMM, a.DxLoaded, b.DxLoaded PrevDxLoaded
FROM
#TEMP a
LEFT OUTER JOIN
#TEMP b
ON
b.Yr = a.Yr
AND
b.Data_Source = a.Data_Source
AND
b.RunDT_YYMM = CASE WHEN RIGHT(a.RunDT_YYMM,2) = '01' THEN
CAST(CAST(a.RunDT_YYMM as INT) - 89 AS VARCHAR(4))
ELSE
CAST(CAST(a.RunDT_YYMM as INT) - 1 AS VARCHAR(4))
END
结果:
Yr Data_Source RunDT_YYMM DxLoaded PrevDxLoaded
2011 ABS 1202 3830842 NULL
2011 ABS 1203 5491932 3830842
2011 IALT 1202 6578678 NULL
2011 IALT 1203 9193144 6578678
2012 ABS 1202 1083124 NULL
2012 ABS 1203 1837900 1083124
2012 IALT 1202 2985543 NULL
2012 IALT 1203 4223111 2985543
答案 1 :(得分:0)
假设您希望输出按问题中给出的顺序显示,并且您希望差异显示在数据源和年份的最新RunDt_YYMM
值旁边:
Yr
升序,Data_Source
升序,RunDt_YYMM
降序。 (应该可以在查询中或在Crystal Record排序专家中执行此操作。)
if NextIsNull ({SummaryTable.Yr}) then 0 else
if {SummaryTable.Data_Source}=Next({SummaryTable.Data_Source}) and
{SummaryTable.Yr}=Next({SummaryTable.Yr})
then {SummaryTable.DxLoaded} - Next({SummaryTable.DxLoaded})
DxLoaded
字段旁边的报告详细信息部分。