как использовать запрос Oracle при отображении ODI 12c

#oracle #oracle-data-integrator

#Oracle #oracle-data-integrator

Вопрос:

У меня есть такая таблица:

  CREATE TABLE risk_test
 (id          VARCHAR2 (32) NOT NULL PRIMARY KEY,
 customer_id  varchar2 (40BYTE),
 risk number,
 day VARCHAR2(50 BYTE))
 insert into risk_test values(1,102,15,1);
 insert into risk_test values(2,102,16,1); 
 insert into risk_test values(3,104,11,1);  
 insert into risk_test values(4,102,17,2);
 insert into risk_test values(5,102,10,2);
 insert into risk_test values(6,102,13,3);
 insert into risk_test values(7,104,14,2);
 insert into risk_test values(8,104,13,2);
 insert into risk_test values(9,104,17,1);
 insert into risk_test values(10,104,16,2);
 

Я хочу рассчитать общий риск и сохранить результат в новой таблице. Итак, я создаю процедуру в ODI и записываю в нее этот запрос:

  create table risk_odi as
 SELECT o.*,ROUND (
           SUM (day_minus_day0 * risk) OVER (PARTITION BY customer_id)
         / SUM (day_minus_day0) OVER (PARTITION BY customer_id),
         5) AS total_risk
 FROM (SELECT rt.*, (rt.day - MIN (rt.day) OVER (PARTITION BY customer_id))   1 AS day_minus_day0
        FROM risk_test rt) o
 ORDER BY customer_id, TO_NUMBER (day), TO_NUMBER (id)
 

Результирующая таблица выглядит следующим образом:

введите описание изображения здесь

Мой вопрос заключается в том, что я хочу создать таблицу в сопоставлении; поэтому, не могли бы вы указать мне, как я могу выполнить приведенный выше запрос в сопоставлении, используя компонент Aggregate или компонент Expression?

Любая помощь действительно ценится.

Ответ №1:

Проблема решена. Я использую эту структуру при отображении:

введите описание изображения здесь

Сначала я использую фильтр, чтобы извлечь последние тридцать дней и сохранить их в таблице тридцатых дней. После этого я использую aggregate для группировки данных на основе customer_id и вычисления минимального дня в каждой группе. Затем объединение совокупного результата с тридцатым днем. Последний агрегат предназначен для вычисления total_risk на основе группировки customer_id. Наконец, я сохраняю данные в последнюю таблицу, которая является результатом.