Печатать общую зарплату всех сотрудников по данным каждого сотрудника

Вход у меня есть

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 (с подвыбором). Альтернативой может быть трансформатор с петлей. Вы спрашиваете о простом методе - так что же такое "легкий"? Трансформатор будет только одной ступенью, а вам нужно больше, но, с другой стороны, это может быть понятнее и, следовательно, проще.

Краткое объяснение, как это можно сделать с помощью петли на стадии трансформатора.

  1. Используйте SaveInputRecord() для хранения данных группы
  2. Совокупная заработная плата (для группы)
  3. Получить сохраненные строки с помощью GetSavedInputRecord(), когда LastRowInGroup() имеет значение true

Делать это по всем данным можно было бы даже без группировки.

Другие вопросы по тегам