Instead of indexing just PIDType on subnetDim, suggest using this compound index:
INDEX(PIDType, subnet_key)
That should change the EXPLAIN to saying "using index", and be a little faster.

Similarly add
INDEX(customer_name, b2bunit_key)
to B2BUnitDimension.

The optimizer may pick one of those indexes sometimes, then pick the other one other times. Alas, it can't really use both.

The real problem is that the WHERE clause is split between two tables:
AND subnetDim.PIDType = 'LOCAL'
and b2bDim.customer_name = 'turktel'
so the optimizer has to carry lots of rows form one of the tables before throwing them away when it gets to the other one. This is sometimes a problem with a properly 'normalized' data warehouse design.

Well, maybe you could trick it into using both indexes...
SELECT ...
FROM FACT
JOIN ( select subnet_key from subnetDim where PIDType = 'LOCAL' ) ON ...
JOIN ( select b2bunit_key FROM b2bDim WHERE customer_name = 'turktel' ) ON ...

Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion
of Oracle or any other party.