Professional Documents
Culture Documents
Transactional Reporting in The Real World With OBIEE
Transactional Reporting in The Real World With OBIEE
Session #27777
#
March 2, 2010
[NQODBC] [SQL_STATE: S1000]
[nQSError: 10058] A general error has
occurred.
[nQSError: 14026] Unable to navigate
requested expression. Please fix the
metadata consistency warnings.
The Florida State
University
Nullable Join
nvl(DR.c1 , 88.0) = nvl(SR.c1 , 88.0)
and nvl(DR.c1 , 99.0) = nvl(SR.c1 , 99.0)
Physical Layer Issues
• Nulls
– The 88.0 and 99.0 are auto generated based
on the field being null.
– For Char/Varchar fields a ‘q’ or ‘z’ are
used.
– Very dangerous especially if the join
field contains the above null replacement
characters.
– Null when not nullable – Correct answer
but can’t use index
– Nullable when not null – Incorrect answers
as an equal join would be used thereby
removing rows from the result set which
could be relevant.
Physical Layer Issues
• Recommended Join Structure
– Get it right the first time, physical
joins are typically never touched after
initial implementation.
– All joins should be PK/FK
– This will (in most cases) guarantee
insulation against typical errors which
OBIEE generates due to not using
standard dimensional model
– Only ONE PK should exist on each table.
– Driving tables are your friend; as long
as you know the data structure.
Physical Layer Issues
• Row level security
– Delivered is handled via joins to SJT
tables
– In our case we found it to be better
performing by using the content filtering
options on a logical table source.
– Must be applied to each pseudo fact table
in order to achieve row level security
– Removes the need for a join by simply
placing the restriction in a where
clause.
– Must use Repository variable(s) in order
to use this method.
Physical Layer Issues
• Federated Joins
– Federated joins should be avoided at ALL
costs.
– If reduction in federated joins isn’t
possible; you should always set driving
tables in order to reduce cost
– Tune MAX_PARAMETERS_PER_DRIVE_JOIN to
control how many in list operators can
be sent per query of a drive.
– Tune MAX_QUERIES_PER_DRIVE_JOIN to
control the number of queries can be
sent to formulate a driving join result
set.
Physical Layer Issues
• Poorly Tuned Database features
– Just because it’s the default doesn’t mean
it’s correct!
– Most defaults take a very reserved
approach as to limit errors in the BI
Server.
– Common objects which should be
investigated are:
COUNT_DISTINCT_SUPPORTED
DERIVED_TABLES_SUPPORTED
CASE Statement Support
Running Aggregate support(IE,
Sum,Count,etc)
Logical Layer Issues
• Calculations in the Logical Layer
– Keep one thing in mind when developing
Logical objects; keep the objects as close
to the database as possible.
Ex: Given the below Case statements,
imagine having 20 or so fields in the same
scenario listed below. Those fields join
to 5 smaller code lookup type tables. You
create and answers document which has 5
fields used in the filter and return all
20 fields with a sum on each one.
Case when “Field1” = ‘A’ then 1 else 0 end
Case when “Field2” = ‘A’ then 1 else 0 end
Case when “Field3” = ‘A’ then 1 else 0 end
Logical Layer Issues
• Problems?
– The resulting SQL would contain somewhere
in the neighborhood of 4.25 MILLION
characters.
– The compile time for OBIEE to even generate
the SQL could well exceed 70 seconds
– The BI Server process is pegged at 100%
just to generate this SQL query for the 70
seconds mentioned above.