I don't believe that Impromptu is capable of correctly joining a conformed dimension to multiple fact tables. Business Objects can join multiple fact tables by defining "contexts" which set up multi-pass SQL. I've also just posted a question similar to this one on comp.databases.olap and on Cognos's support pages, so if I'm wrong and someone knows of a way I too would appreciate hearing about it.
Below, is the Oracle ddl and the SQL statement that demonstrates Impromptu's chasm trap/cartesian product problem. At the logical level though, think of it this way: if I join a parent to a child table, the primary key of the returned set IS NOT the primary key of the parent table, it's the concatenation of the parent primary-key and the child primary-key. If I then join this new result set to another child table, I'm apt to have a many-to-many relationship between the parent primary-key -- and hence a cartesian product or chasm trap.
create table t_parent (parent_id number, parent_dsc varchar2(20));
insert into t_parent values (1,'balls');
insert into t_parent values (2,'bats');
insert into t_parent values (3,'mits');
commit;
create table t_child1 (child1_id number, parent_id number, child1_dsc varchar2(20), sales number);
insert into t_child1 values (1,1,'feb sales',400);
insert into t_child1 values (2,1,'mar sales',300);
insert into t_child1 values (3,1,'apr sales',100);
insert into t_child1 values (4,2,'mar sales',600);
insert into t_child1 values (5,3,'mar sales',200);
commit;
create table t_child2 (child2_id number, parent_id number, child2_dsc varchar2(20), costs number);
insert into t_child2 values (1,1,'feb costs',200);
insert into t_child2 values (2,1,'mar costs',100);
insert into t_child2 values (4,2,'mar costs',300);
insert into t_child2 values (5,3,'mar costs',250);
commit;
select a.parent_id, a.parent_dsc, sum(b.sales), sum(c.costs)
from t_parent a, t_child1 b, t_child2 c
where a.parent_id = b.parent_id and
a.parent_id = c.parent_id
group by a.parent_id, a.parent_dsc;
Sales for bats is reported as 1,600 whereas it should be 800 according to the rows in t_child1. Costs for bats is reported as 900 whereas it should be 300 according to the rows in t_child2. These values of sales and costs for bats is erroneously reported because every row in t_child1 is joined with every row in t_child2.