Search code examples
business-objects

Cube vs. Micro Cube in BusinessObjects


I am having problems understanding cubes and microcubes in BusinessObjects environment. Although I have tried to find answers online, I did not find an answers that give overall explanations. Beside description of the functionality, I would like to know where is cube and where is micro cube located: on server or in browser? How many cubes/microcubes are there? One microcube per report or one micro cube per session, or sthg else?

Furthermore, can anyone explain the difference in aggregations on database level as opossed to aggregation on report level (when defining a measure, there are two possibilities - to define aggregation on report and/or aggregation level). Although there are some answers online, they are too general. Therefore, I would appreciate a simple explanation with an example.

And finaly, is it possible to color tables in data foundation layer? (since I have a lot of tables in a universe, it would be very helpful if I could color fact and dimensional tables).


Solution

  • It helps to understand the two-pass nature of querying traditional (non-OLAP) data in BO. When you refresh a report in BO, the report engine constructs a SQL statement based on the objects (results and conditions) that are specified in the query.

    The SQL statement is sent to the database, and the report engine then retrieves the data that is returned from the database. This data becomes the microcube -- it is nothing more than a tabular representation of the data that was received from the database. If you could look at it visually, it would look identical to what you would get by running the SQL statement in a traditional SQL tool (such as TOAD or SQL*Plus).

    The microcube then becomes the source for the report presentation. Your could, for example, create a table in a report by dragging in dimensions and measures from the object list. As you are dragging in these objects, the table will recalculate and redisplay as appropriate. This is all done by retrieving and calculating the data from the microcube, not from the source data. That is, as you are interacting with a report tab, you are not initiating a refresh from the database -- all of the calculation is done from the microcube.

    For example, let's say you have created a new query with two dimensions (State, Region) and one measure (Sales). The SQL might look like this:

    select state_nm,region_nm,sum(sales_amt)
      from all_sales
     group by state_nm,region_nm
    

    Note that there is a sum() applied to sales_amt. This is causing the database to perform the initial aggregation on this field.

    The microcube that is created after the refresh may look like:

    AL    North     30000
    AL    South     40000
    AR    North      5000
    AR    South     10000
    

    Now you create a table in your report, and select just State and Sales. The report engine uses the data in the microcube to display the result:

    AL     70000
    AR      5000
    

    In this case, the BO report engine has performed a sum() aggregation on Sales Amt. This is report-side aggregation.

    Then you remove State. Again, the report engine aggregates the table from the microcube, not the database:

    75000
    

    The microcube is stored with the report file. If you are working with a WebI report via InfoView, then the microcube is loaded into the server's memory. When you save the report, a physical file is created on the server (with a .wid extension); the microcube is stored in that file. If you open the report again, the microcube is again loaded into the server's memory and is available for interaction.

    If you are using Rich Client, then the same behavior applies, it's just using your workstation and local storage.

    The term "cube" is generally used to describe data sources in an OLAP environment (SSAS or Essbase, for example). This is external to BO -- BO would be querying data from an OLAP cube.