BI Decision Hierarchy Cognos Metric Manager Cognos PowerPlay Cognos ReportNet
Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced...
-
Upload
coby-ullmer -
Category
Documents
-
view
216 -
download
0
Transcript of Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced...
![Page 1: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/1.jpg)
Northwestern University
Business Intelligence Solutions
Cognos 8 Best PracticesVolume 3
Advanced Developer Techniques
![Page 2: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/2.jpg)
Agenda
JavaScript Prompt Limiter– How to use JavaScript to limit the number of
elements a user can select in a multi-select prompt.
Report Cache– Used to cache prompts for a report to optimize
the prompt page response. Burst Reports
– Use distribution lists to distribute reports. Join/Union/Intersect/Except/Master-Detail
– How to join data from multiple queries.
![Page 3: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/3.jpg)
JAVASCRIPT PROMPT LIMITER
Section 1
![Page 4: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/4.jpg)
Report Prompt Behavior
Users can overload the selection easily by using the Select all button.
![Page 5: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/5.jpg)
Multi-Select Prompt Properties
In the properties pane for a multi-select prompt, you can set the number of rows to be displayed per page in the list, but there is no option to limit how many selections a user can make.
![Page 6: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/6.jpg)
Why Limit User Selection
Oracle only allows 1,000 items to be used in the IN statement of a SQL query.
Large amount of values in a prompt can cause the report performance issues.
Large values in a prompt can return a report too large to supply good Business Intelligence.
Allow the users access to choose from all the possible dimensional members, even if they can’t choose all of them at one time.
![Page 7: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/7.jpg)
Add JavaScript to Prompt Page
In Cognos 8.4, IBM Cognos changed the names of items making older JavaScript not run correctly.
The new way to call items now should be future proof since the prompt is defined in a DIV tag and identified with the getElementByID function.
JavaScript should be used minimally in reports as a best practice, but sometimes the only way to force client behavior.
The cost/benefit balance in this case lies distinctly in the use of JavaScript.
![Page 8: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/8.jpg)
How to Build Prompt Page
Put three HTML items on the page, one before the prompt, one right after the prompt, and one to replace the Finish button.
<div id="selectValues">
</div><script …
<div class="clsPromptComponent“ …
![Page 9: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/9.jpg)
HTML Items 1
The first HTML item starts the div tag for this prompt object.
This item should be the object just before the prompt object.
If the prompt object is in a table, this item should be in the same cell.
This will allow the JavaScript function to find the prompt object
<div id=“select Values”>
![Page 10: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/10.jpg)
HTML Item 2
This item starts with the ending Div tag to close the prompt object.
This item then starts the JavaScript and defines the function used to count the items in the prompt and either move forward or show an alert.
This function needs to be different depending on the type of prompt used.
It must be placed right after the prompt object to correctly wrap the prompt in the DIV tag.
</div><script language="javascript" type="text/javascript">…</script>
![Page 11: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/11.jpg)
HTML Item 3
This object replaces the Finish button. It must create the Finish button. On click, instead of running the
PromptAction(‘finish’) it will call the Function we created in HTML Item 2
<div class="clsPromptComponent" pt="btn"><button type="button" name="FinishButton" id="finishButton" class="bp" onmouseover="" onmouseout="" onclick="CountSelected()" style="">Finish </button></div><script>…</script>
![Page 12: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/12.jpg)
Search and Select Prompt
![Page 13: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/13.jpg)
Script for Search & Select
</div> <script language="javascript" type="text/javascript"> function CountSelected() { var eleSearch1 = document.getElementById("selectValues"); var selectObject = eleSearch1.getElementsByTagName("SELECT"); var eleSearch1Details = null; var Search1Len = 0; var foundSelections = false; if (selectObject[1] && selectObject[1] != undefined) { eleSearch1Details =
selectObject[1].getElementsByTagName('OPTION'); Search1Len = eleSearch1Details.length; if (Search1Len < 11) { foundSelections = true;} } if (foundSelections == true) { promptAction('finish'); } else {alert('The number of selected items is too high, it should be 10 or less, you
currently have ' + Search1Len + ' items selected. Please remove some items then click on Finish again.'); } }
</script>
![Page 14: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/14.jpg)
Picklist Prompt
![Page 15: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/15.jpg)
Script for Picklist Prompt
</div> <script language="javascript" type="text/javascript"> function CountSelected() { var Counter = 0; var i; var eleTg1 = document.getElementById("selectPicklist"); var SelectObject = eleTg1.getElementsByTagName("select"); if (SelectObject[0] && SelectObject[0] != undefined) { for ( i = 0; i < SelectObject[0].options.length; i++) { if (SelectObject[0].options[i].selected == true) { Counter++; } }
if (Counter < 11) { promptAction('finish'); } else { alert('The number of selected items is too high, it should be
10 or less, you currently have ' + Counter + ' items selected. Please remove some items then click on Finish again.');} } }
</script>
![Page 16: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/16.jpg)
Checkbox Prompt
![Page 17: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/17.jpg)
Script for Checkbox Prompt
</div> <script language="javascript" type="text/javascript"> function CountSelected() { var Counter = 0; var i; var eleTg1 = document.getElementById("selectPicklist"); var SelectObject = eleTg1.getElementsByTagName("input"); for ( i = 0; i < SelectObject.length; i++) { var node = SelectObject[i]; if (node.checked) { Counter++; } } if (Counter < 11) { promptAction('finish'); } else { alert('The number of selected items is too high, it should be 10 or
less, you currently have ' + Counter + ' items selected. Please remove some items then click on Finish again.');} }
</script>
![Page 18: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/18.jpg)
Multiple Prompts
Here is a case where you might have two different multiple selection prompts and you want each one limited, possibly even with a different limit value.
![Page 19: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/19.jpg)
Scripts for Multiple Prompts
<div id="selectPicklist">
</div><script language="javascript" type="text/javascript">function CountCheckbox(){var Counter = 0; var i; var eleTg1 = document.getElementById("selectPicklist"); var SelectObject = eleTg1.getElementsByTagName("input"); for ( i = 0; i < SelectObject.length; i++) { var node = SelectObject[i]; if (node.checked) {Counter++;} } return Counter;}</script>
<div id="selectPicklist2">
</div><script language="javascript" type="text/javascript">function CountPicklist(){var Counter2 = 0; var i2; var eleTg2 = document.getElementById("selectPicklist2"); var SelectObject2 = eleTg2.getElementsByTagName("select"); if (SelectObject2[0] && SelectObject2[0] != undefined) {for ( i2 = 0; i2 < SelectObject2[0].options.length; i2++) {if (SelectObject2[0].options[i2].selected == true) {Counter2++;} } } return Counter2;} </script>
<script language="javascript">function CountSelected(){var numOfPrompts = 2;var limitForPrompt1 = 10;var limitForPrompt2 = 10;var isPromptsGood = 0;var counterCheckbox = CountCheckbox();var counterPicklist = CountPicklist();if (counterCheckbox <= limitForPrompt1) //Check first prompt{isPromptsGood += 1;}else{alert('The number of selected items is too high in the checkbox, it should be ' + limitForPrompt1 + ' or less, you currently have ' + counterCheckbox + ' items selected. Please remove ' + (counterCheckbox - limitForPrompt1) + ' items then click on Finish again.');}if (counterPicklist <= limitForPrompt2) //Check second prompt{isPromptsGood += 1;}Else{alert('The number of selected items is too high in the picklist, it should be ' + limitForPrompt2 + ' or less, you currently have ' + counterPicklist + ' items selected. Please remove ' + (counterPicklist - limitForPrompt2) + ' items then click on Finish again.');} if (isPromptsGood == 2) //Check if all prompts are good{promptAction('finish');}Else{alert('Fix the prompts then click on Finish again.');} }</script>
<div class="clsPromptComponent" pt="btn"><button type="button" name="FinishButton" id="finishButton" class="bp" onmouseover="" onmouseout="" onclick="CountSelected()" style="">Finish </button></div><script language="javascript" type="text/javascript">var promptButtonFinish = new CPromptButton (document.getElementById("finishButton"), PROMPTBUTTON_FINISH, true, "NS");oCV_NS_.pageNavigationObserverArray = oCV_NS_.pageNavigationObserverArray.concat("promptButtonFinish");oCV_NS_.notify();</script>
![Page 20: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/20.jpg)
Multiple Prompts
This process can also be used to check multiple prompts.
Create the DIV tags and functions around each prompt item as before, however don’t use the PromptAction(‘finish’) inside the individual functions, instead return a result of True/False.
Create another HTML Item with a function that calls the individual functions and determines if their results are all True, if so, it runs the PromptAction(‘finish’).
Have the Finish button call this function.
![Page 21: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/21.jpg)
Code Examples Folder
A new folder has been created on Dev to house Code Examples created by the BI team. These objects can be opened in Report Studio to see and copy/paste the javascript to reuse in other prompt reports.
![Page 22: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/22.jpg)
REPORT CACHE
Section 2
![Page 23: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/23.jpg)
Report Prompt Performance
A user clicks on run and gets the hourglass waiting for the prompt page to retrieve its data and render.
![Page 24: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/24.jpg)
Set the Report Cache
Click on the Set Properties for the report.
![Page 25: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/25.jpg)
Set the Report Cache cont.
On the Report tab, click on the Advanced options to expose the Report Cache properties.
Click on the Refresh the Report Cache property. Then set the time to hold the cache before it is refreshed. We recommend it should be refreshed at least as often as the dimensional data the prompt uses.
![Page 26: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/26.jpg)
BURST REPORTS
Section 3
![Page 27: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/27.jpg)
Why Burst Reports
Burst Reports Run Once Distribute Many Burst Reports are subset of data in the report
based on grouping Each grouping can go to a unique recipient Recipients can be email addresses, Cognos
Contacts, Cognos Groups, or Cognos Distribution Lists
Recipient/Grouping relationship can be defined in a table stored with the data and used for all burst reports
![Page 28: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/28.jpg)
Examples of Report
This report is grouped by the Sales Rep and then sent out to each sales rep with only their data.
This grouping report emailed to [email protected]
This grouping report emailed to [email protected]
![Page 29: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/29.jpg)
Create Grouping and Burst Data Items
This report has two important columns to allow bursting, the Staff name data item is the grouping column, and the UserID column actually defines the recipients for the grouping.
![Page 30: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/30.jpg)
Set Burst Options
Go to File/Burst Options to define how to burst the report.
![Page 31: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/31.jpg)
Set Burst Options Cont.
Define the grouping data item to use for the burst separation, in this case the Staff name of the sales rep is used to create our report example.
Set the data item to define the recipient of the burst group, again, there must be a relationship in the report, or framework package, between the recipient and the grouped data item.
Set the type of bursting, in this case all of our recipients are email addresses so that is what we set.
![Page 32: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/32.jpg)
Burst Recipients Mixed Type
case lower(substring([gosales_goretailers].[Sales reps].[First name],1,1)+[gosales_goretailers].[Sales reps].[Last name])when 'atorta'then '[email protected]'when 'awilcox'then 'CAMID(":Burst Test Group 1")'else '[email protected]'END
![Page 33: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/33.jpg)
Run a Burst Report
In the run options screen, click on the advanced options link.
![Page 34: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/34.jpg)
Run a Burst Report Cont.
Set the report to run in the background.
Set the Bursting option on for the report run.
If the burst report is to be emailed to its recipients, make sure to click on the Send the report by email.
![Page 35: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/35.jpg)
Schedule the Burst Report
The schedule options screen is basically the same, just make sure you click on the Override the default values to get to this screen to set the options.
![Page 36: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/36.jpg)
Burst Output in Archive
![Page 37: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/37.jpg)
Burst Table Example
BurstKey Sales Rep Recipient
1 Alessandra Torta [email protected]
2 Allisia Wilcox CAMID(":Burst Test Group 1")
3 Ana Orozco CAMID("CognosLDAP:u:authid=3179095188")
Add a table to your data source, it should include a Recipient value like what is listed below.
Add the table to your Framework Package and create a join, in this case on the Sales Rep to the Staff Name table in the GO Sales package.
![Page 38: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/38.jpg)
JOINS UNIONS INTERSECTS EXCEPTS
MASTER-DETAIL
Section 4
![Page 39: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/39.jpg)
Q1 Q2
Multiple Queries
Reports often require multiple queries Queries can be related through different
types of operations It is important to use the correct relationship
to get the results required
![Page 40: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/40.jpg)
Joins
Joins are the most basic type of relationship, they function the same as they would in a SQL query.
There are two basic types of joins that are defined by the cardinality– Inner joins
– Outer joins
EmpID
Name
1 John Smith
2 Ann Wilcox
EmpID
Position
1 Manager
3 Technician
Name Position
John Smith Manager
EmpID
Name
1 John Smith
2 Ann Wilcox
EmpID
Position
1 Manager
3 Technician
Name Position
John Smith Manager
Ann Wilcox
Technician
![Page 41: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/41.jpg)
Unions
Unions are used to combine multiple queries into a single result-set.
There must be the same number of data items.
The data items must be compatible types.EmpID
Name
1 John Smith
2 Ann Wilcox
EmpID
Name
5 Anna Ortiz
6 Tom Wilbur
EmpID Name
1 John Smith
2 Ann Wilcox
5 Anna Ortiz
6 Tom Wilbur
Q1 Q2 R
![Page 42: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/42.jpg)
Intersects
Intersects are used to combine multiple queries and return the matching set.
Same criteria as Unions.
EmpID
Name
1 John Smith
2 Ann Wilcox
EmpID
Name
1 John Smith
6 Tom Wilbur
EmpID Name
1 John Smith
Q1
Q2 R
![Page 43: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/43.jpg)
Excepts
Excepts are used to return Q1 minus the matching records from Q2.
Same criteria as Unions.
EmpID
Name
1 John Smith
2 Ann Wilcox
EmpID
Name
1 John Smith
6 Tom Wilbur
EmpID Name
2 Ann Wilcox
Q1
Q2 R
![Page 44: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/44.jpg)
Master Detail Relationships
A report that delivers information that would usually require two or more reports.
Often used to combine lists and charts. Requires a parent container with a nested
detail container– Parent frame for master query and nested frame
for the detail– Associate Report page with master query and
data container for detail query
![Page 45: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/45.jpg)
Page Set Example
In this example, a page set is created using Query 1 and paged by the Product name data item.
![Page 46: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/46.jpg)
Page Layout
A Chart object is added to the page, this is Query 2, after the data items are added to the query, the Master Detail relationship is defined so this chart only shows the Product name being displayed on the current page.
This line holds the Query 1 elements of the Product image and Product name.
![Page 47: Northwestern University Business Intelligence Solutions Cognos 8 Best Practices Volume 3 Advanced Developer Techniques.](https://reader036.fdocuments.net/reader036/viewer/2022062620/551a403a55034619378b5e96/html5/thumbnails/47.jpg)
Report Output Example
Product Image
Product Name
Sales by Staff for Product
Sales by Retailer for Product