- essbaseessbase.ru/uploads/aso/optimizing aso.pdfthe following is intended to outline our general...

Post on 17-Mar-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

<Insert Picture Here>

Optimizing ASO

Steve LiebermenschConsulting Technical Director

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions.The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Agenda

• Dimension settings and usage– Compression– Accounts– Time

• MDX optimization• Materialization• Data load

Dimension Settings and UsageCompression

• Compression dimension is not mandatory, but helps performance

• The compression dimension is a dynamic dimension• Should be the column headers in a data load file• Ideal compression is achieved if the leaf level

member count is evenly divisible by 16

Dimension Settings and UsageAccounts

• Dynamic dimension• Allows for non additive unary operators• Required for time balance functionality• Expense flags are accomplished through UDAs and

member formulae• In the case of large GL type accounts dimensions

should consider storing the dimension

Dimension Settings and UsageAccounts

Must be a dynamic dimension due to “-”unary operator

Dimension Settings and UsageAccounts

Simplest hierarchy and allows for maximum stored aggregates. Leverages load rule setting

of sign flip on UDA. Requires the user to accept different signage of values.

Dimension Settings and UsageAccounts

Preserves original signage and allows for some aggregates to be stored

Dimension Settings and UsageTime

• Can make a good candidate for compression dimension

• Should be stored• Use multi-hierarchy dimension if formulae are

necessary• To-date formulae

– Prior to 9.3.1 best if performed in Time dimension– 9.3.1 and forward, best to use analytic dimension

Dimension Settings and UsageTime

• Use analytic dimension if you need perform time calculations like period to date sums, period over period comparisons

• Use AGGREGATE function if your period to date calculations need to take Time Balance tags into account

ORACLE CONFIDENTIAL

Agenda

• Dimension settings and usage• MDX optimization

– Data vs. meta data– Eliminate unnecessary functions– Simplify syntax– NonEmpty directive

• Materialization• Data load

MDX OptimizationMeta-data vs data

Performance difference between the following statements:

IIf(Scenario.CurrentMember = Actual,….)

Or

IIf(Is(Scenario.CurrentMember,Actual),….)

MDX Optimization

Goal is to calculate a products 3 month average Transactions contribution % to total 3 month average Transactions:

MDX Optimization

Round( ( ( ([Time].CurrentMember,[Products].CurrentMember,[Transactions]) +

([Time].CurrentMember.Lag(1),[Products].CurrentMember,[Transactions]) +

([Time].CurrentMember.Lag(2),[Products].CurrentMember,[Transactions]) ) /

(([Time].CurrentMember,Ancestor (Products.CurrentMember, Products.Generations(2)),[Transactions]) +

([Time].CurrentMember.Lag(1),Ancestor (Products.CurrentMember, Products.Generations(2)),[Transactions]) +

([Time].CurrentMember.Lag(2),Ancestor (Products.CurrentMember, Products.Generations(2)),[Transactions]) ) )

,4)

MDX Optimization

Round( ( ( ([Time].CurrentMember,[Products].CurrentMember,[Transactions]) +

([Time].CurrentMember.Lag(1),[Products].CurrentMember,[Transactions]) +

([Time].CurrentMember.Lag(2),[Products].CurrentMember,[Transactions]) ) /

(([Time].CurrentMember,Ancestor (Products.CurrentMember, Products.Generations(2)),[Transactions]) +

([Time].CurrentMember.Lag(1),Ancestor (Products.CurrentMember, Products.Generations(2)),[Transactions]) +

([Time].CurrentMember.Lag(2),Ancestor (Products.CurrentMember, Products.Generations(2)),[Transactions]) ) )

,4)

Remove unnecessary functions. Formatting should be left to the

reporting tool.

MDX Optimization

( ( ([Time].CurrentMember,[Products].CurrentMember,[Transactions]) + ([Time].CurrentMember.Lag(1),[Products].CurrentMember,[Transactions])

+ ([Time].CurrentMember.Lag(2),[Products].CurrentMember,[Transactions])

) / (([Time].CurrentMember,Ancestor (Products.CurrentMember,

Products.Generations(2)),[Transactions]) + ([Time].CurrentMember.Lag(1),Ancestor (Products.CurrentMember,

Products.Generations(2)),[Transactions]) + ([Time].CurrentMember.Lag(2),Ancestor (Products.CurrentMember,

Products.Generations(2)),[Transactions]) ) )

Avoid unnecessary references to CurrentMember. It is

assumed without explicitly using a function

MDX Optimization

