You can set the priority group for LTS1 and LTS2 to make LTS2 a higher priority than LTS1.
Priority group numbers rank your logical table sources in numeric order, with 0 being the highest-priority source.
In your case you seem to want to use LTS2 when only A1, B1, C1, M1 are selected, and use LTS1 only when D1 is part of the query.
So change the priority group number and you can also rename them to have the order LTS2, LTS1, LTS3.
OBIEE will know that if you request D1 it can't use LTS2, so it will jump directly to LTS1.
This is not helping. When D1 is selected it goes to LTS2 and for D1 automatically it selects blank.
I have tried following priority group setting for LTS2, LTS1, LTS3 respectively.
1 , 2 , 0
1 , 1 , 0
0, 1 , 0
am i doing anything incorrect.
I don't see why OBIEE would use a LTS knowing it doesn't have a column. Did you check all the content levels are set correctly?
Content levels and any unnecessary joins (retrieving attributes from a dimension into the fact for calculations for example) which could force the inclusion.