Professional Documents
Culture Documents
In the universe SQL parameters, the option, generate multiple queries for each
measure needs to be selected. This will generate separate SQL statement for each
measure and give the correct results. However, this method would not work, if a
dimension (for example date) occurs multiple times in the result set due to chasm
trap.
A better approach is to put the two joins in two different contexts. This will generate
two synchronized queries, thus solving the problem.
On the other hand in a data warehouse based on Inmon model, it is a normalized schema.
Though in such a case, universes are generally designed on Data Marts, which are
dimensional schemas (where fan traps should not occur). However, if a universe is built on
the DW (for the purpose of operational reporting), then a fan trap can occur in that universe
In the universe SQL parameters, the option, generate multiple queries for each
measure needs to be selected. This will generate separate SQL statement for each
measure and give the correct results. However, this method would not work, if a
dimension (for example date) occurs multiple times in the result set due to chasm
trap.
A better approach is to put the two joins in two different contexts. This will generate
two synchronized queries, thus solving the problem.
Aggregate awareness function is used in scenarios where we have same fact tables in
different grains. Using this function we can define only one object for the measures in the
fact tables as
@aggregate_aware(highest_level,lower level)
We also need to define dimensions for associated granularities and define their
incompatibilities with the corresponding facts through the aggregate navigation. This is
accesses through Tools -> Aggregate Navigation
The advantage is that in a Webi or Deski report when one drags the measure object with the
dimension object of a particular granularity, the measure column from the Fact table of the
corresponding granularity is selected in the BO default Query. If we did not use aggregate
awareness, we would need to define separate objects for each of the fact tables which would
be difficult to understand from a users point of view.
8. What are the 2 different approaches of implementing aggregate awareness? Which one is
better in terms of performance?
The 2 approaches are as follows:
1. Aggregate tables are built in the database, which contains the dimension fields(not
foreign keys) along with the aggregated measures. In the universe they are present
as standalone tables, i.e they are not joined with any dimensions. Aggregate aware
function is used to define both the dimensions and measures of such tables.
2. No aggregate tables are built in the database level. They contain the normal fact
table at different granularities. In the universe, aggregate aware is used only to
define the measures and aggregate incompatibility is set accordingly.
The first approach is better in terms of performance, since for the higher levels of
aggregation, all the information is obtained for a single table. However, a large scale
implementation of this approach in a dimensional schema is difficult. In most BI projects,
the second approach is preferred
9. What is a derived table? What is its utility?
A derived table is a table created in the universe using an SQL Query from database level.
The columns selected in the query become the columns of the derived table. A derived table
can be used for complex calculations, which are difficult to achieve in report level. Such
calculations are done in query level itself.
Another use of derived table can be to access tables from a different schema through a
dblink.
10. How is a derived table different from a view? Which one is a preferred solution?
A derived table is present only in the universe level, while a view is created in data base
level. Generally views are preferred since, in its case the onus of calculation remains on the
database and it does not load the BO server. However, in cases where developers do not
have access to database, derived table is the only solution.
11. How can we access one derived table from another?
We can access one derived table from another using the function @derived_table. The
syntax is:
@derived_table(Derived Table Name)
12. What is Index Awareness? How is it implemented?
Index awareness is a property of the universe, by means of which values in the filter
conditions of the queries/data providers built from the universe, are substituted by their
corresponding indexes or surrogate keys. Generally the values in the filter condition come
from a dimension table (like country etc) and we require a join with the fact table to get this
value.
However, if index awareness is implemented, this join is eliminated and the query filter
takes the equivalent index value from the fact table itself.
To implement index awareness, one needs to identify the dimension fields which are to be
used in query filter. In the Edit Properties of the object, we get a Keys tab. In this tab, the
source primary key of the table from which the object is derived needs to be defined as
primary key, and the database columns for all foreign key relationships with the other tables
also need to be defined here. Once this is done for all required dimensions, the universe will
become index aware
The advantage is that in a Webi or Deski report when one drags the measure object with the
dimension object of a particular granularity, the measure column from the Fact table of the
corresponding granularity is selected in the BO default Query. If we did not use aggregate
awareness, we would need to define separate objects for each of the fact tables which would
be difficult to understand from a users point of view.
2. No aggregate tables are built in the database level. They contain the normal fact
table at different granularities. In the universe, aggregate aware is used only to
define the measures and aggregate incompatibility is set accordingly.
The first approach is better in terms of performance, since for the higher levels of
aggregation, all the information is obtained for a single table. However, a large scale
implementation of this approach in a dimensional schema is difficult. In most BI projects,
the second approach is preferred
filter condition will convert the prompt values entered to their corresponding indexes and
eliminate the join with the dimension table
top of the report, it provides a very good means for analysis by the power users
without changing the core report in any way.
The Scope of Analysis pane sets the limit of drill down in the report. Suppose
we have a hierarchy defined in 3 levels, but if we set the scope of analysis is
set to 2 levels, the report will not be able to drill down to the 3rd level. We
can also remove objects showing in the scope of analysis pane and limit the
drill down
If the analysis level is set to custom, the objects from existing hierarchies can
be dragged in the scope of analysis panel to set the scope for drilldown in the
report. This has an advantage that we can drill down to more than 3 levels,
which is not possible in the normal level setting, since it is up to 3 only
Query as a Web Service: Using Query as a Web Service tool, we can create
a queries from the universe along with filter condition. The QAAWS qury panel
is similar to the WebIntelligence query panel. In Xcelcius dashboard, we can
create a QAAWS connection that would point to a particular Query and import
the data into the excel data sheet of the xlf
Business Intelligence Web Service: In this method, we can use the output
of a report directly in the Xcelcius dashboard. Using Webi Rich Client, we
export the report to repository, then select a block from the report, right click
and select Publish as Web Service option. However BIWS does not have a
connection of its own. We access this BIWS through a QAAWS connection
only.
dashboard, a Live Office connection is created andwe access this Live Office
excel sheet though thi connection
Scenario 1:
Suppose in a Universe structure we have tables as shown in the diagram
below. Tables A,B and C are in context ABC and C,E and F are in context CDE
Now if there is a requirement which requires a join between Table E and Table
B, we can define a new context BCDE. But what is the easiest way to
implement this?
Define a shortcut join between tables B and E. To do this, join the tables normally. Then
open the join editor and check the box shortcut join.
The join will show as a dotted line between the two tables. This kind of a join does not
create loop and cannot be placed in any context. The shortcut join between Table B and
Table E will only work when objects from both the tables are selected in the query panel of
report.
Scenario 2:
We have objects from 3 tables A,B and C in the query panel of a report. Among
them C is a lookup table which holds values with respect to keys. Table B holds
the foreign key to the table C. A filter condition is applied to Table C in Query
Level. The resulting Query is:
SELECT A.a, B.b
FROM
A,B,C
WHERE A.bfk=B.pk
AND
B.cfk=C.pk
AND
C.val=XXX
Now, we define Primary key and foreign key relations for Tables B and C.
Suppose the surrogate key corresponding to val XXX is 12. How will the
query change after implementing this index awareness?
B.cfk=12
The table C will be eliminated from the Query and the foreign key to C in table be will be
equated to 12, the key corresponding to XXX. The join with C will be eliminated.
Scenario 3:
A User named User1 wants a privilege of running a BO Report for 40 mins and
retrieving a report with row limit 40,000. However, in the SQL parameters of
the universe, the row limit is set to 10,000 and the execution time limit is set
to 10 mins. How can you give the user the required rights?
Go to Tools -> Manage Security Click on Mange Access Restrictions. Create a new
restriction. In the Controls tab of the restriction, set the row limit to 40,000 and execution
time limit to 40 mins.
In the Main Window, apply this restriction to User1
Scenario 4:
In a report we have a table like this:
Dim A
Dim B
Measure 1
AA
12
100
BB
34
50
CC
21
40
DD
43
90
EE
45
200
FF
54
75
There is a report filter applied on this block which restricts both DIM A and
DIM B in the table, i.e only select values of DIM A, DIM B and the
corresponding measures from the query are displayed in the table. Another
column needs to be added which will calculate the average for each row based
on the sum of Measure 1 in the table (not all values in report). What would be
the formula?
For this we will require the sum of Measure 1 in the table, which can be achieved only by In
Block keyword.
The formula will be:
Sum( Measure 1 ) / Sum( Measure 1 In Block )
Scenario 5:
In the embedded sheet of an Xcelsius dashboard, we have data like:
Field A
Field B
Field C
Field D
Xxx
Tyu
100
98
Xxx
Yyy
45
76
Xxx
Dev
56
87
Yyy
Wes
78
13
Yyy
Rid
200
106
In the dash board, we need a selector on Field A for a chart which will plot the
values of Field C and Field D against all Field B values against one Field A.
How can we achieve that?
This can be achieved using filtered rows. In the Selector Properties, select Insertion Type as
filtered rows and map the Labels by selecting all values of Field A(including the duplicates).
The labels will display unique values and when a particular value is selected, all rows corresponding to
the value of Field A will be selected as output. The chart component needs to be mapped to the output this
selector.