The art of using calculations within Oracle Discoverer ODTUG 2006 Michael Armstrong-Smith Armstrong-Smith Consulting
Art of using calculations within Discoverer
Data is limited – imagination knows no bounds Please turn cell phones to mute If you must make or take a call, please step outside
About Michael
Member of Oracle Corporation’s customer advisory board for business intelligence Co-author of “Oracle Discoverer Handbook” Presenter at IOUG, OAUG and ODTUG Fellow of Institute of Analysts and Programmers MetaLink and OTN Forum panel expert 8 years experience of Discoverer and Oracle Applications 25 years IT experience Nominated Oracle ACE - 2006
Oracle Discoverer 10g Handbook
Released March 2006
Available on Amazon.com or via learndiscoverer.com
Two books available in drawing today
Discoverer Services
ASC is dedicated to Oracle Discoverer Oracle Discoverer – all versions Training – all versions, all platforms – Standard: End User: 3 days, Admin: 2 days – Customized: we train on your data
Consulting Remote Support
Partnerships Oracle Sungard Higher Education New slide – not in handout
http://learndiscoverer.com
New slide – not in handout
http://learndiscoverer.blogspot.com
New slide – not in handout
Mastering Discoverer
Mastering Discoverer is an art - not a science – and is not something you can just throw a resource at and expect to see a successful, efficient, smooth running environment. Without adequate training and guidance you will not get the most out of Discoverer. Mastering calculations is a great step
Session Objectives
This session covers: Administrators – use calculations to: Create new items Manage security – Row-based – Item-based
End Users – use calculations to: Create new data types Analyze data using analytic functions – Includes an overview of analytic functions
Q&A – 10 minutes at the end
Administrators
Create new items Pre-defined logic Watch the aggregation Manage security Row based Item based
Creating new items
Pre-defined algorithms
To create a calculation, use the following workflow: 1. Click on the Data tab. 2. Click on the folder name or click on any item in the folder upon which the calculation will be based. 3. Right click and select New Item. 4. The New Item dialog box will open. 5. Name the calculation. 6. Create the calculation using items and functions. 7. Click OK.
Profit
In our business area we have two metrics for Selling Price and Cost Price in the Sales folder. The end user tells you that what she needs to see is the difference between the two, the Profit. This is a simple calculation for you to predefine and to the end user it will simply appear as an additional item in the Sales folder. The really great thing about it is that the end user can select the calculation without adding the items upon which it is based. You will be showered with praise for your brilliance!
Profit – workflow 1
1. Expand the list of folders in the Sales Department business area. 2. Click on the heading for the Sales folder. 3. Right click and select New Item. 4. The New Item dialog box will open. 5. Name the calculation Profit. 6. Open the Sales folder (notice that the items are displayed in alphabetical order).
Profit – workflow 2
Profit – workflow 3
6. Open the Sales folder (notice that the items are displayed in alphabetical order). 7. Select Selling Price and paste it into the Calculation area. 8. Click or type the minus sign. 9. Select Cost Price and paste it into the Calculation area. 10. Because we want the calculation to be summed whenever users select items from the business area, we will use the SUM function to complete the calculation.
Profit – workflow 4
Aggregation icon
The new calculation appears as an item at the bottom of the Sales folder. Move it up so that it is below Selling Price.
Notice the new icon for Profit?
Managing security
Row-based Prevents a complete row being visible to a user Item-based Prevents content of an item being visible to a user
Row-based security
Row-based security
What do we need? Database table Entries in the table Database function A calculation A mandatory condition
Security workflow
1. 2. 3. 4. 5. 6. 7.
Create the security table Create the security index Grant select rights Populate the table Create a function Import function into Discoverer Create mandatory condition using embedded calculation 8. Test
Security Table
CREATE TABLE GEN_SECR( USERNAME VARCHAR2(8) NOT NULL, SEC_TYPE VARCHAR2(32) NOT NULL, SEC_IND INTEGER NOT NULL); In the above table, the three columns are used as follows: USERNAME Oracle username SEC_TYPE An identifier for the item to secure. SEC_IND Use 0 for no access, 1 for access
Security workflow - continued
Create an index: CREATE UNIQUE INDEX GEN_SECR_PK ON GEN_SECR(USERNAME, SEC_TYPE); Grant access GRANT SELECT ON GEN_SECR TO PUBLIC; Populate the table: INSERT INTO GEN_SECR VALUES ('DRAKE', SALES', 1); INSERT INTO GEN_SECR VALUES ('MSMITH', ‘SALES', 0);
Security workflow - continued
CREATE OR REPLACE FUNCTION F_GEN_SEC (SEC_TYPE_IN VARCHAR2) RETURN NUMBER IS GEN_ACCESS NUMBER := 0; BEGIN USER is a system variable and contains the Oracle user id of the currently logged in user SELECT SEC_IND INTO GEN_ACCESS FROM GEN_SECR A WHERE A.USERNAME = USER AND A.SEC_TYPE = SEC_TYPE_IN; RETURN (GEN_ACCESS); EXCEPTION WHEN NO_DATA_FOUND THEN RETURN (GEN_ACCESS); WHEN OTHERS THEN RETURN (GEN_ACCESS); END F_GEN_SEC;
Security workflow - continued
Import function into Discoverer Admin: 1. 2. 3. 4. 5. 6. 7.
Use Tools | Import PL/SQL functions Click Import Locate function to be imported Click OK Click Validate – should be valid Check Arguments Click OK
Security workflow – continued
Create mandatory condition using embedded calculation 1. Navigate to folder to be protected 2. Right-click in folder, on any item, and from pop-up select New Condition 3. Under Item: select Create Calculation
F_GEN_SEC('SALES') = 1 1. Click OK 2. Test using Discoverer Plus
Item-based Security
Item-based security
We will use the same table, but rather than secure a whole table, we will secure an individual item Let’s secure the Credit Limit and prevent user MSMITH from seeing the content of that item Populate the table: INSERT INTO GEN_SECR VALUES ('DRAKE', CREDIT', 1); INSERT INTO GEN_SECR VALUES ('MSMITH', ‘CREDIT', 0);
Item-based security - workflow
1. Locate and right-click on the item you want to secure 2. From the pop-up menu select Properties 3. Rename the item by adding the characters OLD to the end of the name. 4. Change the Visible to user property to No 5. Click OK to close the Item Properties dialog box. 6. Right-click on the item again, and from the pop-up menu select New Item.
Item-based security - continued
7. The New Item dialog box will open. 8. Give this new item exactly the same name as the item you renamed in step 3 9. Check the Functions radio button. The Show box will display a list of the function folders. Functions that have been imported into Discoverer are located in the Database folder. 10. Expand the Database folder and select the function you imported earlier
Item-based security - continued
11. Click Paste. The function specification will be pasted into the Calculation. 12. Complete the calculation using DECODE DECODE(F_GEN_SEC('CREDIT'),1, Credit Limit OLD,NULL)
11. Click OK to close the New Item dialog box 12. Move the item to its correct location by placing it immediately above the original item 13. Test using Plus
End Users
Let’s use calculations to: Create new data types Analyze data using analytic functions Includes an overview of analytic functions Use of the analytic template Creating rankings Creating running totals Creating top / bottom n values Creating sequenced analytic operations
New Data Types
Creating new data types
Use calculations to create new data types within your worksheet. These new types only exist within the worksheet. After you have create a new data type, you can: Create sorts Create totals Create other calculations.
Let’s say we want to generate a new data type called Category, and this category has three values High Middle Low
New data types - continued
We want to analyze our sales and work out our top selling customers, such that customers with: Sales > 9 million are High Sales > 4 million but <= 9 million are Middle Sales <= 4 million are Low
Basic Requirement
Syntax: IF Sales > 9,000,000 THEN HIGH ELSE IF Sales > 4,000,000 THEN MIDDLE ELSE LOW
A WHEN – WHEN situation
Use a CASE statement CASE
WHEN Sales > 9000000 THEN ‘High’ WHEN Sales > 4000000 THEN ‘Middle’ ELSE ‘Low’ END Is this a WHEN – WHEN or a WIN – WIN situation?
Let’s do it using an existing workbook
Launch the New Calculation dialog box. 1. Name the calculation Category. 2. From the Show drop-down list, select Functions. 3. Scroll down then expand Others. 4. Select the CASE function and paste into the calculation
New data types – continued
5. The calculation should look like this:
6. Click OK to close the New Calculation dialog box. 7. Drag the Category to the Page Items.
New data types – continued
Note the drop-down of new categories
Three new categories
Analytic Functions
Using analytic functions
Analytic functions are functions that run against the data in a query after the query has computed its normal results. Whereas standard functions and calculations, such as profit, execute on a row-by-row basis as the query runs, analytic functions run against the results. They support basic business intelligence calculations such as moving averages, rankings, and running totals.
Typical business questions
What is my best performing product in terms of sales? What are my top n / bottom n selling products? How do sales this year compare to last year? What is the 3 month moving average of sales? What products sell more than 20% of total sales for their product line? Of my top 10 products, how many open orders do I have?
Categorizing analytic functions
Analytic functions fall into the following categories: Ranking - used to calculate the rank of a value in a result set. Window Aggregates - used to calculate cumulative sums, running totals and moving averages. Reporting Aggregates - can be used to calculate market share. Lag / Lead - can be used to find a value in a row offset from a current row. Perhaps this year compared to last year.
Processing Order
When analytic functions are in use, query processing takes place in three stages: All joins, WHERE, GROUP BY and HAVING clauses are performed first. The resulting set of data is made available to the analytic functions and those calculations take place. If the query contains a sort, this is processed.
Partitions
An important concept in the use of analytics is to define a partition: A partition is a set of data that has been ordered into a group of rows. Discoverer page items and group sorts form natural partitions. Note: this term is unrelated to database table partitions
Building effective analytics
In order to build a Discoverer worksheet that makes use of analytical functions, you need to build worksheets in the following order: Build the base worksheet. Add Page Items and / or Group Sorts. Define the analytic function. Create the remaining sorts.
Analytic Templates
Using analytic templates
In older releases of Discoverer, and in all Desktop versions, even though the use of analytic functions is supported, you have to manually type the function yourself. In recent editions of Discoverer Plus, Oracle has inserted a new button on the New Calculation dialog box called Insert Formula from Template.
Insert formula from Template
Click here
List of available templates
Analytic Examples
Base Query
Ranking
Ranking
Start out from our base query Launch the New Calculation dialog box Click the Insert Formula from Template button. From the list of available templates, select Rank. Discoverer opens the Rank dialog box
Rank dialog box
Rank dialog box explained - 1
Rank based on Use this area to define the item(s) on which the ranking should be based. Discoverer will always try to populate this area for you. By default, it will use the first data point that it finds. If this is not the one that you want to rank by, change it. You can also state whether the highest value or the lowest value should be used to start the ranking.
Rank dialog box explained - 2
Restart ranking at each change on This is the partition area. Discoverer will automatically populate this area using the Page Items and Group Sorts that you are using. As you can see on screen, we have a Group Sort based on the Product Size. Discoverer has automatically brought this into the formula. Discoverer will restart the ranking according to the items that you place in here, inserting these items into the PARTITION BY clause of the SQL.
Rank dialog box explained - 3
Rank Ties This area is used to tell Discoverer whether to use standard ranking or dense ranking. A standard ranking will omit a number when there is a tie for the preceding number. A dense ranking ranks all possible values are used.
Rank dialog box explained - 4
Calculation This area is used by Discoverer to display the SQL code that will be generated when you click OK. You cannot manually change this code at this time. To change the code, you need to use the template.
Completing the Ranking
Once you have completed the template, clicking OK causes Discoverer to create the function. Discoverer places a copy of the SQL into the New Calculation dialog box. Assuming you have defined the function correctly, all that remains now is for you to give the function a name and click OK. After completing the function, you should check the format for both the heading and the data. We typically center all of our rank functions and sort by the rank.
Completed Ranking
Running Total
Running Total
Staying in our query Launch the New Calculation dialog box Click the Insert Formula from Template button. From the list of available templates, select Running Total. Discoverer opens the Running Total dialog box
Running Total dialog box
Running Total dialog box explained - 1
Running Total based on Use this area to define the item(s) on which the running total should be based. Discoverer will always try to populate this area for you. By default, it will use the first data point that it finds. If this is not the one that you want to total by, change it.
Running Total dialog box explained - 2
Order rows by Use this area to define the item(s) that you want to order the query by. This will typically, but not always, be the same item that is being used for the running total calculation itself. In our case, Discoverer has picked our ranking analytic function because we placed a sort on it.
Running Total dialog box explained - 3
Restart running total at each change on This is the partition area. Discoverer will automatically populate this area using the Page Items and Group Sorts that you are using. As you saw on screen, we have a Group Sort based on the Product Size. Discoverer has automatically brought this into the formula. Discoverer will restart the running total according to the items that you place in here, inserting these items into the PARTITION BY clause of the SQL.
Running Total dialog box explained - 4
Calculation This area is used by Discoverer to display the SQL code that will be generated when you click OK. You cannot manually change this code at this time. To change the code, you need to use the template.
Completed Running Total
Top / Bottom n values
Top / bottom n selling products
Use this workflow: Create another calculation, identical to the ranking calculation, except that the order by is reversed. This will only be used in a condition. Do not allow the second ranking to display on screen. Add a dynamic parameter that prompts user for the top / bottom n value.
The two SQL snippets
First ranking RANK() OVER(PARTITION BY Size ORDER BY Profit DESC )
Second ranking (condition only) RANK() OVER(PARTITION BY Size ORDER BY Profit ASC )
Create Dynamic Parameter
Add a condition that uses the parameter Build this boolean condition Ranking <= Top / Bottom OR Rank (condition only) <= Top /Bottom
Boolean condition
Note: Because the Top / Bottom dynamic parameter is now being referenced it will now be prompted
Parameter is prompted
Run the query with 2
Notice how only the top and bottom 2 values have been returned but that the bottom line is still correct
Last Year vs This Year
Last Year Example
In this example, we have a worksheet that shows total sales for this and last year.
Last Year’s calculation
In case you are interested: SUM(Selling Price SUM) OVER(PARTITION BY Size,Product ORDER BY TO_DATE("Year",'YYYY') RANGE BETWEEN INTERVAL '1' YEAR PRECEDING AND INTERVAL '1' YEAR PRECEDING ) When RANGE INTERVAL = YEAR the ORDER BY must return a date!
Sequencing
Sequencing Conditions
The power and flexibility of Discoverer enables almost unlimited analytic capabilities. As an example, lets start with our report that returns the top 10 products by size.
Non-sequenced Conditions
Create two new conditions: Condition 1: Ranking <= 10 Condition 2: Status = OPEN
There is an implied AND clause between the conditions with the non-analytic being applied first
Sequenced conditions
Create a single boolean condition Ranking <= 10 AND Status = OPEN
In a boolean condition, the analytic component is applied first, thus sequencing the conditions
Benefits of using Discoverer
There are a number of benefits to using Discoverer to create reports using analytic functions. The Oracle database does not support analytic functions directly referencing other analytic functions (nesting) or directly applying conditions to the query (e.g. only show Top N products). To achieve this in a SQL statement requires the creation of inline views. Discoverer removes this layer of complexity from the end user by breaking down the query into it’s components and resolving such conflicts by creating the appropriate inline views
Q&A
Thank You
Please remember to complete your evaluation form Presenter - Michael Armstrong-Smith Session name – Art of using calculations within Discoverer For more information or to get help about Discoverer 10.1.2 please contact Michael
[email protected]
Copyright
The content provided as papers and presentations from the ODTUG conferences is copyrighted by the authors, and has been licensed to the ODTUG. It is only authorized for the personal use of ODTUG members and ODTUG conference attendees directly through the ODTUG web site. Downloading the files, placing them on other web sites, sharing them with other individuals or third parties is prohibited, unless permission to do so has been granted by the authors or ODTUG.