( ( ([Time].CurrentMember,[Transactions]) + ([Time].CurrentMember.Lag(1),[Transactions]) + ([Time].CurrentMember.Lag(2), [Transactions]) ) / (([Time].CurrentMember,Ancestor (Products.CurrentMember,

Products.Generations(2)),[Transactions]) + ([Time].CurrentMember.Lag(1),Ancestor

(Products.CurrentMember, Products.Generations(2)),[Transactions]) +

([Time].CurrentMember.Lag(2),Ancestor (Products.CurrentMember, Products.Generations(2)),[Transactions]) ) )

Simplify formulae, no need to use 5 functions where 1 will

do. 3 CurrentMemberfunctions and 2 Lag

functions

MDX Optimization

Sum(LastPeriods(3),Transactions)/ Sum(LastPeriods(3),(Ancestor (Products.CurrentMember,

Products.Generations(2)),Transactions))

Don’t use a function where direct referencing can be

performed. In this model Gen 2 of the Products dimension

will always be the same member

MDX Optimization

Sum(LastPeriods(3),Transactions)/ Sum(LastPeriods(3),([All Merchandise],Transactions))

MDX Optimization

Case When NotIsEmpty(Sum(LastPeriods(3),Transactions)) Then

Sum(LastPeriods(3),Transactions)/ Sum(LastPeriods(3),

([All Merchandise],Transactions))End

Only perform calculation when data to support the math exists

MDX Optimization

Additionally you should break up the complex formula using an additional member:

Create a new member [Last 3 Month Transactions]Assign the formula:

Sum(LastPeriods(3),Transactions)

Then the new % Contribution formula becomes:NonEmptyMember [Last 3 Month Transactions]

Sum(LastPeriods(3),Transactions)/ Sum(LastPeriods(3),([All Merchandise],Transactions))

NonEmpty directive, coming in 11.1.1

Agenda

• Dimension settings and usage• MDX optimization• Materialization

– Query Hints– Default– Query Tracking– Size – Choose your own adventure/have it your way materialization

• Data load

Materiaization

• Query Hints• Default• Query Tracking• Size • Choose your own adventure/have it your way

materialization

MaterializationQuery hints

• On Dimension/Hierarchy

MaterializationQuery hints

• Dimensional intersections

MaterializationDefault

• In Analytic Administration Services

• Through Maxl– execute aggregate process on database “database name” ;

MaterializationQuery tracking based

• In Analytic Administration Services

• Through Maxlalter database “database name” enable query_tracking; MDX report definition;execute aggregate process on database “database name”

based on query_data;alter database “database name” disable query_tracking;

Materialization

• Results of aggregate selection– Default selection

• 26 views– Hierarchy option

• 24 views– Dimensional Intersection

• 24 views– Query Tracking

• 2 view– No views were shared amongst all 4 aggregate selection

processes– Only 2 views were shared between more than 2 selection

processes– 7 views were shared in total

MaterializationDatabase size

• In Analytic Administration Services

• Through Maxl– execute aggregate process on database “database name”

stopping when total_size exceeds “size factor”;

MaterializationNumber of views

• In Analytic Administration Services

• Through Maxl– execute aggregate selection on database “database name”

selecting “number of views” views;

Materialization

• By default Aggregate Storage Option is parallel threaded with two threads, can use up to 8

• When loading incremental data, aggregate views are also updated

• Materialization scripts can be saved and reused to eliminate regeneration of query tracked results

• The database can be available during materialization without data consistency issues

Agenda

• Dimension settings and usage• MDX optimization• Materialization• Data load

– Behavior– Slice loading– Optimization

Data LoadBehavior

• Within a buffer duplicate records are additive irrelevant of load rule settings

• When committing the buffer it adheres to data load rule setting related to overwrite, add to, or subtract from

• Single threaded, can use DLTHREADS cfg settings but thorough testing should be performed

• Materialized views are updated as part of the data load process during an incremental update

Data LoadSlice loading

• Is the primary feature enabling Excel based lock and send and trickle feeding functionality

• Creates “subcubes” alongside the primary slice of the database

• Dynamic aggregations are performed across the necessary slices to provide query results

• Different materialized views might exist within a slice as compared to the primary slice of the database

Data LoadOptimization

• Compression dimension should be across the load file• Consider removing aggregate views prior to an

incremental update of data• Data should be loaded as additive values• Multiple buffers can be used to parallel load the

database. Requires simultaneous Maxl processes to be executed

• Ignore Zeros and Missing values whenever possible, buffer setting

<Insert Picture Here>

Questions?????

top related