daledog9
asked on
Filter Aggregate Data in Oracle Data Integrator 11g
I am having difficulting figuring out Oracle Data Integrator and how to filter an aggregate column,
for example - I am taking data from a source and aggregating it to a target. Within one of the target fields I would like to filter - here is the scenerio
Source: Table1
order_number
line_item
quantity
unit_price
option
Target: Aggregate_Table_1
total_cost = sum(quantity*unit_price)
total_cost_less_options = sum(quantity*unit_price) where option='N'
I am having difficulting for the mapping for total_cost_less_options in ODI interface, when I create the implementation I am not getting the syntax correct.
Thanks.
for example - I am taking data from a source and aggregating it to a target. Within one of the target fields I would like to filter - here is the scenerio
Source: Table1
order_number
line_item
quantity
unit_price
option
Target: Aggregate_Table_1
total_cost = sum(quantity*unit_price)
total_cost_less_options = sum(quantity*unit_price) where option='N'
I am having difficulting for the mapping for total_cost_less_options in ODI interface, when I create the implementation I am not getting the syntax correct.
Thanks.
ASKER
I agree, the sql is very straight forward - but I cannot figure out how to use the expression builder in ODI to get my results. When I run straight SQL I get my desired results, but I keep getting errors when writing the same code the expression builder within ODI.
ASKER
to further explain my note above ...
In the mapping view of the Interface for the fields -
Implementation for total_cost field = sum(quantity*unit_price)
No errors
Implementation for total_cost_less_options field = sum(quantity*unit_price) where option='N'
Receive error: java.sql.SQLSyntaxErrorExc eption: ORA-00923: FROM keyword not found where expected
I found under quick edit tab where you can create a filter, but I do not want the entire dataset filtered, just the calculated field of total_cost_less_options
In the mapping view of the Interface for the fields -
Implementation for total_cost field = sum(quantity*unit_price)
No errors
Implementation for total_cost_less_options field = sum(quantity*unit_price) where option='N'
Receive error: java.sql.SQLSyntaxErrorExc
I found under quick edit tab where you can create a filter, but I do not want the entire dataset filtered, just the calculated field of total_cost_less_options
I apologize. I didn't see the ODI reference when I first read the question.
I've never used the product myself so this is a huge guess but try something like:
total_cost field = sum(case when option = 'N' then quantity*unit_price else 0 end)
I've never used the product myself so this is a huge guess but try something like:
total_cost field = sum(case when option = 'N' then quantity*unit_price else 0 end)
ASKER
Thank you for adding the additional zones. The syntax you suggested pass the check, but now it's failing during executing with ORA-00920: invalid relational operator. It does not seem to be processing the group by properly as it performs that automatically- or rather I am not understanding how ODI works in respect to group by.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
daledog9,
Can I ask why I didn't get partial credit?
I gave you everything except I missed "from (". A pretty simple typo correction nav just beat me to it.
Can I ask why I didn't get partial credit?
I gave you everything except I missed "from (". A pretty simple typo correction nav just beat me to it.
updating/inserting int the aggregate table should be straight forward:
select order_number,
sum(options) over(partition by order_number order by order_number) options_price,
sum(unit_price) over(partition by order_number order by order_number) total_price
select order_number, case when option='N' then 0 else unit_price end options, unit_price
from table1
)