Fragmentation in OBIEE

We use fragmentation when we have fact or dimensional data in one or more different tables or data is splitted in different data sources. Then each logical table source represents one data segment.

For example, clients, in the first table are clients from A to M, in the second from M to Z.

Fragmentation of dimension

If our dimensional data is located on two or more physical tables in database (tables) or it is on separeted data sources then we can handle this by using UNION ALL views in physical layer.

However for testing this option we'll simulate this by using CHANNELS table. So we splitt it to a table CHANNELS_OTHER and CHANNELS. Fragmentation attrubur is CHANNEL_ID.


In our SALES fact table that we used here we use CHANNEL_ID from both tables CHANNELS and CHANNELS_OTHER.

Physical model, join:


SALES.CHANNEL_ID >- CHANNELS.CHANNEL_ID
SALES.CHANNEL_ID >- CHANNELS_OTHER.CHANNEL_ID

BMM:


Settings:



Test in Answers:


Result:


NQQuery.log:


We see that UNION ALL is generated.

If we choose:


NQQuery.log:


We see that the SQL is using only the second fragmented logical table source and the condition is applied only for that logical table source.

If we choose:


NQQuery.log:


If we now choose any other attribut (CHANNEL_CLASS) that is not CHANELL_ID which we used as a fragmentation key:


Then this condition is applied on both logical table sources CHANNEL and CHANNEL_OTHER:


Fragmentation of fact table

Let's split data for SALES 1998 in separate table SALES_HIST. Data from 1998 we leave in SALES.


Physical model, join:


SALES.TIME_ID >- TIMES.TIME_ID
SALES_HIST.TIME_ID >- TIMES.TIME_ID

BMM:


Settings (for a fragmentation key we choose CALENDAR_YEAR):



Test in Answers:


Result:


NQQuery.log:


If we choose:


NQQuerylog:


If we choose:


NQQuery.log:


If we now choose any other attribut (CALENDAR_MONTH_DESC) that is not CALENDAR_YEAR which we used as a fragmentation key:


Then this condition is applied on both logical table sources SALES and SALES_HIST:


In this post we showed how to combine different sources of information using fragmentation option. We see that at any moment we can see which source OBIEE takes while generating code.

Displaying duplicate values in OBIEE reports

Usually when you run a report in OBIEE it would suppress the duplicates by default and this behavior is acceptable in almost all the cases. But I recently came across a request where they wanted to display the duplicate values.
Here is screen shot of my report.
clip_image002
Since the Sales Amount has an aggregation rule sum defined on it, the report sums up the sale amount band groups by brand. I could display all the values for the Sales Amount by removing the aggregation rule from the measure. But this measure needs to have an aggregation rule. Or I could add some other column at the lowest grain.So here is an alternative.
Create a new column in the BMM layer (product table in this case) using an evaluate function.
EVALUATE(‘rownum’ AS INTEGER )
Adding this column in the report would display the duplicate values. You could hide the column as well.
clip_image004clip_image006
If you get this error uncheck the pref_internal_switch_join feature in the DB features in the physical layer.
State: HY000. Code: 10058. [NQODBC] [SQL_STATE: HY000] [nQSError: 10058] A general error has occurred. [nQSError: 46030] Field descriptor id 0 is beyond the maximum field count 0. (HY000)
clip_image008

Using Oracle OLAP Data With Oracle BI Suite Enterprise Edition