Печатать общую зарплату всех сотрудников по данным каждого сотрудника
Вход у меня есть
empid salary
10 1000
20 2000
30 3000
40 5000
желаемый результат в datastage 9.1 является
empid salary totalsal
10 1000 11000
20 2000 11000
30 3000 11000
40 5000 11000
Решение, которое я нашел, показано на рисунке ниже. Мой вопрос заключается в том, есть ли какой-нибудь простой способ для достижения этого желаемого результата, который я не мог придумать. Спасибо, что нашли время, чтобы прочитать это
1 ответ
Здесь вы можете использовать преобразователь (обратите внимание, что вы включаете последовательный доступ в преобразователе. В остальных разделах будет вычислено неправильное значение). Итак, теперь сохраните переменную этапа (скажем, svarTotSal), которая будет складывать зарплату для каждой записи. Затем просто удалите поле с TOTAL_SALARY на выходе трансформатора и в деривации дайте svarTotSal. Что будет делать.
Спасибо Сурабх
Это типичный пример соединения вилки. Вы разбиваете данные, чтобы получить агрегацию, и присоединяете их к исходным данным. Это также способы сделать это в SQL (с подвыбором). Альтернативой может быть трансформатор с петлей. Вы спрашиваете о простом методе - так что же такое "легкий"? Трансформатор будет только одной ступенью, а вам нужно больше, но, с другой стороны, это может быть понятнее и, следовательно, проще.
Краткое объяснение, как это можно сделать с помощью петли на стадии трансформатора.
- Используйте SaveInputRecord() для хранения данных группы
- Совокупная заработная плата (для группы)
- Получить сохраненные строки с помощью GetSavedInputRecord(), когда LastRowInGroup() имеет значение true
Делать это по всем данным можно было бы даже без группировки.