Universe Best Practices
Business Objects Designer Basic Rules:
- Keep the number of objects to 700 - 800
- Larger universes will require more memory to use - This means more Java runtime memory allocated for Web Intelligence users
- Reduce complexity where possible
- Focus your universe efforts
- Test how this universe will work
- Implement this universe as one piece of an overall strategic solution
- Minimize your maintenance
Classes
are group logically related business terms (objects) together.
Best practices for classes include:
- Naming conventions
- Descriptions
- Layout
- Nesting limits (classes within classes)
Layout and Organization
- Limit to 20 – 25 objects per class
- This will reduce scrolling through long lists
- Use subclasses and detail objects
Determine how objects will be listed:
Most commonly used is most popular or Alternatives:
- Alphanumeric
- Order by type (dates, calculations, …)
- Hierarchically (general to specific)
- Fastest to execute when placed in conditions.
Objects
(table columns re-named with business terms)
Descriptions:
- Add help text for EVERY object
- Add a description then several examples
- Add format (MM/DD/YY) on the first line
- Optional: Add class location for the object
Objects
Object SQL:
- Use the SELECT clause editor to select tables/columns (This will help avoid silly spelling errors)
- Always parse objects!
Complicated SQL
- Build the desired object in layers
- Create objects that will be referenced using @SELECT
- In this way, very complicated SQL expressions can be created
Sum( @Select(Resort\Europe Flag) * @Select(Sales\2000 Flag) *
Invoice_Line.days * Invoice_Line.nb_guests * Service.price )
The WHERE Clause
- Avoid adding SQL in the WHERE clause of any object
- This is especially true for ad-hoc universes
- WebI will combine those conditions using ‘AND’
for example :
1999 Revenue: WHERE to_char(Sales.invoice_date,'YYYY') = '1999'
WHERE to_char(Sales.invoice_date,'YYYY') = ‘2000'
2000 Revenue
WHERE created in the report query :
to_char(Sales.invoice_date,'YYYY') = ‘1999‘
AND
to_char(Sales.invoice_date,'YYYY') = ‘2000
- Use DECODE or CASE logic in the SELECT clause instead
- Our flag logic presented earlier works well here
- plus is that the yearly test is reusable!
- Condition objects could also be used
- Users can change AND to OR in the query panel.
Objects Calculations
Certain ratios (a/b) should be created by distributing the functions
- SUM(a)/SUM(b) rather than SUM(a/b)
- This allows the calculation to cover the group, not just the transaction
- Count using the DISTINCT keyword
- COUNT(DISTINCT )
Calculation Projections
- Use the Delegated Measure feature for AVG, %
- This forces the report writer to re-run SQL every time dimensions or details within the block change
- This prevents incorrect calculations
- Can’t automatically calculate the average of an average
Condition Objects
- Condition objects act as pre-programmed query filters
- Great for frequently used and difficult conditions
- Subqueries, correlated subqueries
- Once created, users can combine in a query using AND, OR
Conditions added to classes
- Every object inside the class inherits the condition
- Different from security restrictions – not based on a group or user
- Much better than trying to restrict objects based on implicated tables
Objects Formatting
- Formatting objects as they will appear in reports means saving lot of time for users
- Format once in the universe rather than once per report
Delegated measures
Business Objects performance tuning
Delegated measures
Business Objects performance tuning
Comments
Post a Comment