Сравнение данных за месяц - PullRequest
0 голосов
/ 07 марта 2012

Я пытаюсь создать формулу в Crystal Reports, используя приведенные ниже данные, которые будут вычислять разницу DxLoaded в текущем RunDt минус RunDt предыдущего месяца для каждого из двух источников данных. Каждый месяц будет заполняться новый RunDt. Когда отчет обновляется, мне нужно, чтобы формула рассчитывалась с использованием самого последнего RunDt, сравнивая его с предыдущим RunDt для каждого источника данных.

Например, я хотел бы рассчитать 5 491 932 для RunDt 1203 минус 3 830 842 для RunDt 1202. Затем попросите формулу сделать это для каждого источника данных, который может быть заполнен. Также будет год обслуживания 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  

Любая помощь предложений с благодарностью!

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 марта 2012

Предполагая, что вы хотите, чтобы выходные данные отображались в порядке, указанном в вопросе, и чтобы разность отображалась рядом с самым последним значением 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.
0 голосов
/ 07 марта 2012

Очень легко увязнуть в такой проблеме. Хитрость заключается в том, чтобы отсортировать данные в запросе, присоединив таблицу к себе, используя столбец rundt. Вы можете сделать это в кристалле, используя пользовательскую команду, или я предпочитаю создать представление или хранимую процедуру в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...