Académique Documents
Professionnel Documents
Culture Documents
http://obiee101.blogspot.com/
Contents
1 2007 1.1 December . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . My First Blog (2007-12-05 07:19) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Dummy Column with NULL value (2007-12-05 10:03) . . . . . . . . . . . . . . . OBIEE EVALUATE function and presentation variables (2007-12-05 18:00) . . . . . . . OBIEE Measures and Events in one chart (2007-12-06 10:55) . . . . . . . . . . . . . . . OBIEE for MicroSoft Oce (2007-12-06 14:14) . . . . . . . . . . . . . . . . . . . . . . . OLAP 101 (2007-12-06 14:57) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Pivot table with carriage return (2007-12-07 09:06) . . . . . . . . . . . . . . . . OBIEE EVALUATE Function (2007-12-07 11:39) . . . . . . . . . . . . . . . . . . . . . . OBIEE EVALUATE AGGR Function (2007-12-07 12:02) . . . . . . . . . . . . . . . . . OBIEE referencing session variables in report title (2007-12-10 14:40) . . . . . . . . . . OBIEE empty presentation tables in a repository in a multi-user environment (2007-12-11 12:20) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Excel and slashes (2007-12-11 17:45) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Default security groups for BI Publisher (2007-12-13 07:19) . . . . . . . . . . . . OBIEE Duration between events (2007-12-19 11:00) . . . . . . . . . . . . . . . . . . . . OBIEE Scale markers (2007-12-19 11:30) . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2008 2.1 January . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE using oracle stored procedure to ll report (2008-01-11 13:35) . . . . . . . . . . OBIEE IsNumeric (2008-01-16 07:54) . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Corda Popchart (2008-01-16 12:25) . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Corda Popchart Example (2008-01-16 14:34) . . . . . . . . . . . . . . . . . . . . OBIEE X,Y and data in mouse over label (2008-01-16 17:21) . . . . . . . . . . . . . . . OBIEE adding a customized graphtype (2008-01-17 13:32) . . . . . . . . . . . . . . . . . OBIEE Graphs Gradient Eect (2008-01-22 08:48) . . . . . . . . . . . . . . . . . . . . . OBIEE 10.1.3.3.2 availble on OTN (2008-01-24 10:03) . . . . . . . . . . . . . . . . . . . OBIEE Restricting data based on User Group (2008-01-24 10:54) . . . . . . . . . . . . . 15 15 15 15 15 15 18 18 19 20 21 22 22 24 24 24 26 29 29 29 30 31 31 32 33 34 35 35 3
OBIEE backing up repository (2008-01-29 07:29) . . . . . . . . . . . . . . . . . . . . . . (2008-01-30 07:34) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Calculate YearWeek and YearWeekAgo (2008-01-30 10:56) . . . . . . . . . . . . 2.2 February . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Usefull server scripts (2008-02-01 17:13) . . . . . . . . . . . . . . . . . . . . . .
35 36 36 37 37 38 40 42 43 43 44 46 46 46 47 49 49 52 52 53 56 56 58 59 60 60 60 60 63 64 65 65 69 70 72 73 75
OBIEE development street (2008-02-02 20:06) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Adding session variables to the report title / using a narrative view (2008-02-06 20:30) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Using ORACLE stored procedures part 2 (2008-02-07 17:34) . . . . . . . . . . . OBIEE Using ORACLE stored procedures part 3 (2008-02-11 17:12) . . . . . . . . . . . OBIEE Aggregate BY (2008-02-18 20:23) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Controling Pivot View behavior (2008-02-23 12:09) . . . . . . . . . . . . . . . . OBIEE Optimizing NQQuery.log for debugging (2008-02-29 19:29) . . . . . . . . . . . . 2.3 March . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE No Thousand separator (2008-03-04 14:33) . . . . . . . . . . . . . . . . . . . . . OBIEE Continues Time Line (2008-03-09 15:43) . . . . . . . . . . . . . . . . . . . . . . OBIEE Downgrading Repository (2008-03-09 16:37) . . . . . . . . . . . . . . . . . . . . OBIEE Manage the cache part 1 (2008-03-13 22:16) . . . . . . . . . . . . . . . . . . . . OBIEE Manage the cache part 2 (2008-03-16 09:35) . . . . . . . . . . . . . . . . . . . . OBIEE Yes No Prompt (2008-03-28 10:50) . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Repository Version Control (2008-03-31 20:39) . . . . . . . . . . . . . . . . . . . 2.4 April . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Combined with Similar Request and lterview (2008-04-05 13:44) . . . . . . . OBIEE View Selector, forcing a selection. (2008-04-05 14:52) . . . . . . . . . . . . . . . OBIEE 10.1.3.3.3 (2008-04-21 16:53) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 May . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE 10.1.3.3.3 its out (2008-05-10 16:18) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE 10.1.3.3.3 documentation (2008-05-10 16:32) . . . . . . . . . . . . . . . . . . . . OBIEE making a column selector in a prompt (2008-05-18 19:47) . . . . . . . . . . . . . OBIEE Changing the line color in a scatter graph with line (2008-05-23 09:35) . . . . . OBIEE Pivot table Measure label (2008-05-29 20:04) . . . . . . . . . . . . . . . . . . . . 2.6 June . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Flexible Dashboards (2008-06-07 11:45) . . . . . . . . . . . . . . . . . . . . . . . OBIEE Directing a user to a default dashboard (2008-06-07 22:12) . . . . . . . . . . . . OBIEE Private output type for a chart (2008-06-10 19:49) . . . . . . . . . . . . . . . . OBIEE Excel Import, prepping the data (2008-06-15 17:04) . . . . . . . . . . . . . . . . OBIEE Blocking request based on Criteria (2008-06-19 20:49) . . . . . . . . . . . . . . . OBIEE Follow the sun / Time driven connection (2008-06-29 11:18) . . . . . . . . . . . 4
2.7
July . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE naming conventions repository (2008-07-07 19:00) . . . . . . . . . . . . . . . . . OBIEE Public Reports and Dashboards - Bypassing authentication (2008-07-07 19:08) . OBIEE Preventing Auto-Previewing of Results in Answers (2008-07-08 19:25) . . . . . . OBIEE Changing XLS (Excel) data on the y (2008-07-09 17:08) . . . . . . . . . . . . . OBIEE Plus Workshop Munchen Day 1 (2008-07-15 11:09) . . . . . . . . . . . . . . . . OBIEE Plus Workshop Munchen Day 2 (2008-07-16 10:00) . . . . . . . . . . . . . . . . OBIEE Plus Workshop Munchen Day 3 (2008-07-17 09:07) . . . . . . . . . . . . . . . . OBIEE managing the cache: Emptying/Purging the cache Part 2 (2008-07-19 10:42) . . OBIEE number of gauges on canvas (2008-07-21 18:04) . . . . . . . . . . . . . . . . . . OBIEE running it on an other web port (2008-07-23 11:28) . . . . . . . . . . . . . . . . OBIEE running it as a HTTPS / SSL service (2008-07-23 16:26) . . . . . . . . . . . . . OBIEE Migration discover to OBIEE (2008-07-24 17:26) . . . . . . . . . . . . . . . . . . OBIEE dropdown prompt (2008-07-24 20:00) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Number of values in the multiselect prompt (2008-07-25 20:00) . . . . . . . . . . OBIEE Number of default values in a multiselect prompt (2008-07-26 20:00) . . . . . . OBIEE cache management. (2008-07-27 22:44) . . . . . . . . . . . . . . . . . . . . . . . OBIEE Protect Filter (2008-07-28 20:58) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE .Net using the webservice (2008-07-29 21:34) . . . . . . . . . . . . . . . . . . . . OBIEE SAWSessionService (2008-07-30 20:00) . . . . . . . . . . . . . . . . . . . . . . . OBIEE SAWSessionService Part 2 (2008-07-31 22:13) . . . . . . . . . . . . . . . . . . .
77 77 77 77 78 81 81 82 82 84 84 85 86 87 87 87 88 91 93 95 96 97 97 97 97 99 99 99 100 100 100 108 109 113 114 118 119 119 5
2.8
August . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE 10.3.4.0 is out (2008-08-07 09:52) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Continues Date Time Line redux (2008-08-08 08:42) . . . . . . . . . . . . . . . . OBIEE Date Time Scatter graph (2008-08-08 09:07) . . . . . . . . . . . . . . . . . . . . OBIEE customising your PCXML (2008-08-08 17:09) . . . . . . . . . . . . . . . . . . . OBIEE Migrating Oracle BI Discoverer to OBIEE (2008-08-08 22:48) . . . . . . . . . . OBIEE Bottom scale on the time line graph (2008-08-09 12:03) . . . . . . . . . . . . . . OBIEE making a clear button (2008-08-09 23:00) . . . . . . . . . . . . . . . . . . . . . . OBIEE 10.3.4.0 First impressions (2008-08-10 23:14) . . . . . . . . . . . . . . . . . . . . OBIEE Setting up usage tracking (2008-08-11 06:00) . . . . . . . . . . . . . . . . . . . . OBIEE 10.3.4.0 missing popchart service (2008-08-11 14:28) . . . . . . . . . . . . . . . . OBIEE Conguring Conguring the scheduler on Windows2003/Oracle (2008-08-12 15:11) OBIEE Dierence between two rows (2008-08-12 16:00) . . . . . . . . . . . . . . . . . . OBIEE Children of the level / Converting rows to strings (2008-08-13 09:36) . . . . . . OBIEE error saving security account (2008-08-13 15:14) . . . . . . . . . . . . . . . . . . OBIEE Conguration Tags (2008-08-14 21:14) . . . . . . . . . . . . . . . . . . . . . . . OBIEE Where is the ODBC Data Source Administrator? (2008-08-14 21:30) . . . . . .
OBIEE Stragg function on 10G.. (2008-08-16 23:35) . . . . . . . . . . . . . . . . . . . . OBIEE Hidding dashboard sections (2008-08-17 16:24) . . . . . . . . . . . . . . . . . . . OBIEE Identifying the server. (2008-08-18 21:02) . . . . . . . . . . . . . . . . . . . . . . OBIEE Back One Page (2008-08-20 20:12) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Conditional Hyperlink (2008-08-21 16:35) . . . . . . . . . . . . . . . . . . . . . . OBIEE Change the password (2008-08-21 23:23) . . . . . . . . . . . . . . . . . . . . . . OBIEE scripting user into the repository (2008-08-22 18:18) . . . . . . . . . . . . . . . . OBIEE Conditional X-axis graph (2008-08-27 17:19) . . . . . . . . . . . . . . . . . . . . OBIEE Forcing OC4J BI shutdown (2008-08-28 04:30) . . . . . . . . . . . . . . . . . . . 2.9 September . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Setting up a mailserver in a VMware (2008-09-01 21:23) . . . . . . . . . . . . . . . . . . OBIEE OpenOce (2008-09-01 22:06) . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE TimeLine graph Line settings (2008-09-03 20:23) . . . . . . . . . . . . . . . . . . OBIEE Setting up an Compagny custom Skin and Style (2008-09-08 21:30) . . . . . OBIEE setting the bottomscale in a DTA Graph (2008-09-09 22:00) . . . . . . . . . . . OBIEE PDF controls (.fst les) (2008-09-10 11:45) . . . . . . . . . . . . . . . . . . . . . OBIEE Null, Nul and Nullable (2008-09-10 17:43) . . . . . . . . . . . . . . . . . . . . . OBIEE collapse the whole dashboard with one button (2008-09-10 21:01) . . . . . . . . OBIEE setting default Graph series colors. (2008-09-12 20:13) . . . . . . . . . . . . . . OBIEE Custom CSS Style / Class (2008-09-13 10:31) . . . . . . . . . . . . . . . . . . . OBIEE Title View (2008-09-13 12:02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Setting a picture as graph backgound (2008-09-17 17:03) . . . . . . . . . . . . . OBIEE CHOOSE statement (2008-09-19 17:30) . . . . . . . . . . . . . . . . . . . . . . . OBIEE Google chrome (2008-09-21 21:02) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE setting up customMessages folders (2008-09-23 18:47) . . . . . . . . . . . . . . . OBIEE Timestamp (2008-09-24 09:59) . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE making a custom Log On and Log O screen (2008-09-24 17:45) . . . . . . . . . OBIEE Portal customization part 1 the portalbanner (2008-09-28 19:28) . . . . . . . . 2.10 October . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE the developersprompt (2008-10-01 17:26) . . . . . . . . . . . . . . . . . . . . . OBIEE Multiple Java Versions (2008-10-03 18:44) . . . . . . . . . . . . . . . . . . . . . OBIEE ReportAggregateEnabled (2008-10-04 18:41) . . . . . . . . . . . . . . . . . . . . OBIEE update tutorials (2008-10-07 18:56) . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Show Thousands Separator in Chart (2008-10-07 19:02) . . . . . . . . . . . . . . OBIEE Portal customization part 2 the portalcontent (2008-10-08 20:09) . . . . . . . OBIEE Skin and Style Naming (2008-10-09 18:13) . . . . . . . . . . . . . . . . . . . . . OBIEE using the webservices (2008-10-10 16:24) . . . . . . . . . . . . . . . . . . . . . . OBIEE replacing siebelbug.gif (Powered by Oracle) (2008-10-10 17:31) . . . . . . . . . . 6
121 121 122 124 125 126 127 129 130 130 130 133 135 135 136 137 137 138 139 140 141 141 143 145 145 146 146 149 151 151 151 152 152 152 153 154 154 155
OBIEE See me live at Rittman Mead (2008-10-20 09:07) . . . . . . . . . . . . . . . . . . OBIEE using the webservices part 2 (2008-10-20 16:59) . . . . . . . . . . . . . . . . . . OBIEE Ritmann Mead BI Training Days Day 1 (2008-10-22 23:30) . . . . . . . . . . . . OBIEE Ritmann Mead BI Training Days Day 2 (2008-10-23 23:55) . . . . . . . . . . . . OBIEE Ritmann Mead BI Training Days Day 3 (2008-10-24 23:46) . . . . . . . . . . . . OBIEE using google maps (Q&D style) (2008-10-25 23:15) . . . . . . . . . . . . . . . .
155 155 156 156 156 156 158 158 159 159 161 165 165 165 172 172 173 173 174 176 176 179 182 189 191 200 201 203 207 207 209 209 209 209 210 212 212 7
OBIEE No language dropdown on loginscreen (2008-10-27 02:59) . . . . . . . . . . . . . OBIEE Clearing the log (2008-10-29 19:12) . . . . . . . . . . . . . . . . . . . . . . . . . 2.11 November . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Huge dimensions? Let s split them! (2008-11-03 23:24) . . . . . . . . . . . . . . OBIEE making it aggregate aware (2008-11-06 20:48) . . . . . . . . . . . . . . . . . . OBIEE nQSError (2008-11-08 19:53) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Stop the beep (2008-11-08 20:05) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Aggregate Persistence Wizard (2008-11-09 12:37) . . . . . . . . . . . . . . . . . OBIEE Creating indexes Q&D Style (2008-11-09 14:30) . . . . . . . . . . . . . . . . . . OBIEE OBI - Forum Live (2008-11-10 12:45) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Default colour Title border (2008-11-12 10:28) . . . . . . . . . . . . . . . . . . . OBIEE Presentation Services Cache Settings (2008-11-12 16:52) . . . . . . . . . . . . . OBIEE Outerjoin workaround? (2008-11-12 21:36) . . . . . . . . . . . . . . . . . . . . . OBIEE How To Replace Multiple Go Button By One Go Button In Prompts (2008-11-14 17:58) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Understanding Outerjoins Part 1 (2008-11-15 22:46) . . . . . . . . . . . . . . . . OBIEE Understanding Outerjoins Part 2 (2008-11-20 20:56) . . . . . . . . . . . . . . . . OBIEE Federated Querys / Fragmented Querys (2008-11-21 23:33) . . . . . . . . . . . OBIEE Excel count distinct error (2008-11-22 11:21) . . . . . . . . . . . . . . . . . . . . OBIEE Presentation server on IIS (2008-11-24 02:04) . . . . . . . . . . . . . . . . . . .
OBIEE Lets Get Professional (2008-11-27 03:27) . . . . . . . . . . . . . . . . . . . . . . OBIEE Sort Order Column property (2008-11-28 02:06) . . . . . . . . . . . . . . . . . . OBIEE AGO and TODATE Series (2008-11-29 02:34) . . . . . . . . . . . . . . . . . . . 2.12 December . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Handling SCF data / PIT Reporting (2008-12-03 23:35) . . . . . . . . . . . . . OBIEE101 First Birthday (2008-12-04 00:00) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE 1K Status (2008-12-04 08:10) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE BI-Publisher Templates (2008-12-04 20:24) . . . . . . . . . . . . . . . . . . . . . OBIEE Missing BI-Oce add - in (2008-12-05 21:08) . . . . . . . . . . . . . . . . . . . . OBIEE using timeline graphs in pivot views (2008-12-06 22:39) . . . . . . . . . . . . . . OBIEE BI Publisher Login Errors (2008-12-06 22:45) . . . . . . . . . . . . . . . . . . .
OBIEE Hidding a section (2008-12-08 13:40) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE First / Last of month (2008-12-08 20:25) . . . . . . . . . . . . . . . . . . . . . . OBIEE First / Last day previous week (2008-12-09 02:04) . . . . . . . . . . . . . . . . . OBI Forum Live Vergeet je niet in te schrijven (2008-12-09 09:05) . . . . . . . . . . . . OBIEE bypassing the presentation / web cache (2008-12-09 17:54) . . . . . . . . . . . . OBIEE LOV prompts (2008-12-11 20:16) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE MetaData Dictionary (2008-12-12 23:59) . . . . . . . . . . . . . . . . . . . . . . OBIEE Automating the Metadata dictionary repository updates (2008-12-17 21:12) . . OBIEE Google Chrome redux (2008-12-19 12:47) . . . . . . . . . . . . . . . . . . . . . . OBIEE Creating Bookmark and or Prompted URL (2008-12-21 15:11) . . . . . . . . . . OBIEE Keep a clean desk (2008-12-24 14:58) . . . . . . . . . . . . . . . . . . . . . . . . BI Consultant van 2008 (2008-12-29 22:54) . . . . . . . . . . . . . . . . . . . . . . . . . 3 2009 3.1 January . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Have a great Year! (2009-01-01 00:00) . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Cache and VPD (2009-01-01 15:50) . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE and Wiki (2009-01-01 21:04) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBI Forum Live Vergeet je niet in te schrijven !LAATSTE KANS! (2009-01-05 09:18) . OBIEE Selecting SKIN and STYLE from URL (2009-01-07 19:02) . . . . . . . . . . . . OBIEE Sample Sales (2009-01-08 17:01) . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE creating large / huge PDF documents (2009-01-09 01:30) . . . . . . . . . . . . . OBIEE Leap Year Challenge (2009-01-11 22:21) . . . . . . . . . . . . . . . . . . . . . .
213 213 214 214 214 214 216 223 223 224 226 226 227 227 227 227 228 228 228 229 229 229 232 233 233 234 235 235 237 238 243 243 247 247 247 248 249
OBIEE Cache persistence (2009-01-13 21:54) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE PROJECT INACCESSIBLE COLUMN (2009-01-15 18:42) . . . . . . . . . . . . OBIEE Multiple connection pools (2009-01-18 19:33) . . . . . . . . . . . . . . . . . . . . BI Consultant van 2008 ronde 2 (2009-01-21 21:20) . . . . . . . . . . . . . . . . . . . . . OBIEE Impersonate a user (2009-01-21 23:49) . . . . . . . . . . . . . . . . . . . . . . . OBIEE rowbased calculations in a pivot table (2009-01-22 19:48) . . . . . . . . . . . . . OBIEE Brackets in the BMM (2009-01-26 20:35) . . . . . . . . . . . . . . . . . . . . . . OBIEE Creating a Yamazumi Graph (2009-01-27 20:39) . . . . . . . . . . . . . . . . . . OBIEE Autorefresh no prompts (2009-01-28 20:01) . . . . . . . . . . . . . . . . . . . . . OBIEE Column headings (2009-01-29 17:16) . . . . . . . . . . . . . . . . . . . . . . . . 3.2 February . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Ago and and error ORA-00942: table or view does not exist (2009-02-11 09:51) OBIEE Selling federated querys (2009-02-12 13:41) . . . . . . . . . . . . . . . . . . . OBIEE Switching between lters (2009-02-13 13:36) . . . . . . . . . . . . . . . . . . . . OBIEE Editing system wide defaults (2009-02-17 17:32) . . . . . . . . . . . . . . . . . . 8
OBIEE Making a distinct date prompt (2009-02-23 12:53) . . . . . . . . . . . . . . . . . OBIEE Reporting on dateranges (2009-02-23 15:31) . . . . . . . . . . . . . . . . . . . . OBIEE see you in Brigthon (2009-02-24 07:43) . . . . . . . . . . . . . . . . . . . . . . . OBIEE Executing your own JavaScript (2009-02-25 14:05) . . . . . . . . . . . . . . . . . OBIEE Conguring Case Insensitive Search (2009-02-26 20:15) . . . . . . . . . . . . . . OBIEE Default Portnumbers (2009-02-26 20:39) . . . . . . . . . . . . . . . . . . . . . . OBIEE Simulating Drill up (2009-02-27 11:44) . . . . . . . . . . . . . . . . . . . . . . . 3.3 March . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Between Dates Prompt (2009-03-02 11:11) . . . . . . . . . . . . . . . . . . . . . OBIEE Date, TimeStamp and ORACLE Indexes (2009-03-03 18:25) . . . . . . . . . . . OBIEE NQSSetSessionValue (2009-03-03 22:31) . . . . . . . . . . . . . . . . . . . . . . . OBIEE Custom Authenticators (2009-03-05 21:45) . . . . . . . . . . . . . . . . . . . . . BI Consultant 2008 (2009-03-06 10:58) . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE identifying the hierarchy level (2009-03-06 13:32) . . . . . . . . . . . . . . . . . Forum Autorefresh (2009-03-09 13:31) . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE date prompt to day month year (2009-03-10 08:26) . . . . . . . . . . . . . . . . OBIEE hidden column writeback (2009-03-10 11:31) . . . . . . . . . . . . . . . . . . . . OBIEE Google Maps Multiple Addresses (2009-03-17 08:50) . . . . . . . . . . . . . . . . OBIEE Referencing Presentation Variables in Filters (2009-03-17 13:19) . . . . . . . . . 3.4 April . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Dynamic prompt content (2009-04-01 17:01) . . . . . . . . . . . . . . . . . . . . OBIEE Between prompt using the calendar control (2009-04-01 19:33) . . . . . . . . . . OBIEE Image prompt (2009-04-01 20:54) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE 10.1.3.4.0 Get your patches (2009-04-02 22:05) . . . . . . . . . . . . . . . . . . . OBIEE OBI - Forum Live (2009-04-03 12:00) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Questions (2009-04-03 19:54) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Using SQL based scale makers (2009-04-07 09:27) . . . . . . . . . . . . . . . . . OBIEE Multi lingual prompt (2009-04-15 19:42) . . . . . . . . . . . . . . . . . . . . . . OBIEE Showing zeros in a bargraph (2009-04-17 09:21) . . . . . . . . . . . . . . . . . . OBIEE Get the FireBug! (2009-04-17 12:12) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Prompts putting the label in front (2009-04-17 22:13) . . . . . . . . . . . . . . . OBIEE Prompts putting the label in front part 2 (2009-04-18 08:59) . . . . . . . . . . . OBIEE The nal skills, Creating great dashboards. (2009-04-19 19:48) . . . . . . . . . . OBIEE Dashboard Design 001 (2009-04-19 20:36) . . . . . . . . . . . . . . . . . . . . . . OBIEE 10.3.4.1 is out! (2009-04-25 08:45) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE 10341 First Impressions (2009-04-25 10:16) . . . . . . . . . . . . . . . . . . . . . OBIEE Opaque data labels on charts (2009-04-25 12:53) . . . . . . . . . . . . . . . . . . OBIEE Answers Tab Headings (2009-04-26 11:01) . . . . . . . . . . . . . . . . . . . . .
251 253 255 255 256 257 259 260 260 261 262 263 264 265 269 269 270 270 273 274 274 275 276 277 278 278 278 281 282 284 284 285 286 286 291 291 292 293 9
OBIEE not all change is good change (2009-04-26 11:42) . . . . . . . . . . . . . . . . . . OBIEE OLAP on 11G (2009-04-30 21:50) . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5 May . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Enable users to change password (2009-05-04 16:00) . . . . . . . . . . . . . . . . OBIEE Bubble chart (2009-05-05 14:11) . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Greenbar Customization (2009-05-05 20:04) . . . . . . . . . . . . . . . . . . . (2009-05-05 21:14) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Brighton 2009 (2009-05-16 19:03) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Cache File Name revealed (2009-05-19 12:52) . . . . . . . . . . . . . . . . . . . . OBI Forum live de tweede editie (2009-05-25 14:18) . . . . . . . . . . . . . . . . . . . . OBIEE views.css color cheat sheet (2009-05-26 02:50) . . . . . . . . . . . . . . . . . . . OBIEE Background colour prompt (2009-05-28 09:56) . . . . . . . . . . . . . . . . . . . 3.6 June . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Essbase install (2009-06-06 21:36) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE get Internet Explorer Developer Toolbar (2009-06-11 11:30) . . . . . . . . . . . OBIEE New portal banner (2009-06-11 19:44) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Leading zeros calendar prompt (2009-06-12 15:33) . . . . . . . . . . . . . . . . . OBIEE Availible images (2009-06-15 22:03) . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Get all users from RPD (2009-06-16 21:43) . . . . . . . . . . . . . . . . . . . . . OBIEE Remote Admintool login problems (2009-06-19 22:56) . . . . . . . . . . . . . . . OBIEE Get all users and roles from RPD (2009-06-22 19:49) . . . . . . . . . . . . . . . OBIEE Remember my ID and password (2009-06-23 19:19) . . . . . . . . . . . . . . . . OBIEE backslash in dashboard page name (2009-06-23 20:37) . . . . . . . . . . . . . . . OBIEE Online Photoshop (2009-06-28 08:19) . . . . . . . . . . . . . . . . . . . . . . . . 3.7 July . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Dashboard Default Controls (2009-07-07 18:20) . . . . . . . . . . . . . . . . . . OBIEE Cool CSS trick (2009-07-08 17:57) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Adding custom image in Conditional Column Format (2009-07-08 18:59) . . . . OBIEE perfmon (Performance Monitor) (2009-07-09 20:23) . . . . . . . . . . . . . . . . OBIEE made it to Expert on OTN (2009-07-10 09:35) . . . . . . . . . . . . . . . . . . . OBIEE Nifty New Blog (2009-07-10 09:47) . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Hide the page options button (2009-07-10 11:03) . . . . . . . . . . . . . . . . . . OBIEE New Sample Sales Analysis v 1.3 (2009-07-11 21:46) . . . . . . . . . . . . . . . . OBIEE DiagCap.vbs (2009-07-12 15:19) . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Enable508 (2009-07-13 21:17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE OTN is Down / was Down (2009-07-16 10:32) . . . . . . . . . . . . . . . . . . . OBIEE If you had a 1000 wishes&. (2009-07-17 21:35) . . . . . . . . . . . . . . . . . .
294 294 295 295 295 297 299 299 301 302 302 303 304 304 304 304 305 305 306 307 308 310 310 311 311 311 311 311 313 313 314 314 315 315 315 316 316 317
OBIEE Hide the saved lter view link (2009-07-22 19:14) . . . . . . . . . . . . . . . . . OBIEE my rst server (2009-07-23 19:39) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE How to get started (2009-07-25 22:16) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Google Maps an alternative ending (2009-07-26 15:58) . . . . . . . . . . . . . . OBIEE Moving period to date aggregations (2009-07-27 20:14) . . . . . . . . . . . . . . 3.8 August . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE UDML and Notepad (2009-08-02 12:13) . . . . . . . . . . . . . . . . . . . . . . . OBIEE www obiforums com (nice idea) (2009-08-03 19:41) . . . . . . . . . . . . . . . . OBIEE TopN versus the rest (2009-08-06 17:35) . . . . . . . . . . . . . . . . . . . . . . OBIEE Prompts setting a default value to force a selection (2009-08-15 15:57) . . . . OBIEE Google Maps linebreak in annotations (2009-08-15 19:33) . . . . . . . . . . . . . OBIEE Prompt based on groupmembership (2009-08-17 19:05) . . . . . . . . . . . . . . OBIEE Cong Tags (2009-08-19 20:45) . . . . . . . . . . . . . . . . . . . . . . . . . . .
317 318 318 321 321 322 322 323 324 326 327 328 329 330 332 332 333 334 336 336 337 338 339 340 341 341 341 342 342 342 343 345
OBIEE Bing Maps (2009-08-21 22:11) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9 September . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Got the u (2009-09-13 16:05) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OBIEE Patches 10341 (2009-09-18 21:06) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE ODBC Client (2009-09-19 00:43) . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE a blog lost&. (2009-09-20 09:06) . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE LDAP Problems? Try this! (repost) (2009-09-22 00:20) . . . . . . . . . . . . . . OBIEE Tooltip Text in Column Heading (2009-09-22 15:33) . . . . . . . . . . . . . . . . OBIEE Grand Totals with Calculated Columns (repost) (2009-09-24 00:21) . . . . . . . OBIEE Using the Top N Filter (repost) (2009-09-26 00:22) . . . . . . . . . . . . . . . . OBIEE When the Top N Filter fails& (repost) (2009-09-28 00:25) . . . . . . . . . . . . OBIEE Open a Linux-Hosted OBIEE Repository in Online Mode (repost)
(2009-09-30 00:26) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.10 October . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Multiple repository s / Multiple presentation servers (2009-10-02 21:51) . . . . . a generic calendar dimension (2009-10-29 20:09) . . . . . . . . . . . . . . . . . . . . . .
3.11 December . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Making an OR lter (2009-12-17 09:46) . . . . . . . . . . . . . . . . . . . . . . . OBIEE Top N Months across (2009-12-17 10:25) . . . . . . . . . . . . . . . . . . . . . . 4 2010 4.1 January . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE a new year (2010-01-02 20:13) . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE PATCHES 10.1.3.4.1 part 2 (2010-01-03 20:51) . . . . . . . . . . . . . . . . . . . OBIEE Navigating from report to report (2010-01-05 19:56) . . . . . . . . . . . . . . . . OBIEE Aggregate BY part 2 (2010-01-08 21:18) . . . . . . . . . . . . . . . . . . . . . .
OBIEE ResultRowLimit (2010-01-13 18:52) . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Google Charts part 1 (2010-01-16 21:19) . . . . . . . . . . . . . . . . . . . . . . OBIEE Google Charts part 2 (2010-01-19 20:28) . . . . . . . . . . . . . . . . . . . . . . OBIEE Oracle support (2010-01-20 19:32) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Horizontal Pivot Sections (2010-01-22 21:03) . . . . . . . . . . . . . . . . . . . . OBIEE Google Charts part 3 QR Codes (2010-01-25 16:08) . . . . . . . . . . . . . . . . OBIEE Party 2000 page views (2010-01-27 20:26) . . . . . . . . . . . . . . . . . . . . . . OBIEE Performance tuning (2010-01-28 18:35) . . . . . . . . . . . . . . . . . . . . . . . OBIEE Horizontal Pivot Sections Part 2 (2010-01-30 00:00) . . . . . . . . . . . . . . . . OBIEE Reset OC4J Admin password (2010-01-31 19:16) . . . . . . . . . . . . . . . . . . 4.2 February . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Report Name Length (2010-02-03 20:16) . . . . . . . . . . . . . . . . . . . . . . OBIEE PATCHES 10.1.3.4.1 part 3 (2010-02-06 17:44) . . . . . . . . . . . . . . . . . . . OBIEE Pivot Conditional Format Grand Total Part 2 (2010-02-06 20:40) . . . . . . . . OBIEE Grabbing the logical SQL (2010-02-09 20:26) . . . . . . . . . . . . . . . . . . . . OBIEE Changing unchangeable cells (2010-02-12 20:00) . . . . . . . . . . . . . . . . . . OBIEE Chancing CSS style on the y (2010-02-15 20:22) . . . . . . . . . . . . . . . . . OBIEE JavaScript and comments (2010-02-18 18:57) . . . . . . . . . . . . . . . . . . . . OBIEE ATR les (reports). (2010-02-21 20:39) . . . . . . . . . . . . . . . . . . . . . . . OBIEE Popup box (2010-02-24 20:09) . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Presentation Server Always Refresh (2010-02-27 20:42) . . . . . . . . . . . . . . 4.3 March . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Quirky Report Name (2010-03-02 19:47) . . . . . . . . . . . . . . . . . . . . . . OBIEE Report XML Structure Part 1 (2010-03-05 21:05) . . . . . . . . . . . . . . . . . OBIEE conditional format using arrows (2010-03-07 21:03) . . . . . . . . . . . . . . . . OBIEE Report XML Structure Part 2 (2010-03-08 20:27) . . . . . . . . . . . . . . . . . OBIEE Report XML Structure Part 3 (2010-03-11 20:48) . . . . . . . . . . . . . . . . . OBIEE Start reading on graphs! (2010-03-16 20:58) . . . . . . . . . . . . . . . . . . . . OBIEE rtfm.ini cong le (2010-03-22 16:49) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE PATCHES 10.1.3.4.1 part 4 (2010-03-26 23:27) . . . . . . . . . . . . . . . . . . . 4.4 April . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE 11G still waiting&& (2010-04-19 21:49) . . . . . . . . . . . . . . . . . . . . . . 4.5 May . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE using display folders (2010-05-05 10:50) . . . . . . . . . . . . . . . . . . . . . . . OBIEE multi-line tabs (2010-05-06 14:26) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Naming Conventions Physical Layer (2010-05-07 10:55) . . . . . . . . . . . . .
349 350 352 353 353 355 356 357 359 361 362 362 363 364 367 370 372 374 375 377 378 379 379 379 380 382 383 384 385 385 385 385 386 386 386 388 390 391
OBIEE New Google charts (2010-05-08 21:27) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Naming Conventions 12 Business Model Layer (2010-05-09 11:02) . . . . . . . . .
OBIEE See me speak (2010-05-11 11:40) . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Remove Default button from one dashboard only (2010-05-11 18:51) OBIEE Naming Conventions . . . . . .
393 393 394 395 396 397 398 398 401 406 408 412 413 413 414 414 414 414 415 415 416 416 419 421 422 423 427 428 428 428 430 430 430 431 431 432 433 433 436 13
OBIEE Remove PDF print option for one dashboard only (2010-05-11 21:13) . . . . . . OBIEE Open letter to Oracle (2010-05-14 11:51) . . . . . . . . . . . . . . . . . . . . . . OBIEE Remove line below guided navigation link (2010-05-15 19:02) . . . . . . . . . . . My Scrapbook (2010-05-16 12:17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Events Calendar (2010-05-17 20:07) . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Conditional format based on other column in charts (2010-05-18 09:39) . . . . . OBIEE Playing With TopN Part 1 (2010-05-20 21:13) . . . . . . . . . . . . . . . . . . . OBIEE Playing With TopN Part 2 (2010-05-21 21:41) . . . . . . . . . . . . . . . . . . . OBIEE Brighton 2010 (2010-05-22 17:50) . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Playing with TopN part 3 the Rank Function (2010-05-22 20:16) . . . . . . . . . OBIEE 11g The GA bet (2010-05-23 23:54) . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Like to bet? (2010-05-24 22:18) . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE TimeStamp Calculations: (2010-05-25 18:00) . . . . . . . . . . . . . . . . . . . . 4.6 June . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE 11g Launch (2010-06-06 12:59) . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Guide user to help text (2010-06-14 12:36) . . . . . . . . . . . . . . . . . . . . . OBIEE PATCHES 10.1.3.4.1 part 5 (2010-06-17 08:32) . . . . . . . . . . . . . . . . . . . OBIEE11G Visualisations (2010-06-18 10:21) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Multie line tabs part 2 (2010-06-23 14:40) . . . . . . . . . . . . . . . . . . . . . OBIEE Which report uses which column (2010-06-24 18:50) . . . . . . . . . . . . . . . . OBIEE you don t want to see this&.. (2010-06-25 08:48) . . . . . . . . . . . . . . . . . OBIEE Google map redux (2010-06-26 18:03) . . . . . . . . . . . . . . . . . . . . . . . . OBIEE dynamic pivot calculations (2010-06-28 10:18) . . . . . . . . . . . . . . . . . . . OBIEE Adding Image to Column Header (2010-06-30 08:42) . . . . . . . . . . . . . . . 4.7 July . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Which connection pool user NOT to use (2010-07-02 10:52) . . . . . . . . . . . OBIEE 10G the Farewell Competition (2010-07-04 11:12) . . . . . . . . . . . . . . . . . OBIEE dynamic columns in the by statement (2010-07-04 14:34) . . . . . . . . . . . . . OBIEE 10G The Farewell Competition! (2010-07-05 11:49) . . . . . . . . . . . . . . . . OBIEE Administration Tool Options Part 1 (2010-07-06 08:13) . . . . . . . . . . . . . . OBIEE11g Launch day! (2010-07-07 16:59) . . . . . . . . . . . . . . . . . . . . . . . . . OBIEE Administration Tool Options Part 2 (2010-07-08 08:22) . . . . . . . . . . . . . . OBIEE Administration Tool Options Part 3 (2010-07-10 08:27) . . . . . . . . . . . . . . OBIEE Administration Tool Options Part 4 (2010-07-12 08:33) . . . . . . . . . . . . . . OBIEE Images Cheat Sheet (2010-07-14 00:43) . . . . . . . . . . . . . . . . . . . . . . . OBIEE remove the whole portalbanner (2010-07-16 11:23) . . . . . . . . . . . . . . . . .
14
Chapter 1
2007
1.1 December
[2] Where 1 = Tyre change, 2 = Oil Change, 3= Fuel Filter Change, 4 = Other maintenance.
They want this data combined in one chart, to see if a trip to garage has an inuence on the fuel consumption.
First I combined the data into one view using UNION ALL and a couple of dummy columns. If I have an event for that date I put in a 10 else NULL.
[4]
[17-DEC-2007] @George:
[6]
17
[1] The setup documentation and the default settings from OBIEE for MS-Oce can put you in the wrong direction. The port number is the port where your bioce is running, default this is the same port as your BI-server (default) 9704. Your connection could look like this:
[2]
1. 2. http: http://bp1.blogger.com/_3AP-vNabdk4/R1f4-j2SHCI/AAAAAAAAABQ/eA_TvHp72hE/s1600-h/OBIEE_MS_OFFICE_ //bp1.blogger.com/_3AP-vNabdk4/R1f3Ij2SHBI/AAAAAAAAABI/eutaEe5giHE/s1600-h/OBIEE_MS_OFFICE_CONNECTION.JPG CONNECTION_WITH_PORT_INFO.JPG
18
3. http://oraclebi.blogspot.com/2007/12/olap-workshop-part-3-building-analytic.html
One of my customers wanted some data presented in a pivot table with a maximum of 5 columns. If more data is available then a sort of carriage return should be given and continue on next line. (A sort of DTP) First I concatenated all the data into 1 cell:
[1]
Then
determined
the
ColomnNumber
and
RowNumber
for
each
element.
[2]
19
[4] Dont forget to set the aggregate level for the measure to rst!
1. http://bp2.blogger.com/_3AP-vNabdk4/R1kLskfttHI/AAAAAAAAABk/JNwQlSy_nOA/s1600-h/obiee_concat_data.JPG 2. http://bp0.blogger.com/_3AP-vNabdk4/R1kOrEfttJI/AAAAAAAAAB0/1Llu22_vukk/s1600-h/obiee_row_number.JPG 3. http://bp0.blogger.com/_3AP-vNabdk4/R1kOmEfttII/AAAAAAAAABs/eXyTiP6ilok/s1600-h/obiee_column_number.JPG 4. http://bp0.blogger.com/_3AP-vNabdk4/R1kPfEfttKI/AAAAAAAAAB8/N5waGJo-b14/s1600-h/OBIEE_PIVOT_CARRIAGE_ RETURN.JPG
6.1 EVALUATE Function This function is intended for scalar and analytic calculations. Syntax: EVALUATE(DB Function( %1), { Comma separated Expression }) Example: SELECT 20
e.lastname,sales.revenue,EVALUATE(dense rank() over(order by %1 ),sales.revenue) FROM sales s, employee e; As often in practice the real world is more complex: Good practice is to tell the EVALUATE function which type of return value it can expect: EVALUATE(DB Function( %1) as returntype, {Comma separated Expression }). If you omit this it might sometimes complain that it cant concatenated values from a dierent type. Another trap is when you use columns from several tables for the input variables, be sure that they have a direct join. Else OBIEE will try to join them underwater which can lead to unwanted Cartesian products.
6.2 EVALUATE AGGR Function This function is intended for aggregate functions with group by clause. Syntax: EVALUATE AGGR(DB Aggregate Function( %1), {comma separated Expression }) Example: SELECT year.year, sales.qtysold, EVALUATE AGGR(sum( %1), sales.quantity) From SnowFlakeSales; This function is very useful if you want to use the build in statistics functions from the ORACLE database like: CORR COVAR POP STDDEV POP The following example calculates the coecient of correlation between the list prices and minimum prices of products by weight class in the sample view oe.products:SELECT weight class, EVALUATE AGGR(CORR( %1, %2) as double, product information.list price, product information.min price) FROM product information; If you get a [38083] The Attribute denes a measure using an obsolete method. error, check whether you set the Aggregation Rule of the logical column correctly. Good info can also be found here: [1]http://www.oracle.com/technology/products/bi/pdf/Oracle %20Business %20Intelligence %20Server %20and %20Embedded %20DB %20Functions.pdf
1.
http://www.oracle.com/technology/products/bi/pdf/Oracle%20Business%20Intelligence%20Server%20and%
20Embedded%20DB%20Functions.pdf
21
currentTime => @ {system.currentTime } system.productVersion => @ {system.productVersion } session.locale => @ {session.locale } = en-gb session.language => @ {session.language } = en rtl =>@ {session.rtl } = false session.loginTime => @ {session.loginTime } session.logoutTime =>@ {session.logoutTime } session.lastAccessTime =>@ {session.lastAccessTime } session.currentUser => @ {session.currentUser.id } = administrator user.homeDirectory => @ {user.homeDirectory } = /users/administrator user.id => @ {user.id } = administrator user.displayName => @ {user.displayName } = administrator
If you check in a repository in a multi-user environment, you will notice that it doesnt accept empty presentation tables, which you might use for table indentation.
[1] To make it invisible for the other users you can make a special user HideColumn: 22
[4][5] This way OBIEE checks in and out without any problems.
1.
http:
23
XMLP ADMIN XMLP DEVELOPER XMLP SCHEDULER XMLP ANALYZER EXCEL XMLP ANALYZER ONLINE XMLP TEMPLATE DESINGER If you are working with multi user repository development remember to assign the groups at least to one project, or the group will be lost at check in.
1. http://bp0.blogger.com/_3AP-vNabdk4/R2DPTJPKG1I/AAAAAAAAAC4/_xGzZsqnrP8/s1600-h/OBIEE_Default_Users.JPG
[1] 24
For a customer I developed a simple and crude alternative. First I get the LAG column and a Dummy column which calculates the total duration in the selection so far:
[2]
[3] Then a select a vertical bar graph in which I give the dummy column the same colour as the background: 25
[4] I know its crude, but it works, but any better suggestions are welcome.
1. http://bp0.blogger.com/_3AP-vNabdk4/R2jshOEukGI/AAAAAAAAADQ/ofQS7i8OGxw/s1600-h/OBIEE_DURATION_BETWEEN_ EVENTS.JPG 2. http://bp1.blogger.com/_3AP-vNabdk4/R2jsneEukHI/AAAAAAAAADY/gsfT0Q-gVOo/s1600-h/obiee_dummy_column.JPG 3. http://bp0.blogger.com/_3AP-vNabdk4/R2jsuOEukII/AAAAAAAAADg/r2HsXivmTx0/s1600-h/obiee_lag_column.JPG 4. http://bp3.blogger.com/_3AP-vNabdk4/R2js6-EukJI/AAAAAAAAADo/Vb0r1PurZqI/s1600-h/OBIEE_DURATION_ BETWEEN_EVENTS_TOTAL.JPG
[quote]Options for these values include a static value, a variable, a value sourced from a column included in the request, or one derived from a SQL query. Advanced options enables you to dynamically set values based on results of a column, query, or presentation variable which is evaluated while rendering the chart as follows.[/quote]
It seems that if a query is very complex (5 union all and some dashboard prompts) you loose the column selector (undocumented feature?).
== After futher research I discovered that this feature seems to be turned on or o based on the availble columntypes. If you make the column an aggragate (SUM,MIN,MAX etc) you can use it directly.... == 26
You can add the scale marker manually by rst adding a static marker and then editing the XML directly by replacing the linePosition part:
(saw:linePosition>(saw:columnRef columnID=c59/> (/saw:linePosition> ( Replace the ( with < ) where c59 is the column you want to use as a scale marker.
27
28
Chapter 2
2008
2.1 January
CREATE TABLE SH.DEMOPAR ( ID NUMBER, SDATE DATE DEFAULT trunc(sysdate - 183), EDATE DATE DEFAULT trunc(sysdate), MACHINENUMBER VARCHAR2(30 BYTE) ) ; CREATE UNIQUE INDEX SH.DEMOPAR PK ON SH.DEMOPAR (ID) ; CREATE TABLE SH.DEMODATE (ID NUMBER, MDATE DATE, VALUE NUMBER, INTERPOL NUMBER, C1 NUMBER, C2 NUMBER ) ; CREATE UNIQUE INDEX SH.DEMODATE PK ON SH.DEMODATE (ID, MDATE) ; For the parameter table you need to construct an XML le for the write-back functionality: -<-webmessagetables sawm=com.siebel.analytics.web/message/v1> -<-webmessagetable lang=en-us table=Messages system=WriteBack> -<-webmessage name=demosavepar> -<-XML> -<-writeBack connectionPool=CP dateDemo> -<-insert>INSERT INTO DEMOPAR VALUES(@ {c0 },@ {c1 },@ {c2 },@ {c3 }) -<-update>UPDATE DEMOPAR SET SDATE = @ {c1 },EDATE = @ {c2 },MACHINENUMBER = @ {c3 } WHERE ID= @ {c0 } -<-/writeBack> -<-/XML> -<-/webmessage> 29
-<-/webmessagetable> -<-/webmessagetables> Alter the -<- in < and place the le in ?:\ {OracleBI }\web\msgdb\customMessag es. Next restart the presentation server. Add both tables to two separate connection pools in your repository! Be sure the cache is o. Make one report for the parameter table and add the write-back functionality.[1]
Next go to the connection pool for your datatable and open the Execute before query tab:
[2] Here
you
can
put
your
script
to
execute
the
stored
procedure:[3]
Now you can put both reports on a dashboard! Till next time
1. http://bp3.blogger.com/_qd3TDEvIh4Y/R4drCHkyvcI/AAAAAAAAAAM/UF52kD_aHn8/s1600-h/obiee_writeback.JPG 2. http://bp0.blogger.com/_qd3TDEvIh4Y/R4duMXkyveI/AAAAAAAAAAc/VC_Hpz5VvZE/s1600-h/obiee_execute_before_ query.JPG 3. http://bp3.blogger.com/_qd3TDEvIh4Y/R4duiHkyvfI/AAAAAAAAAAk/476Nez_9Xj0/s1600-h/obiee_query_script.JPG
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPL ACE(REPLACE(TBLTRUCKS.LICENSEPLATE,1, ),2, ),3, ),4, ),5, ),6, ),7, ),8, ),9, ),0, ),+, ),-, ),., ))) <> 0 THEN Non-Numeric ELSE Numeric END Version 2 (Doing it on the database):
CASE WHEN EVALUATE(LENGTH(TRIM(TRANSLATE( %1, %2, %3))) AS DOUBLE PRECISION, TBLTRUCKS.LICENSEPLATE, +-.0123456789, ) IS NULL THEN Numeric ELSE Non-Numeric END
31
One of our custumers wants not only the data value in the mouse over label but als the X and Y axis value.
[1] You can achieve this by editing the .PCXML for the graph type.
% BUBBLE VALUE=> The value for the bubble item. [bubble] % CATEGORY NAME => The name of the category that the data item belongs to. [All, except, X-Y and Time Plot] % CATEGORY TOTAL => The sum of all data values in the category to which the data item belongs. [Area, Bar, Line, Pareto, Pie, Radar] % CLOSE VALUE => The close value for a high-low data item. [Stock] % GRAPH TOTAL => The sum of all data values in a bar, line, pie, or radar graph. [Area, Bar, Line, Pareto, Pie, Radar] % HIGH VALUE => The high value for a high-low data item. [Stock] % LOW VALUE => The low value for a high-low data item. [Stock] % OPEN VALUE => The open value for a high-low data item. [Stock] % PERCENT OF CATEGORY => The data value represented as a percentage of the sum of all data values in its category. [Area, Bar, Line, Pareto, Pie, Radar] % PERCENT OF TOTAL => The data value represented as a percentage of the sum of all data values in the graph. [Area, Bar, Line, Pareto, Pie, Radar] % SERIES NAME => The name of the data series that the data item belongs to. [All] % TIME VALUE => The time value for a Time Plot data item. [Time Plot] % VALUE => The value of the data item. [Area, Bar, Line, Pareto, Pie, Radar] % XVALUE => The x value for an X-Y data item. [X-Y] % YVALUE => The y value for an X-Y or Time Plot data item. [X-Y, Time Plot]
You can nd the .PCXML les here: {OracleBI }\web\app\resashs oracle10\popbin or {OracleBI }\web\app\resashs Siebel77\popbin look for <- DataLabels Font=Size:9;Style:Bold; TransparentBackground=False BGColor= #FFFFFFcd BorderColor= #EEEEEE FormatString= % BUBBLE VALUE/> After editing you have to restart the java host and the presentation service. 32
1. In the map {OracleBI }\web\app\resashs oracle10\popbin make a copy of the PCXML for the graphtype you want customize. 2. rename the le [FI:bubble2.pcxml] 3. Open the le and make the custyomistions you want 4. In the map {OracleBI }\web\app\resashs oracle10\charts make a copy of the CXML for the graptype you want to customize. 5. rename the le [FI:bubble2.cxml] 6. open the le and edit in sawc:template => displayNameRef=kmsgChartCustomBubble 7. edit in sawc:seriesRules => displayNameRef=kmsgBubbleCustomSeries 8. edit in sawc:engineSpecic le=popbin/bubble2.pcxml 9. Save and close the le. 10. Next we have edit the messages !you have to this for every language you use! (remember to back it up, else you loose it after every (re-)install/update of OBIEE) [EDIT: or make a custommessage folder for each language] go to {OracleBI }\web\msgdb\l en\messages 11. open chartmessages.xml and add the entry <-WebMessage name=kmsgBubbleCustomSeries><TEXT>Bubble - Custom 33
12. Save and close the le 13. open charviewmessages.xml and add the name=kmsgChartCustomBubble><-TEXT>Bubble - Custom 14. Save and close the le 15. restart the Java-host and the prestationserver. entry <-WebMessage
[1] The default graph type are rather plain a simple professional eect can be created by playing around with the gradient eect in the PCXML le: <-Chart Version=4.30.00 BorderType=None Width=491 Height=295 BGGradientColor= #cccc GradientType=BottomTop > possible types are: 34
FI: CASE WHEN LOCATE(GROUP NAME, VALUEOF(NQ SESSION.GROUP)) > 0 THEN MyBM. SomeColumn ELSE - END The reason for using LOCATE is that NQ SESSION.GROUP returns a comma separated string with all the groups a user belongs to : Everyone;GROUP NAME Till Next Time
@ECHO o SETLOCAL IF [ %1] NEQ [] goto s start :: Author - Simon Sheppard, July 2003 :: Tested for Windows NT, 2K, XP :: Adapted by John Minkjan, January 2008 Ciber ECHO STAMPME.cmd ECHO Copy to a backup directory ECHO and rename a le with the DATE/Time ECHO. ECHO SYNTAX STAMPME sh.rpd 35
ECHO. :: To change the lename format just change around the last line below GOTO :eof :s start SET le= % n1 % SET pathname= % f1 % SET ext= % x1 % ::Get the date :: note ISO 8601 date format would require 4 digit YYYY Year) FOR /f tokens=6-8 delims=/ % %G IN (NET TIME \\ %computername %) DO ( SET mm= % %G SET dd= % %H SET yy= % %I ) :: Get the time FOR /f tokens=1,2 delims=: % %G IN (time/t) DO ( SET hr= % %G SET min= % %H ) copy % pathname % .\backup\ % le %- % yy %- % mm %- % dd %@ % hr %- % min % % ext %
(2008-01-30 07:34)
Ideas for my BLOG UDML optimize Reposotory group by EXecute on query area under XY plot Block area graphs simple scripts development street metalink 3 fragmentation timstamp add cast(year(timestampadd(SQL TSI WEEK,-1,current date)) as char(4)) cast(week(timestampadd(SQL TSI WEEK,-1,current date)) As char(2))),2)
right(0
trim(
cast(year(timestampadd(SQL TSI WEEK,0,measuredate)) as char(4)) right(0 trim( cast(week(timestampadd(SQL TSI WEEK,0,measuredate)) As char(2))),2) If you change the 0 to -1 you get a YearWeekAgo (or 2,3,4) other intervals are:
SQL TSI SECOND SQL TSI MINUTE SQL TSI HOUR SQL TSI DAY SQL TSI WEEK SQL TSI MONTH SQL TSI QUARTER SQL TSI YEAR Till Next Time
2.2
February
StopBi.cmd:
:: StopBI.Cmd :: Stops the Oracle BI Server :: Author: John Minkjan :: [1]http://knowledge.ciber.nl/weblog/ and [2]http://obiee101.blogspot.com/ Net stop Oracle BI Server exit
StartBi.cmd:
:: StartBI.Cmd :: Starts the Oracle BI Server :: Author: John Minkjan :: [3]http://knowledge.ciber.nl/weblog/ and [4]http://obiee101.blogspot.com/ Net start Oracle BI Server exit 37
:: StopBI.Cmd :: Stops and Starts the Oracle BI Server :: Author: John Minkjan :: [5]http://knowledge.ciber.nl/weblog/ and [6]http://obiee101.blogspot.com/ Net stop Oracle BI Server Net start Oracle BI Server exit Till Next Time
1. http://knowledge.ciber.nl/weblog/ 2. http://obiee101.blogspot.com/ 3. http://knowledge.ciber.nl/weblog/ 4. http://obiee101.blogspot.com/ 5. http://knowledge.ciber.nl/weblog/ 6. http://obiee101.blogspot.com/
in note pad. In the UDML script you regonise the ID of the connection (in this case 22). What we did was storing this le 4 times as dbTst.txt, dbDev.txt, dbPrd.txt and dbAcc.txt. In each le we only changed the datasource to the apporated database. Next we created 4 .cmd les (conToTst.cmd, conToDev.cmd, conToPrd.cmd and conToAcc.cmd). Each le looks like this: :: conToTst.cmd :: recongure OBIEE repository to TEST database :: Author: John Minkjan Ciber 38
:: Raymond de Vries Ciber :: stop the BI server Net stop Oracle BI Server :: Backup the rpd copy E:\OracleBI\server\Reposi tory\trucks.rpd ..\OracleBI\server\Reposi tory\trucks.rpd.bak :: run the update script :: info :> :: nQUDMLExec [-U [userid]] :: [-P [password]] :: -I input script pathname :: [-B base repository pathname] :: -O output repository pathname :: [-8] :: -8 is for UTF-8 :: Eg 1: nQUDMLExec -I testudml.txt -O rp1.rpd:: create a new repository rp1 :: Eg 2: nQUDMLExec -U administrator -I testudml.txt -B rp1.rpd -O rp2.rpd :: modify rp1 and write to rp2 :: Update the .rpd E:\OracleBI\server\BinxtbackslashnqUDMLexec.exe -U Administrator -P Administrator I E:\connect\dbTst.txt -B E:\OracleBI\server\Reposi tory\Trucks.rpd -O E:\OracleBI\server\Reposi tory\Trucks.rpd :: start the BI server Net start Oracle BI Server pause exit
1. http://www.rittmanmead.com/2007/10/27/scripting-entries-in-the-oracle-bi-repository/
39
OBIEE Adding session variables to the report title / using a narrative view
(2008-02-06 20:30)
A lot of times we nd in the request for reports please put the value of the used report variables in the title. But when you try that you quickly run into trouble. By default you are conned to only the predened ones:
From the OBIEE documentation: To show your own dened variables (repository/session/presentation) in OBIEE you have to use the
narrative view. First you have to add the variable(s) to your query:
Then alter the column properties, set the column hide property. 40
Next open a Narrative view, set your descriptive text, the variables are referenced by there a @ and there column number (in this case 2)
Set the rows to display to 1 Reorganize your compound lay-out so that your narrative view is directly below your title
Execute on connect -> Very usefull point for security logging events Execute before query -> Ideal to ll a global temp table or to do some execution logging Execute after query -> To close you execution loging Execute on dissconnect -> close your security log Sadly in the OBIEE documentation (10.1.3.x ) there is no info about these options... I did some research (mostly trail and error) on how to incoperate variables in these scripts. The syntax for this is dierent then in the rest of OBIEE. All parameters have to be enclosed in single quotes: :USER, :PASSWORD VALUEOF(REPOSITORY VARIABLE) VALUEOF(NQ SESSION.SESSION VARIABLE) If you want to pass something from the dashboard put in a session variable. The execution string is build like 42
BEGIN SCHEMA.PACKAGE NAME.PROCEDURE NAME(PARAMETER); END; Dont forget the semicolons ; Till Next Time
Default OBIEE groups these functions on the lowest level. If you want it in an other grouping you can use the BY statement in your function
43
In the background OBIEE is translating this to ANSI-SQL: WITH SAWITH0 AS (select T21.LICENSEPLATE as c1, T21.MEASUREDATE as c2, T21.FUELCONSUMPTION as c3, avg(T21.FUELCONSUMPTION) as c4, count(T21.FUELCONSUMPTION) as c8, sum(T21.FUELCONSUMPTION) as c9from TBLFUELCONSUMPTION T21group by T21.LICENSEPLATE, T21.MEASUREDATE, T21.FUELCONSUMPTION) select SAWITH0.c1 as c1, SAWITH0.c2 as c2, SAWITH0.c3 as c3, SAWITH0.c4 as c4, sum(SAWITH0.c9) over (partition by SAWITH0.c2) / sum(SAWITH0.c8) over (partition by SAWITH0.c2) as c5, sum(SAWITH0.c9) over (partition by SAWITH0.c1) / sum(SAWITH0.c8) over (partition by SAWITH0.c1) as c6, sum(SAWITH0.c9) over (partition by SAWITH0.c1, SAWITH0.c2) / sum(SAWITH0.c8) over (partition by SAWITH0.c1, SAWITH0.c2) as c7 from SAWITH0order by c1, c2, c3 Which isnt always the most cost eective way, you might consider using the EVALUATE AGGR function instead for very complex aggregations. Till Next Time
The behavior of the pivot view can be altered with the following parameters:
[MaxVisibleColumns] Sets the maximum number of columns to be displayed in a Pivot View default {1000 } [MaxVisiblePages] Sets the maximum number of page choices (or pages in PDF) to be displayed in a Pivot View default {1000 } [MaxVisibleRows] Sets the maximum number of rows to be displayed in a Pivot View. Default {100000 } [MaxVisibleSections] Sets the maximum number of sections to be displayed in a Pivot View. Default {1000 } Altered in the in-
If you still run out of cells try this: [CubeMaxPopulatedCells] The maximum number of populated cells in the Pivot Table. If this maximum is exceeded, the user receives an error when rendering the pivot table. Default {150000 } [CubeMaxRecords ] The maximum number of records returned by a query for the Pivot Table engine to process. This roughly governs the maximum number of cells that can be populated in a pivot table (unpopulated cells in a sparse pivot table do not count). If this maximum is exceeded, the user receives an error when rendering the pivot table.
under USER LOG FILE SIZE: If the log goes beyond this size OBIEE will rename it as NQQuery.log.old after it has nished the last request. In a development environment you might consider setting this value to 50KB (or even as low as 10KB).
That way the log only contains the very last actions you are interested in. Be aware that if the new log goes beyond the USER LOG FILE SIZE the old NQQuery.log.old will be overwritten.
2.3
March
WOW: (Word Of Warning) Do not use wordpad to edit this le but Notepad or an real XML-editor! Till Next Time
Because OBIEE graph types are not Date/Time aware you often face the problem of broken Date/Time Lines. If you dont want to wait for OBIEE 11G you might want to try this alternative. Our table with fuel consumption entrys doesnt have an entry for each day after ltering:[1]
48
[4] Be aware that a union query will inuence the perfromance! Till Next Time
1. http://bp2.blogger.com/_qd3TDEvIh4Y/R8q-OoJkGjI/AAAAAAAAAG4/Tx4f6N23iV4/s1600-h/OBIEE_UNION_001.JPG 2. http://bp1.blogger.com/_qd3TDEvIh4Y/R8q-DYJkGiI/AAAAAAAAAGw/puEEutCN8n0/s1600-h/OBIEE_UNION_002.JPG 3. http://bp0.blogger.com/_qd3TDEvIh4Y/R8q9-IJkGhI/AAAAAAAAAGo/--l9epvTnRc/s1600-h/OBIEE_UNION_003.JPG 4. http://bp2.blogger.com/_qd3TDEvIh4Y/R8q95oJkGgI/AAAAAAAAAGg/se_25YjaSV0/s1600-h/OBIEE_UNION_004.JPG
you might want to purge the whole cache. Put the following in a .txt le in your maintenance directory // Purge complete cache // John Minkjan Ciber Nederland // executed by cmd string: // nqcmd -d AnalyticsWeb -u Administrator -p Administrator -s c:\obiee\mscripts\purg ecompletecache.txt Call SAPurgeAllCache()
You can execute this from the commandline: nqcmd -d AnalyticsWeb -u Administrator -p Administrator -s c:\obiee\mscripts\purgeco mpletecache.txt
[1] 2. Purging the cache by table If you have a major update of your dimensional tables you might want to clear the cache for just one table. Put the following in a .txt le in your maintenance directory: // Purge complete cache // John Minkjan Ciber Nederland // FileName: PurgeTableCache.txt // executed by cmd string: // nqcmd -d AnalyticsWeb -u Administrator -p Administrator -s c:\obiee\mscripts\Purg eTableCache.txt Call SAPurgeCacheByTable( JJMORCL SH, NULL, SH, TBLTRUCKS ); You can execute this from the commandline: nqcmd -d AnalyticsWeb -u Administrator -p Administrator -s c:\obiee\mscripts\PurgeTa bleCache.txt
[2] WOW: the database, schema, (catalog), and tablename are the names in OBIEE not in the database. 3. Purging the cache by query Sometimes you only want to purge only old data from your cache. Put the following in a .txt. le in your maintenance directory: // Purge cache by Query // John Minkjan Ciber Nederland // FileName: PurgeQueryCache.txt 50
// executed by cmd string: // nqcmd -d AnalyticsWeb -u Administrator -p Administrator -s c:\obiee\mscripts\Purg eQueryCache.txt Call SAPurgeCacheByQuery(SELECT TBLFUELCONSUMPTION.LICENSEPLATE, TBLFUELCONSUMPTION.MEASUREDATE, TBLFUELCONSUMPTION.FUELCONSUMPTION FROM Trucks WHERE TBLFUELCONSUMPTION.MEASUREDATE <= TIMESTAMPADD(SQL TSI YEAR, -1,NOW())); // The query line must be one contiues line! You can execute this from the commandline: nqcmd -d AnalyticsWeb -u Administrator -p Administrator s c:\obiee\mscripts\Purg eQueryCache.txt [3]
WOW: the query is the OBIEE one not the database one! 4 Purging the cache by database Put the following in a .txt. le in your maintenance directory: // Purge cache by Database // John Minkjan Ciber Nederland // FileName: PurgeDataBaseCache.txt // executed by cmd string: // nqcmd -d AnalyticsWeb -u Administrator -p Administrator -s c:\obiee\mscripts\Purg eDataBaseCache.txt Call SAPurgeCacheByDatabase( JJMORCL SH ); // The dbName is the OBIEE name!
You can execute this from the commandline: nqcmd -d AnalyticsWeb -u Administrator -p Administrator -s c:\obiee\mscripts\PurgeDa taBaseCache.txt [4] Till Next Time
1. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/2348b176-71d1-4adf-b85f-658d3c8ad371/image4.png 2. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/2348b176-71d1-4adf-b85f-658d3c8ad371/image9.png 3. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/
51
Now why should you want to do that? OBIEE is not a database, so why would this be an advantage? If you have a slow connection to your source database, maybe because its on the other side of the world. If you have slow aggregation views. If you can predict what 90 % percent of your queries look like . From your user statistics you can pick up the top 10 of your queries, Check if you can make them dynamic by changing xed date into dynamic dates. Put the following in a .txt le in your maintenance directory. // Load cache by Query // John Minkjan CIBER Nederland // FileName: LoadCache.txt // executed by cmd string: // nqcmd -d AnalyticsWeb -u Administrator -p Administrator -s c:\obiee\mscripts\Load Cache.txt // Query 1 SELECT TBLFUELCONSUMPTION.LICENSEPLATE, TBLFUELCONSUMPTION.MEASUREDATE, TBLFUELCONSUMPTION.FUELCONSUMPTION FROM Trucks WHERE TBLFUELCONSUMPTION.MEASUREDATE >= TIMESTAMPADD(SQL TSI YEAR, -2,NOW()); // Query 2 SELECT TBLFUELCONSUMPTION.LICENSEPLATE, TBLFUELCONSUMPTION.MEASUREDATE, TBLFUELCONSUMPTION.FUELCONSUMPTION FROM Trucks WHERE TBLFUELCONSUMPTION.MEASUREDATE <= TIMESTAMPADD(SQL TSI YEAR, -3,NOW()); // The Queries are separated with a ; Till Next Time
SELECT case when 1=0 then TBLTRUCKS.LICENSEPLATE else Yes end FROM Trucks union all SELECT case when 1=0 then TBLTRUCKS.LICENSEPLATE else No end FROM Trucks
The case when 1=0 then TBLTRUCKS.LICENSEPLATE is only there to trick OBIEE in thinking that its selecting a column.
Set your default value, your presentation variable and set the label:
If you work in professional development street (a separate machine for development, testing, acceptance and production) you will have dierent version of the repository on dierent machines. It s good practice to show to the user which version of the repository they are working on. Since OBIEE doesn t have a (automatic) version number you have to use a work around. Here is one: In the repository make a new session variable init block INIT REP CONTROL . 53
Set the datasource to: SELECT 0.00.01 REP VERSION, 01-APR-2008 20:00 REP VERSION DATE FROM DUAL Add the two session variables REP VERSION DATE and REP
VERSION
54
In Presentation area add a new subject area Repository Version : To the description area add the text: The current version of the repository is: VALUEOF(NQ SESSION.REP VERSION). This version was brought to production on: VALUEOF(NQ SESSION.REP VERSION DATE)
Add a dummy table and column, set the permissions to your HiddenColumns groups:
55
REMEBER TO ALTER REP VERSION AND REP VERSION DATE each time you move your repository to the next server. Till Next Time
2.4
April
This is caused because the lterview only looks at the outer query of the UNION ALL statement:
[3] This logically leads to Request contains no lters I have developed a workaround for this problem: Open a new request with a dummy column:[4] 56
The CASE when 1=0 statement prevent executing from the query so it wont use any resources. On this request put all your promptcolumns in the lter and set them on is promptedor use named
prompts { [5] } . Be sure to also incoperate your hard coded lters! Add the lterview to your compound layout and remove all other views:[6]
Save your request as Filterview[7] Add the request to your dashboard and now you have the content o your lter on your dashboard.
57
[8]
1. http://knowledge.ciber.nl/weblog/?p=93 2. http://obiee101.blogspot.com/2008/03/obiee-continues-time-line.html 3. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/3f36468a-d769-4e1f-8906-4e3ce5f39104/image[11].png 4. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/3f36468a-d769-4e1f-8906-4e3ce5f39104/image[23].png 5. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/3f36468a-d769-4e1f-8906-4e3ce5f39104/image[26].png 6. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/3f36468a-d769-4e1f-8906-4e3ce5f39104/image[33].png 7. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/3f36468a-d769-4e1f-8906-4e3ce5f39104/image[30].png 8. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/3f36468a-d769-4e1f-8906-4e3ce5f39104/image[39].png
If you have a dashboard with a view selector by default OBIEE will executed the rst request from the selector when a dashboard page becomes active. Especially if have several heavy request will this really slow down your dashboard and irriate the hell out of your users. A tip is: Add an extra title view 58
to your report and give this the title make a selection Add this extra title view to your view selector and rename it make a selection. Be sure its on top of
the list.
Heard it trough the grapevine: OBIEE 10.1.3.3.3 will be released within 48 hours. Till Next Time 04/24/2008 07:20 -> The rumors seem to be wrong, still no release of 10.1.3.3.3. Till Next Time 59
2.5
May
First we made a simple report based on the columns Year, Year Ago Dollars and Dollars. For debugging purpose we added the Logical SQL view. On the year column we added the following lter based on a presentation variable. 60
[1]
No switch to the Advanced tab: Have a close look at the request XML especially the lter part: Periods.Year FILTER01 LEFT Now edit the FILTER XML to: @ {FILTER01 LEFT } {1 } @ {FILTER01 RIGHT } {1 } Dont forget the single quotes ().
Save the report! If you run the report and have a look at the logical SQL:
61
you will see that the lter have evaluated into 1=1, which is always TRUE. Its a good practice not to let it evaluate to NULL = NULL since not every database will give back the same result. Now create a new prompt called FILTER01 LEFT as a dropdown list based on SQL:
In the SQL statement you put: SELECT case when 0=1 then Markets.Region union all SELECT case when 0=1 then Markets.Region union all SELECT case when 0=1 then Markets.Region union all SELECT case when 0=1 then Markets.Region union all SELECT case when 0=1 then Markets.Region union all SELECT case when 0=1 then Markets.Region union all SELECT case when 0=1 then Markets.Region union all SELECT case when 0=1 then Markets.Region union all SELECT case when 0=1 then Markets.Region union all SELECT case when 0=1 then Markets.Region union all SELECT case when 0=1 then Markets.Region union all SELECT case when 0=1 then Markets.Region Test the result:
else 1 end FROM Paint else Markets.Total US end FROM Paint else Markets.Region end FROM Paint else Markets.District end FROM Paint else Markets.Market end FROM Paint else Products.Total Product end FROM Paint else Products.Type end FROM Paint else Products.Brand end FROM Paint else Products.UPC end FROM Paint else Products.Color end FROM Paint else Products.Finish end FROM Paint else Products.Size X end FROM Paint
62
Save the prompt and open a new dashboard page, put the prompt and the report on the dashboard page:
Till Next Time John Minkjan is a senior BI-consultant at Ciber in the Netherlands, the English text of this article is also published on his compagny blog [2]http://knowledge.ciber.nl/weblog/
1. http://bp1.blogger.com/_qd3TDEvIh4Y/SDBsSA8jhwI/AAAAAAAAALI/gvgsN1NPbxA/s1600-h/blog002.JPG 2. http://knowledge.ciber.nl/weblog/
OBIEE Changing the line color in a scatter graph with line (2008-05-23 09:35)
In OBIEE they forgot to put in a editor to change the line color for a Scatter with lines graph. Its a known issue on Metalink3. A simple workaround is to edit the PCXML le for this graph type. You can nd it in: ...\OracleBI\web\appbackslashres\s oracle10\popbin Open the le scatter.pcxml after the {/legend } tag and before {/graph } tag add the following:
{SeriesDenition Number=1 Color= #2175BB/ } {SeriesDenition Number=2 Color= #F4B44D/ } {SeriesDenition Number=3 Color= #A4C000/ } {SeriesDenition Number=4 Color= #F9F400/ } {SeriesDenition Number=5 Color= #82AFDD/ } {SeriesDenition Number=6 Color= #000000/ } {SeriesDenition Number=7 Color= #C8C8C8/ } {SeriesDenition Number=8 Color= #CC6600/ } {SeriesDenition Number=9 63
Color= #CC99CC/ } {SeriesDenition Number=10 Color= #EE00EE/ } {SeriesDenition Number=11/ } {SeriesDenition Number=12/ } {SeriesDenition Number=13/ } {SeriesDenition Number=14/ } {SeriesDenition Number=15/ } {SeriesDenition Number=16/ } {SeriesDenition Number=17/ } {SeriesDenition Number=18/ } {SeriesDenition Number=19/ } {SeriesDenition Number=20/ } (Note replace the { and } with correct tag symbols) Till Next Time
If you have this request: You will get a default table view like this:
Lets put it in a pivot table: Switch the measure label box with the region: 64
It becomes even more intressting wen we bring the measure label box to row pane:
2.6
June
One of our customers wanted a exible dashboard. They wanted to select a x number of trucks and have an individual graph for each truck. The number of selected truck varies between 0 and 5. We made this possible by using the RANK function in OBIEE. We made a simple report for the licence plate dimension:
[1][2] 65
[4] You see that the ltering is done after getting the RANK number from the db. Now save this report 5 times were you put a dierent number in each rank lter (SEL1, SEL2, SEL3, SEL4 and SEL5) . To test this make a dashboard page with a dimension prompt and the 5 SEL reports:
[7] Now make your real reports and lter them Filter based on results of another request.
66
[8]
[10] Do this also 5 times every time on a dierent SEL report. (RES1, RES2, RES3, RES4 and RES5) Put the 5 RES reports to your dashboard instead of the SEL reports.
67
(this text is also published on [13]http://knowledge.ciber.nl/) NOTE: in some cases using RCOUNT instead of RANK works better, there is a known issue of OBIEE RANK function when numbers are strings.
1. http://www.pi4aa.nl/blogjohn/OBIEEFlexibleDashboards_99FF/image.png 2. http://www.pi4aa.nl/blogjohn/OBIEEFlexibleDashboards_99FF/image_3.png 3. http://www.pi4aa.nl/blogjohn/OBIEEFlexibleDashboards_99FF/image_4.png 4. http://www.pi4aa.nl/blogjohn/OBIEEFlexibleDashboards_99FF/image_5.png 5. http://www.pi4aa.nl/blogjohn/OBIEEFlexibleDashboards_99FF/image_6.png 6. http://www.pi4aa.nl/blogjohn/OBIEEFlexibleDashboards_99FF/image_7.png 7. http://www.pi4aa.nl/blogjohn/OBIEEFlexibleDashboards_99FF/image_8.png 8. http://www.pi4aa.nl/blogjohn/OBIEEFlexibleDashboards_99FF/image_9.png 9. http://www.pi4aa.nl/blogjohn/OBIEEFlexibleDashboards_99FF/image_10.png 10. http://www.pi4aa.nl/blogjohn/OBIEEFlexibleDashboards_99FF/image_11.png 11. http://www.pi4aa.nl/blogjohn/OBIEEFlexibleDashboards_99FF/image_12.png 12. http://www.pi4aa.nl/blogjohn/OBIEEFlexibleDashboards_99FF/image_13.png 13. http://knowledge.ciber.nl/
68
[2]
[3] We connected this to a session variable called PORTALPATH. This is a OBIEE reserved word so will get a warning, just ignore it.
[4] You need to restart the BI-server and the presentationserver! Let s try it: USER1 69
[5] USER2
[6] USER3
Sometimes you want the OBIEE chart in a higher graphical denition. This can be done by altering the instancecong.xml. Problem with this is that this will change the setting for the whole presentation server. At one of our customers we had the need only to change this for the scatter chart and leave the rest on default (Flash) This is how we did it: Warning: Remember PNG and JPEG graphical types are not down drillable! Step 1: Altering imagetypes.cxml First locate your Chart support directory, usually found in &OracleBI\web\app\restbackslashs oracle10\chartsupport 70
Make a copy of imagetypes.cxml in the same directory, give it a name which refers to the chart type you want to use (eg: imagetypesScatter.cxml ) Open the renamed le (e.g. with Notepad):
! Save the le Step 2: Altering charttype.cxml Now locate the charts directory usually found &.\OracleBI\web\appackslashres\s oracle10\charts
} {/xi:include } {?xml:namespace prex = xi / } {xi:include parse=xml href=fmap://chartSupport/imagetypes.cxml } {/xi:include } (of course use the correct tag sign) Till Next Time
They wanted this to be imported into OBIEE, but couldn t get OBIEE to see the data. They got the connection oke, but didn t see the tables. This problem was caused by the fact that the generating application didn t prep the data. It didn t set the named ranges for the three tables. Here is how you do it by hand: Select a range:
When you now try to import the data into OBIEE you will see the three tables:
Till Next Time Note: dont forget to disable the count distinct feature: [1]http://obiee101.blogspot.com/2008/11/obiee-excell-count-disti nct-error.html
1. http://obiee101.blogspot.com/2008/11/obiee-excell-count-distinct-error.html
When a user attempts to execute a request that your code blocks, you can display an error message, and the request will not be executed. The answerstemplates.xml le includes a message named kuiCriteriaBlockingScript that can be overridden to either dene or include JavaScript that denes a validateAnalysisCriteria function. By default, this message contains a function that always returns True. Answers calls your validateAnalysisCriteria function when the user tries to execute the request. The function can return True if the request is not blocked, or False or a message if the request is blocked. If a message or a value other than False is returned, the message is displayed in a popup window. In either case, the query is blocked.
Since the documentation on this subject is guiding you in the wrong direction, I toke upon myself to make a step by step instruction. Step 1: in .. \OracleBI\web\msgdb create a customMessages folder if it not already there: 73
Step 2: in \OracleBI\web\msgdbackslashcustomMessages create an XML le named : qbCriteria.xml (The name is arbitrary, the content isn t !!!)
Step 3: Enter the following XML into the le { ?xml version=1.0 encoding=utf-8? } { WebMessageTables xmlns:sawm=com.siebel.analytics.web.messageSystem } { WebMessageTable system=QueryBlocking table=Messages } { WebMessage name=kuiCriteriaBlockingScript translate=no } { HTML } { script language=javascript src=fmap:myblocking.js / } { /HTML } { /WebMessage } { /WebMessageTable } { /WebMessageTables } Replace the { and } Save the le! In &OracleBI\web\app\restbackslashb mozilla (this is wrong in the OBIEE documentation) make a new text le called myblocking.js
Enter the following Script: // This is a blocking function. It makes sure users pick what I want them to. function validateAnalysisCriteria(analysisXml) { // Create the helper object var tValidator = new CriteriaValidator(analysisXml); 74
// Validation Logic if (tValidator.getSubjectArea() != Paint) return Why dont you try Paint?; if (!tValidator.dependentColumnExists(Markets,Region,Markets, District)) { // If validation script noties user, then return false alert(Region and District go so well together, dont you think?); return false; } if (!tValidator.dependentColumnExists(Sales Measures,,Periods,Year)) return You picked a measure so pick Year!; if (!tValidator.lterExists(Sales Measures,Dollars)) return Why dont you lter on Dollars?; if (!tValidator.dependentFilterExists(Markets,Market,Markets )) return Since youre showing specic Markets, please lter the markets.; var n = tValidator.lterCount(Markets,Region); if ((n <= 0) (n > 3)) return Please select 3 or fewer specic Regions; return true; } save the le: the name myblocking.js is seemingly hard coded is OBIEE somewhere, I wasn t able to change it&&.. Restart the whole BI-server and play around in the Paint and Paint Exec subject area. In Paint Exec:
In Paint:
In the datasource block we made a very simple query which determines which TNS to uses based on the time of the day:
In the connection pool you make a reference by using the VALUEOF method: 76
n theory it takes a maximum of 15 minutes (10 minutes for REP IB TNS, 5 minutes for the connection pool) to refresh all connections Till Next Time
2.7
July
Oracle Business Intelligence displays the results of the request when editing most views within Answers. If you prefer that the user explicitly ask to view the results, you can create an XML message that species that auto-preview should be disabled when new views are created. The user can still click the display results link to view the results when editing a view.
Here is my example. In your customMessage Folder make a new XML entry called PreventAutoPreview.XML (or any other name you fancy). This folder is ussaly found under ..\OracleBI\web\msgdbtbackslashcustomMessages. Add the following XML in the message:
One the big strengths of OBIEE is the possibility to easily integrate Excel sheets into the repository. If you leave everything to the default settings you will nd that you can t edit the sheet on the y without having to restart the OBIEE services. Here is a workaround. Step 1: Make the XLS workbook shareable 78
In the Editing tab check the Allow changes&&.. box. When prompted save the workbook! Step 2: Set the connection pool settings:
79
Uncheck: Require fully qualied table names Shared logon Enable connection pooling Use multithreaded connections Execute queries asynchronously Check: Parameters supported Set: Parameters supported to Repeatable read Step 3: 80
Deselect the cacheable checkbox Now when you have made a change to your Excel sheet you only have to press the refresh button in your
OBIEE report:
OBIEE managing the cache: Emptying/Purging the cache Part 2 (2008-07-19 10:42)
Besides using batch / shell command to purge the cache (see: [1]http://obiee101.blogspot.com/2008/03/obiee-manage-cache-part1.html), it s also possible to do this automatically based on events in your ETL process. This is done by having the OBIEE cache manager polling one or more a EVENTS table(s). What you do is have a predened reference table in a each database you are using. (If you have 1 complete ETL process you could log all table changes in one table.) The Event table should have the following structure (copied from the OBIEE documentation )
Note 1: You can play around with the column names as long as they imported in this order in the OBIEE repository. Note 2: Although UpdateTime needs to be unique, you can not put a UNIQUE constrain on this column. OBIEE copies the row back into the table during the purging process. A script for an Oracle version would look like this: CREATE TABLE OBIEE UPDATE EVENTS ( UPDATE TYPE INTEGER DEFAULT 1 NOT NULL, UPDATE TIME DATE DEFAULT SYSDATE NOT NULL, DB NAME VARCHAR2(40 BYTE), CATALOG NAME VARCHAR2(40 BYTE), 82
SCHEMA NAME VARCHAR2(40 BYTE), TABLE NAME VARCHAR2(40 BYTE) NOT NULL, OTHER VARCHAR2(80 BYTE) DEFAULT NULL ) / Imported in the OBIEE repository it would look like this:
Now assign this table as an event table: Tools > Utilities > Oracle Event Tables
Set the polling frequency, press OK. Let s ll the cache with a simple query: (SH schema)
Fill the Event table: (Based on the SH schema) INSERT INTO obiee update events 83
(db name, catalog name, schema name, table name ) VALUES ( orcl SH , NULL, SH , Sales ) / COMMIT / Look in the cache directory after the polling time:
Note 3: OBIEE removes each entry from the EVENT table independent if it was a success or not. Note 4: OBIEE only logs failures in the NQServer.log. Usually found in ..OracleBI\server\Log Till Next Time
1. http://obiee101.blogspot.com/2008/03/obiee-manage-cache-part-1.html
After a small discussion: why the hell he needed more then the OBIEE default of 100 gauges on a single screen? , he convinced me that it was for development purposes only. The properties which inuence the gauge behavior can be found in the instancecong.xml. If they are not yet present in the
If you want to run the websdervice on dierent portnumber or even better from the default port 80, this is what you have to do. Step 1: Navigate to your OC4J cong directory, ussally found in ..:\OracleBI\oc4j bi\j2ee\home\cong Step 2: Add a new directory called: backup orignal. Copy the whole content of the cong directory to the new directory. (better save then sorry......) Step 3: Open the le named default-web-site.xml in 84
a (XML) editor. Step 4: between the {web-site } nd the port= tag, change it to port = 80. Save
the le. Step 5: Add a new directory called: backup change YYYYMMDDNNN (:backup change 20080723001. Copy the whole content of the cong directory to the new directory. (Why?, if you not carefull during an upgrade you loose all your OC4J settings......) Step 6: Stop and start your OC4J. You can now run your OBIEE website from
the new portnumber. Of course you also have to alter the port number in the OBIEE cong les: ...\OracleBI\oc4j bi\j2ee\home\applicatio ns\bioce\bioice\WE BINF\bioce.xml ...\OracleBI\xmlp\XMLP textbackslashAdmin\Conguration\xmlp- server-cong.xml ...\OracleBIData\web\conf ig\instancecong.xml Till Next Time This article is also published on: [1]http://knowledge.ciber.nl/weblog/
1. http://knowledge.ciber.nl/weblog/
[1] On the last question just give RETURN, else if you do not enter the same password as the storepassword, you may get Cannot recover key errors when deploying your website. Step 3: Creating a new website cong le From the cong directory copy and paste the le default-web-site.xml rename the copy to secure-website.xml. Open the new le in a editor. In the {web-site } change the port number to 443 (or an other you like) add the sub tag: secure=true. Add the SSL-cong tag: {ssl-cong keystore=sslle keystore-password=MySecretPassword/ } 85
[2] Step 4: Edit SERVER.XML Open the le SERVER.XML in a editor and add reference to secure-web-site.xml. Between the application-server tags add: {web-site path=./secure-web-site.xml / }. Your le should look something like this:
[3] save the le! Step 5: an extra backup! Add a new directory called: backup change YYYYMMDDNNN (:backup change 20080723001. Copy the whole content of the cong directory to the new directory. (Why?, if you not carefull during an upgrade you loose all your OC4J settings......) Step 6: Restart OC4J Stop and start your OC4J. You can now run your OBIEE website from the default HTTPS adress. Remember: All your users still have to import the certicate! Of course you also have to alter the port number in the OBIEE cong les: ...\OracleBI\oc4j bi\j2ee\home\applicatio ns\bioce\bioice\WE B-INF\bioce.xml ...\OracleBI\xmlp\XMLP textbackslashAdmin\Conguration\xmlp- server-cong.xml ...\OracleBIData\web\conf ig\instancecong.xml Till Next Time This article is also published on: [4]http://knowledge.ciber.nl/weblog/
1. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/ef2715ca-8af2-42d6-be56-9ee93ea234e2/OBIEE_OC4J_004[3].jpg 2. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/ef2715ca-8af2-42d6-be56-9ee93ea234e2/OBIEE_OC4J_005[7].jpg 3. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/ef2715ca-8af2-42d6-be56-9ee93ea234e2/OBIEE_OC4J_006[3].jpg 4. http://knowledge.ciber.nl/weblog/
[1] If you want more or less choices returned alter / add this in the instancecong.xml: {Prompts } {MaxScrollValues }100 {/MaxScrollValues } {/Prompts } Till Next Time
1. http://bp1.blogger.com/_qd3TDEvIh4Y/SIiU54sAFXI/AAAAAAAAAYI/xVHmfUlUA2E/s1600-h/prompt_002.JPG
A: Yes, the default is 255, but why the hell you want to do that? Big chance that you run into trouble with the in statement OBIEE will create from this prompt! Anyway, this is how you do it: Add / modify the following in your instancecong.xml: {Prompts } {MaxDefaultValues }5000 {/MaxDefaultValues } {/Prompts } Till Next Time 87
Example: DATA STORAGE PATHS = d:\OracleBI\cache 256MB, f:\OracleBI\cache 256MB ; OBIEE lls uses these directories alternating, request 1 goes to rst directory, request 2 goes to second directory, request 3 goes to rst directory etc. some notes: 1. Don t make a directory larger than 4 GB, this caused by the fact that some of the OBIEE core products are VC++ based which uses an unsigned 32 bit integer for the memory allocation. 2. Working with an organization of 8000 users who run an average of 10 reports during the cache valid period (average cache entry size 10 KB), I have never seen the total allocated cache space become more then 1 GB during a 6 months monitoring period. If you really need a cache allocation of more then 2GB there is probably something seriously wrong with your DWH or DM. 3. Invest in one or more small high-speed disks with low access times and large cache memories. Give the drive(s) its/their own controller. If your are on a SAN ask your SAN system manager to give you a high priority access drive, so you don t have to wait . You might want to consider creating an in memory drive. 4. An Oracle Business Intelligence Server dened as a clustered server does not share cached data. The DATA STORAGE PATHS entry needs be unique for each server dened as a cluster participant. 5. Specifying more than one directory per drive does not improve performance, because le input and output (I/O) takes place through the same I/O controller. In general, specify only one directory per disk drive. Specifying multiple directories on dierent drives may improve the overall I/O throughput of the OBIEE Server internally by distributing I/O across multiple devices. 6. Seeding the OBIEE cache with large tables (more then 1MB) as source for relative small requests ( less then 50kb) force OBIEE to do a full le read for every request. Most modern databases have large shared pools and can do much quicker this read from memory. 7. Most datacentres have dedicated VLANs for communication between databases and OBIEE. Most of these connections are much quiker then reading from disk. MAX ROWS PER CACHE ENTRY Species the maximum number of rows in a query result set to qualify for storage in the query cache. Limiting the number of rows is a useful way to avoid using up the cache space with runaway queries that return large numbers of rows. If the number of rows a query returns is greater than the value specied in the MAX ROWS PER CACHE ENTRY parameter, the query is not cached. When set to 0, there is no limit to the number of rows per cache entry. Default: MAX ROWS PER CACHE ENTRY = 100000 ; Setting this any higher makes OBIEE an ETL tool. MAX CACHE ENTRY SIZE Species the maximum size for a cache entry. Potential entries that exceed this size are not cached. The default size is 1 MB. Specify GB for gigabytes, KB for kilobytes, MB for megabytes, and no units for bytes. Example: MAX CACHE ENTRY SIZE = 1 MB ; Altering this value should be done in conjunction with the setting of MAX ROWS PER CACHE ENTRY. MAX CACHE ENTRIES Species the maximum number of cache entries allowed in the query cache. Limiting the total number of cache entries provides another parameter with which to manage your cache storage. The actual limit of cache entries might vary slightly depending on the number of concurrent queries. The default value is 1000. Example: MAX CACHE ENTRIES = 1000 ; Rule of thumb number of users * average number of report per cache period . POPULATE AGGREGATE ROLLUP HITS Species whether to aggregate data from an earlier cached query result set and create a new entry in the query cache for rollup cache hits. The default value is NO. 89
Typically, if a query gets a cache hit from a previously executed query, then the new query is not added to the cache. A user may have a cached result set containing information at a particular level of detail (for example, sales revenue by ZIP Code). A second query may ask for this same information, but at a higher level of detail (for example, sales revenue by state). The POPULATE AGGREGATE ROLLUP HITS parameter overrides this default when the cache hit occurs by rolling up an aggregate from a previously executed query, in this example, by aggregating data from the rst result set stored in the cache. That is, Oracle BI sales revenue for all ZIP Codes in a particular state can be added to obtain the sales revenue by state. This is referred to as a rollup cache hit. Normally, a new cache entry is not created for queries that result in cache hits. You can override this behavior specically for cache rollup hits by setting POPULATE AGGREGATE ROLLUP HITS to YES. Nonrollup cache hits are not aected by this ag. If a query result is satised by the cache that is, the query gets a cache hit then this query is not added to the cache. When this parameter is set to YES, then when a query gets an aggregate rollup hit (for example, sales by region is answered from sales by district, region) then the result is put into the cache. Setting this parameter to TRUE may result in better performance, but results in more entries being added to the cache. Example: POPULATE AGGREGATE ROLLUP HITS = YES ; USE ADVANCED HIT DETECTION When caching is enabled, each query is evaluated to determine whether it qualies for a cache hit. A cache hit means that the server was able to use cache to answer the query and did not go to the database at all. The Oracle BI Server can use query cache to answer queries at the same or later level of aggregation (Data Mart Automation). The parameter USE ADVANCED HIT DETECTION enables an expanded search of the cache for hits. The expanded search has a performance impact, which is not easily quantied because of variable customer requirements. Customers that rely heavily on query caching and are experiencing misses might want to test the trade-o between better query matching and overall performance for high user loads. Example:USE ADVANCED HIT DETECTION = YES; Reasons Why a Query is Not Added to the Cache: Non-cacheable SQL element. If a SQL request contains Current Timestamp, Current Time, Rand, Populate, or a parameter marker then it is not added to the cache. Non-cacheable table. Physical tables in the Oracle BI Server repository can be marked noncacheable. If a query references any non-cacheable table then the query results will not be added to the cache. Cache hit. In general, if the query gets a cache hit on a previously cached query, then the results of the current query are not added to the cache. The exception is query hits that are aggregate roll-up hits. Result set is too big. Query is cancelled. This can happen by explicit cancellation from Oracle BI Presentation Services or the Administration Tool, or implicitly through timeout. Oracle BI Server is clustered. Queries that fall into the cache seeding family are propagated throughout the cluster. Other queries continue to be stored locally. Therefore, even though a query may be put into the cache on Oracle BI Server node 1, it may not be on Oracle BI Server node 2. MAX SUBEXPR SEARCH DEPTH The parameter MAX SUBEXPR SEARCH DEPTH allows you to congure how deep the hit detector looks for an inexact match in an expression of a query. The default is 5. At the default level (5), for example, a query on the expression sin(cos(tan(abs(round(trunc(prot)))))) misses on Prot, which is at level 7. Changing the search depth to 7 opens up Prot for a potential hit. Advice set it to 99. The [CACHE] part from your NQCong.ini le could now look like this: ####################################### ############## 90
# # Query Result Cache Section # ####################################### ############## [ CACHE ] ENABLE = YES; DATA STORAGE PATHS = d:\OracleBI\cache 1GB, f:\OracleBI\cache 1GB ; MAX ROWS PER CACHE ENTRY = 10000 ; MAX CACHE ENTRY SIZE = 1 MB ; MAX CACHE ENTRIES = 80000 ; POPULATE AGGREGATE ROLLUP HITS = YES; USE ADVANCED HIT DETECTION = YES; MAX SUBEXPR SEARCH DEPTH = 99; If your OBIEE server is in a clustered environment use the following parameters for the shared part: GLOBAL CACHE STORAGE PATH The physical location for storing cache entries shared across clustering. All clustering nodes share the same location. Example: GLOBAL CACHE STORAGE PATH = SIZE; MAX GLOBAL CACHE ENTRIES The maximum number of cache entries stored in the location specied by GLOBAL CACHE STORAGE PATH. Example: MAX GLOBAL CACHE ENTRIES = 1000; CACHE POLL SECONDS The interval in seconds that each node pulls from the shared location specied in GLOBAL CACHE STORAGE PATH. Example: CACHE POLL SECONDS = 300; CLUSTER AWARE CACHE LOGGING Turns on logging for the cluster caching feature. Used only for troubleshooting. The default is NO. Example: CLUSTER AWARE CACHE LOGGING = NO; Till Next Time This article is also published on: [2]http://knowledge.ciber.nl/weblog/
1. http://obieeblog.wordpress.com/2008/12/29/obiee-and-virtual-private-database-vpd/ 2. http://knowledge.ciber.nl/weblog/
[1]
[2]
[3]
[4]
Put
it
all on a dashboard:
2000: You will see that you loose the OR function. Now go back to your report on the rst lter part check the Protect Filter option:
Save your report and go back to the dashboard. Select the year 1999 and press go.
You will see that the OR part stays intact. Now go back to your report on the second lter part check the Protect Filter option:
Save the report and go back to your dashboard. Whatever year you select the result will not change. 92
93
Press the add web reference button: Add the URL enter [1]http://localhost:9704/analytics/saw.dll?WSDL (Change the port number if needed). Later you can put the settings for
Press
94
GO
1. http://localhost:9704/analytics/saw.dll?WSDL
LogOn:
LogO
[1]
getSessionEnviroment:
[2]
[3] The VB. NET source can be found here: [4]http://knowledge.ciber.nl/weblog/OBIEE/modSAWService002.txt Till Next Time
1. http://bp1.blogger.com/_qd3TDEvIh4Y/SJIdEH-5W8I/AAAAAAAAAaw/Wzn8gGo3vPo/s1600-h/obiee_net_VB_004.JPG 2. http://bp1.blogger.com/_qd3TDEvIh4Y/SJIdEcMkogI/AAAAAAAAAa4/1FKIY2XvNbY/s1600-h/obiee_net_VB_005.JPG 3. http://bp3.blogger.com/_qd3TDEvIh4Y/SJIdERjqEJI/AAAAAAAAAbA/n6Th0Ll4J5g/s1600-h/obiee_net_VB_006.JPG 4. http://knowledge.ciber.nl/weblog/OBIEE/modSAWService002.txt
96
2.8
August
But real:
[2] Thank you Oracle, this makes OBIEE live a whole lot better! Okay the inteface is still very basic but you can inuence a lot by tweaking the PCXML le for this graph. Till Next Time This article is also published on: [3]http://knowledge.ciber.nl/weblog/
1. http://obiee101.blogspot.com/2008/03/obiee-continues-time-line.html 2. http://knowledge.ciber.nl/weblog/wp-content/uploads/2008/08/image1.png 3. http://knowledge.ciber.nl/weblog/
Step 2: Copy the timeline.pcxml to timelinescatter.pcxml. This le can ussaly be found in ..\OracleBI\web\appackslashres\s oracle10\popbin Step 3: In the custommessages folder for the language add the following to the custommessages.xml le (create the
Step 4: Edit the linetimescatter.cxml le set displaynameref=kmsgChartTimeSeriesScatter set sawc:engineSpecic le=popbin/timelinescatter.pcxml Save and close the le
Step 6: 98
Found
this
piece
of
javascript
in
the
new
10.3.4.0
version
Sales
example:
It clears all the user prompts edits and sets them back to their defaults. {div class=XUIPromptEntry minibuttonOn } { href= # onclick=return PersonalizationEditor.removeDefaultSelection(false) }Clear {/a } {/div } Till Next Time
Played around with the new OBIEE 10.3.4.0 all weekend. Some great improvements! Best of all the new date time lin graph is a hugh improvement. The new example repository is much more real world then the old paint one. Big improvement on the Oce plug in is the possibility to reprompt the reporst without having to rebuild the document. The converter between discoverer and OBIEE is a hugh time saver. All in All the made a big leap forward in this version. Keep up the good work! Till Next Time
OBIEE has a very good usage tracking system, with low resource costs. Here is how you set up the Oracle variant. 100
Step 1: create a oracle schema: CREATE USER obiee usage tracking IDENTIFIED BY OBIEE USAGE TRACKING DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP PROFILE DEFAULT QUOTA UNLIMITED ON USERS; GRANT CONNECT TO obiee usage tracking; GRANT RESOURCE TO obiee usage tracking; GRANT CREATE SESSION TO obiee usage tracking; GRANT CREATE TABLE TO obiee usage tracking; GRANT CREATE VIEW TO obiee usage tracking; ALTER USER obiee usage tracking DEFAULT ROLE NONE; Step 2: Create the tracking table. the Tracking table Script can be found in: ... \OracleBI\server\Schema Use SAACCT.Oracle.sql for Oracle and put it in the relevant OBIEE USAGE TRACKING schema. Step 3: Make it available for the public GRANT SELECT ON S NQ ACCT TO PUBLIC; Step 4: Setting up the additional tables You can nd the scripts in ...\OBIEE\OracleBI\server \Sample\usagetracking\S QL Server Time Run the following scripts; Oracle create nQ Calendar.sql Oracle create nQ Clock.sql Oracle nQ Calendar.sql (Warning this only goes to 2016!) Oracle nQ Clock.sql Step 5: Make it available for the public GRANT SELECT ON S ETL DAY TO PUBLIC; GRANT SELECT ON S ETL TIME DAY TO PUBLIC;
Step 5b: Create an extra view (They forgot this one in the documentation) CREATE OR REPLACE VIEW nq login group AS SELECT DISTINCT user name AS login, user name AS resp FROM s nq acct; grant select on nq login group to public; Step 6: Merge the usage tracking RPD into your master RPD. Open your master RPD oine. 101
102
acleBI\server\Sampl e\usagetracking\
Password is empty
103
Step 7: Move the Usage Tracking to a native connection pool If you ommit this and use ODBC you can get strange errors. Import 1 table from the OBIEE USAGE TRACKING schema.
104
[1] Delete only the table and copy the connection pool
[2] Drag and drop the table part from the imported Usage tracking rpd.
Be sure to set both connection pools! Step 8: Altering the NQSCong.ini The le can be found in: &\OracleBI\server\Cong Locate and Alter the following:
################### # Usage Tracking Section # Collect usage statistics on each logical query submitted to the # server. ################### [ USAGE TRACKING ] ENABLE = YES; 105
DIRECT INSERT = YES; PHYSICAL TABLE NAME = OBI Usage Tracking.Catalog.dbo.S NQ ACCT; CONNECTION POOL = OBI Usage Tracking.Usage Tracking Writer Connection Pool ; BUFFER SIZE = 10 MB ; BUFFER TIME LIMIT SECONDS = 5 ; NUM INSERT THREADS = 5 ; MAX INSERTS PER TRANSACTION = 1 ; Step 9: Restart the BI server. Check the server log for errors. Step 10: Import the Usage Tracking Presentation Catalog into the existing Presentation Catalog. Extract the example catalog from the ZIP le found in ...\OracleBI\server\Sampl e\usagetracking\
Open one instance of the Oracle Business Intelligence Catalog Manager. Open the source Presentation Catalog from where we can copy the Usage Tracking content.
Open this Presentation Catalog in oine Mode. Once you have opened the presentation catalog, click on the shared folder. In this folder you can nd the folder Usage Tracking, which holds all related reports, lters and the dashboard page.
Open 106
another
instance
of
the
Oracle
Business
Intelligence
Catalog
Manager. Open the destination Presentation Catalog in online mode to which you want to copy the Usage Tracking content to. Open the shared folder. As you can see in the example below, this presentation catalog doesn t have the Usage Tracking folder yet.
Go back to the source Presentation Catalog for the Usage tracking. Click on the Usage Tracking folder and click on Copy button in the upper left of the screen.
Go to the destination presentation catalog. Be sure the shared folder is opened. Right click in the folder window and click on Paste. Close both catalog managers. Note: Some people are worried that they dont see the entry directly in the reports. This is because OBIEE saves the usage tracking inserts them in a batch. The amount is inuenced by the BUFFER SIZE parameter. This species the amount of memory used to temporarily store insert statements. The buer allows the insert statements to be issued to the usage tracking table independently of the query that produced the statistics to be inserted. When the buer lls up, then subsequent queries statistics are discarded until the insert threads service the buer entries. When you stop the BI-server it will try to issue an insert all remaining entries. Till Next Time This article is also published on: [5]http://knowledge.ciber.nl/weblog/ Murat did some great extra comments: [6]http://muratdemirkiran.wordpress.com/2009/01/07/test/
1. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/5de4575a-ebb0-4d25-9987-1c8dc4201e1b/image[2].png 2. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/5de4575a-ebb0-4d25-9987-1c8dc4201e1b/image[5].png 3. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/5de4575a-ebb0-4d25-9987-1c8dc4201e1b/image[8].png
107
causing you to see no charts. [1] is easily solved by running two scripts: installCOMEmbedder.bat (not required but handy) installService.bat both can be found in ..\OracleBI\corda50\bin
This
[2] Now you have to start the service manualy or reset the whole server.
[3] 108
OBIEE
Conguring
Conguring
the
scheduler
on
Windows2003/Oracle
(2008-08-12 15:11)
As with many congurations on OBIEE, its in the documentation only distributed on many PDFs. Here is how install the OBIEE scheduler on Windows2003 and an Oracle DB. Basically you have to go trough 5 steps: 1 Create the DB User and Tables. 2 Check the instancecong.xml 3 Add the Scheduler Administrator to the credential store 4 Congure the Job Manager 5 Run A test 1 CREATE THE DB USER AND TABLES. The table scripts can be found in ..\OracleBI\server\Schema \SAJOBS.Oracle.sql, but you have create the user yourself. Or you can use this script: /******************************************************************* **********/ /* Setup OBIEE scheduler on ORACLE */ /* READ THE SCRIPT BEFORE YOU RUN IT !!!!!!!!!! */ /* Run the script as SYSTEM */ /******************************************************************* **********/ /***************************************************************** ************/ /* Create the S NQ SCHED user */ /* You can change the password NOT the user name */ /******************************************************************* **********/ DROP USER S NQ SCHED; CREATE USER S NQ SCHED IDENTIFIED BY S NQ SCHED PASSWORD DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP PROFILE DEFAULT QUOTA UNLIMITED ON USERS; GRANT CONNECT TO S NQ SCHED; GRANT RESOURCE TO S NQ SCHED; GRANT CREATE SESSION TO S NQ SCHED; GRANT CREATE TABLE TO S NQ SCHED; GRANT CREATE VIEW TO S NQ SCHED; ALTER USER S NQ SCHED DEFAULT ROLE NONE; 2 Check the instancecong.xml In ..\OracleBIData\web\con g you will nd the instanceCong.xml
Check if the entry between Alerts Tags has a ScheduleServer entry. If you run it on an other port then 109
9705 add it in the form ServerName:PortNumber (MyServer:1234). 3 Add the Scheduler Administrator to the credential store Open a command line box: cryptotools credstore -add -inle e:/OracleBIData/web/cong/credentialstore.xml Credential Alias: admin Username: SchedulerAdmin Password: SchedulerAdmin Do you want to encrypt the password? y/n (y): Y Passphrase for encryption: secret Do you want to write the passphrase to the xml? y/n (n): Y File OracleBIData HOME/web/cong/credentialstore.xml exists. Do you want to overwrite it? y/n (y): Y
On the Database tab enter the connection pool date. Always use the native call interface if possible!. 110
On the General tab enter the administrator name and credentials Start the scheduler service
You can nd the log in: ..\OracleBI\server\Logxtbackslash 5 Run A test Create a simple report and press Save And Schedule 111
Cache
112
button
and
have
look
at
the
entry:
for
the
Ciber
knowledge
Blog:
113
Handy when your database doesnt have a Lag or Lead function Till Next Time
1. http://forums.oracle.com/forums/thread.jspa?threadID=692479&tstart=30
This document describes how you can achieve this in OBIEE against an Oracle DB 2 Stragg function This solution is based on Tom Kite s original String Aggregation function found here: [1]http://www.sqlsnippets.com/en/topic-11591.html To implement this function in OBIEE your rst have to bring the function to the database. Either in the data-schema or in your custom OBIEE function schema. If you do the later be sure that the OBIEE function schema has direct select rights granted on the data-schema tables and views. Grant an execute 114
on the STRAGG function to public. It s also very handy to create a public SYNONYM for the STRAGG function. (CREATE PUBLIC SYNONYM STRAGG FOR SCHEMA NAME.STRAGG;) 2.1 The STRAGG scripts 2.1.1 The STRAGG object
create or replace type stragg type as object ( string varchar2(4000), static function ODCIAggregateInitialize ( sctx in out stragg type ) return number , member function ODCIAggregateIterate ( self in out stragg type , value in varchar2 ) return number , member function ODCIAggregateTerminate ( self in stragg type, returnvalue out varchar2, ags in number ) return number , member function ODCIAggregateMerge ( self in out stragg type, ctx2 in stragg type ) return number ); / 2.1.2 The STRAGG type body
create or replace type body stragg type is static function ODCIAggregateInitialize ( sctx in out stragg type ) return number is begin sctx := stragg type( null ) ; return ODCIConst.Success ; end; member function ODCIAggregateIterate ( self in out stragg type , value in varchar2 ) return number is 115
begin self.string := self.string , value ; return ODCIConst.Success; end; member function ODCIAggregateTerminate ( self in stragg type , returnvalue out varchar2 , ags in number ) return number is begin returnValue := ltrim( self.string, , ); return ODCIConst.Success; end; member function ODCIAggregateMerge ( self in out stragg type , ctx2 in stragg type ) return number is begin self.string := self.string ctx2.string; return ODCIConst.Success; end; end; /
create or replace function stragg ( input varchar2 ) return varchar2 deterministic parallel enable aggregate using stragg type ; /
3 OBIEE Usage These function work both from the repository as directly from the reports.
EVALUATE( STRAGG( %1) OVER ( PARTITION BY ( %2) ORDER BY ( %1) ASC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) as varchar(200), EMP.ENAME,DEPT.DEPTNO)
117
3.3 Distinct EVALUATE AGGR( STRAGG( DISTINCT %1) as varchar(200), EMP.ENAME) Till Next Time This article was original written for the Ciber knowledge Blog: [2]http://knowledge.ciber.nl/weblog/?p=125
1. http://www.sqlsnippets.com/en/topic-11591.html 2. http://knowledge.ciber.nl/weblog/?p=125
My colleague Rene Kuipers encountered this error while trying to copy reports using the catalog manager over a network share.
This was caused by the fact that the catalog manager didnt have full control over the catalog folder (read,write,create and delete). 118
Hi, I did an extraction of the sercret le with all the OBIEE congration tags: [1]OBIEE10340CONFIGURATIONTAGS.pdf You can nd the le at ..\OracleBI\systemsmanagementashresources\ DONT EDIT THIS FILE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Till Next Time
1. http://knowledge.ciber.nl/weblog/OBIEE/OBIEE10340CONFIGURATIONTAGS.pdf
Stumbled today over an OBIEE sandbox machine without an ODBC Data Source Administrator congured: 119
[1] We had to dig deep in our collective brain where to nd it: ..\windows\system32\odbca d32.exe
[2] In the registry you have give to have full control over the HKEY LOCAL MACHINE\SOFTWARE\ODBC
120
The valueof(NQ SESSION.GROUP) returns a string with all the groups the user belongs to. Using the the POSITION function we can determine if a certain group is in the string: POSITION(Administrators in valueof (NQ SESSION.GROUP) ) If the value is greater then 0 then its in the string.
121
Next
goto
the
guided
navigation
dashboard
section
you
want
to
toggle:
Select Reference Source Request, the selection report and how it should react.
The section is now only visible if a user is a member of the Administrators group. Till Next Time This article was original written for the Ciber Knowledge Blog: [1]http://knowledge.ciber.nl/weblog/?p=126
1. http://knowledge.ciber.nl/weblog/?p=126
For the data source use: SELECT sys context(USERENV, TERMINAL) FROM dual
123
Put the data in repository variables named TERMINAL and IP ADRESS. In your reports you can call these variables using: VALUEOF(TERMINAL) and VALUEOF(IP
ADDRESS)
Till Next Time This article was original written for the Ciber Knowledge Blog: [1]http://knowledge.ciber.nl/weblog/?p=127
1. http://knowledge.ciber.nl/weblog/?p=127
{input type=button value=Go Back One Page onclick=history.back(); } For a clear button have look here: [2]http://obiee101.blogspot.com/2008/08/obiee-making-clear-butto n.html Till Next Time
1. http://forums.oracle.com/forums/thread.jspa?threadID=683746&tstart=0 2. http://obiee101.blogspot.com/2008/08/obiee-making-clear-button.html
[1] CASE WHEN (F1 Revenue.1-01 Revenue (Sum All)> 100000 )THEN {a href=http://www.google.com }CAST(F1 Revenue.1-01 Revenue (Sum All) as VARCHAR(10)) {/a } else CAST( F1 Revenue.1-01 Revenue (Sum All) as VARCHAR(10) )END Dont forget to set the column data type settings: [2]
//1.bp.blogspot.com/_qd3TDEvIh4Y/SK13pdt8DhI/AAAAAAAAAnU/iIU9qWPzNLc/s1600-h/ConditionalHyperlink002.bmp //1.bp.blogspot.com/_qd3TDEvIh4Y/SK14HoqrTBI/AAAAAAAAAnc/Wvsp4edA3a8/s1600-h/ConditionalHyperlink003.bmp
If you dont a security model like LDAP in place, all the users and there passwords are stored in the repository. Wenn you want your users to be able to change there own password from there browers here is how you do it: Step 1: Create a new entry in your customMessage.xml:
Be sure its in your customMessage folder. You can cut and paste this message from the controlmessages.xml le found in the ..\OracleBI\web\msgdbtbackslashmessages. Restart the Oracle BI Server, Web server, and WWW services in that order.
The only way I know is using the nQUDMLExec.exe First create a txt le with your new users:
DECLARE USER NewUser AS NewUser UPGRADE ID 1 FULL NAME {New User } PASSWORD D7EDED84BC624A917F5B462A4DCA05CDCE256EEEEEDC97D54A286E822D97C35C 7AD5C43AD4F2A09EAC4D07C3A079829F PERIODICITY 90 HAS ROLES ( Administrators, XMLP ADMIN ) DESCRIPTION {password = welcome1 } PRIVILEGES ( READ); The password can only be entered encrypted, this string is for welcome1. Next you have to merge the txt le into the reopsitory:
128
CASE WHEN (TIMESTAMPDIFF(SQL TSI DAY, MIN(D0 Time.T00 Calendar Date), MAX(D0 Time.T00 Calendar Date)) > 20 ) THEN D1 Customer.C2 Cust Status ELSE D2 Market.M02 Area END
sum(F1 Revenue.1-01 Revenue (Sum All) by CASE WHEN (TIMESTAMPDIFF(SQL TSI DAY, MIN(D0 Time.T00 Calendar Date), MAX(D0 Time.T00 Calendar Date)) > 20 ) THEN D1 Customer.C2 Cust Status ELSE D2 Market.M02 Area END )
25 days:
2.9
September
On the local domains tab [3]add the name of your VMware server. Leave the rest to default. Step 3: Goto Tools > Users and add one or more
users:
131
[5]
132
written
for
the
Ciber
Knowledge
Blog:
Oracle has told that OpenOce isn t on the current roadmap / support list of OBIEE.
When using OpenOce 0ne of the problems is that the default download to EXCEL is mime based which isn t regonised by the
OpenOce Calc import engine. Im not sure if this is an OBIEE or an OpenOce issue. But here is a workaround. (Actually is just downloading it in the Excel2000 format). In the customMessage folder of your language make a new viewmessages.xml with entries for kmsgEVCDownloadExcel2000Tip and kmsgEVCLinkDownloadEx-
cel2000
134
This article was original written for the Ciber Knowledge Blog: [2]http://knowledge.ciber.nl/weblog/?p=129
1. http://www.w3schools.com/Css/default.asp 2. http://knowledge.ciber.nl/weblog/?p=129
2 digit year; %y Quarter number; %Q Month Name; %b Month Number; %m Month Name except replace January with 4 digit year; %F Month Name except replace January with 2 digit year; %f Date (1-31); %d Day Name; %a Hour(1-24); %H Hour(1-12); %I Minutes; %M Seconds; %S am/pm; %p 2.7 Manual Ticks Major and Manual Ticks Minor To tell which TickMarker should be used add to the <ValueScale Position= Bottom tag: ManualTicksMajor= Month ManualTicksMinor= Week (!No ; between ManualTicksMajor and ManualTicksMinor!) If you don t want a Minor Tag make them both the same: ManualTicksMajor= Month ManualTicksMinor= Month . 2.8 Rotate labels To rotate the labels add to the <ValueScale Position= Bottom tag: RotateLabels= 30 where 30 is the angle in degrees. Till Next Time This article was original written [1]http://knowledge.ciber.nl/weblog/?p=130
1. http://knowledge.ciber.nl/weblog/?p=130
for
the
Ciber
Knowledge
Blog:
[2]
I was expecting a NULL and a 0.... Go back to you the physical layer of your repository and check the Nullable box.
OBIEE converts a NULL in double type eld to 0 if this box isnt checked.
OBIEE collapse the whole dashboard with one button (2008-09-10 21:01)
I answered this one : [1]http://forums.oracle.com/forums/thread.j spa?threadID=704696 &tstart=0 on OTN today and decided to document it a bit beter.
First I made a Toggle Dashboard button jpg and put in my s {SkinName }\portal directory (Note 1: dont forget to put in the OC4J BI skin directory) (Note 2: when referecing this JPG, be aware that the naming is CaSeSeNsItIvE!)(Note 3: you might have to restart OC4J to let see 138
After running the dashboard I used view source to get the section id of section 2 & 3. Look for saw.dashboard.onToggleSection
{td class=MinMaxCell onclick=saw.dashboard.onToggleSection(d:dashboard p:isca1c9kk 1hb8ubn s:l8052b1hagt86ms6, event); saw.dashboard.onToggleSection (d:dashboard p:isca1c9kk1hb8ubn s:7rfmm0f1qd4gmllh, event); return false; align=center } {img id= src=res/s MyCompagny/portal/ToggleDashboard.JPG title=Toggle Dashboard/ } {img id= src=res/s MyCompagny/portal/ToggleDashboard.JPG style=display:none title=Toggle Dashboard/ } {/td } {/tr } {tr }
What they meant to say is something like this: In the rst part Use Custom CSS Style you can directly add CSS code like white-space:nowrap;. For more info on CSS see [1]http://www.w3schools.com/Css/default.asp. The second part is more intressting. In your s [StyleName]\b mozilla 4 you will nd a le called custom.css. In this le you can add your own css classes: .MyCell { background-color: #0000; font-style:italic; font-weight: bold; } See that you synchronise the le with the one in: ns\analytics\analytics\ res\s [StyleName]\b mozilla 4 In the colomn properties point to your Custom Class: ..\OracleBI\oc4j bi\j2ee\home\applicatio
[2] cell is dominant over the one in the personal class.... 140
Note2: Disable your browser cache when developing with this....(some changes might take a while to be visible.) Note3: Altough the option is availble in the conditional format screen it doesnt seem to work there....
1. http://www.w3schools.com/Css/default.asp 2. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SMt_7Vd1m8I/AAAAAAAAAtA/3Ctv1svA_-Y/s1600-h/CustomCSS003.JPG
In one of my earlier enrties: [1]http://obiee101.blogspot.com/search/label/NARRATIVE %20VIEW I told that you are restricted in the in the usage of variables of in Title views. On searching the net I found this document: [2]http://blogs.oracle.com/siebelessentials/oracle %20bi %20ee %20variables %20overview.pdf which triggered me to revisit the subject. It seems that using the biServer.variables prex gives you a far more control, allowing you to use all your repository and sessions variables. @ {biServer.variables[NQ SESSION.USER] } @ {biServer.variables[BI EE HOME] }, Till Next Time
1. http://obiee101.blogspot.com/search/label/NARRATIVE%20VIEW 2. http://blogs.oracle.com/siebelessentials/oracle%20bi%20ee%20variables%20overview.pdf
One of our customers wanted a custom background for there graphs, some what in this style :-) :[1] [2] 141
looking like this:[3] Step 1: from the corda archives download version 5.1.2:[4]http://www.corda.com/corda-update-archive.php There is a fourteen day free license key, after that you will have to buy the product. Step 2: With the popchart builder create a new graph using the wizard, any graph will do. [5]Press
Copy and paste into the PCXML le of your OBIEE graph. between the {project } tags. Add the following reference to make the graph visible: 142
Till Next Time <image name=bitmap1 top=0 left=0 width=544 height=336 anchor=TopLeft visible=True zindex=3 imagename=img bitmap1><properties keepproportions=False/></image>
1. 2. 3. JPG
brazil-1600x1200.jpg brazil-1600x1200.jpg
Lets assumme that one group is allowed to see the content of a column and a other group isnt. If you simple only try todo use permissions the whole report will crash for the group which cant see the column.
[3] Drag the column somewhere in you presenmtation layer, be sure that the persmission is set to everyone. In your report edit the column which this group isnt allowed to see:
[4]
Now run the report again for the No Access group : [5] Till Next Time
1. http://2.bp.blogspot.com/_qd3TDEvIh4Y/SNNJhkdi1VI/AAAAAAAAAuA/qgXqa9hf2fc/s1600-h/choose001.JPG 2. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SNNMDRsNlwI/AAAAAAAAAug/v-qO3ysddfw/s1600-h/choose005.JPG 3. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SNNKQodIrnI/AAAAAAAAAuI/2g04DUW9F-M/s1600-h/choose002.JPG 4. http://3.bp.blogspot.com/_qd3TDEvIh4Y/SNNLGPWJtNI/AAAAAAAAAuQ/J_c-vh9oPKQ/s1600-h/choose003.JPG
144
5. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SNNLkIvb-DI/AAAAAAAAAuY/MQW5iTKnl9U/s1600-h/choose004.JPG
install:[1] On a personal note: Google Chrome has a look and feel you need to get used to, but its very very fast! Note 2: Played around with it a little longer, had a couple of freezes using OBIEE, decided to uninstall it....... Till Next Time
1. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SNaa0c9XO8I/AAAAAAAAAuo/Rng164qP89s/s1600-h/Crome001.JPG
One of those things you keep forgetting the format on TIMESTAMP: TIMESTAMP YYYY-MM-DD HH24:MI:SS TIMESTAMP 1990-01-10 13:35:43 Till Next Time
One of the rst things a customer see when using OBIEE is the log on screen. So it s important to make this a customer personal as possible. Most information on the web for this personalization is based on altering the bglogon.jpg.
[1] Besides it possible being a copyright infringement, you run run the risk that you loose al your work on the next system upgrade. The content and appearance of the Log On and Log o screen is based on a couple of les which are highly customable. First of all make your own custom Style and Skin. (If you can t remember how have a looke [2]here). In the ..\OracleBI\web\appackslashres\sk MyCompagny\b mozilla 4 you will nd logon.css which controls the look and feel. In the .LogonTable part you will nd a reence to the background image, you can change this to your own personal image: 146
[3] (WOW: if you are on OC4J BI be sure to keep all changes in sync with the les in ..\OracleBI\oc4j bi\j2ee\home\applicatio ns\analytics\analytics\ res\sk MyCompagny\b mozilla 4) The rest of the screen is dieded into 6 parts:
[4] HeadLine: [5] Appereance: logon.css => .Headline, content: ProductMessages.xml => kmsgProductGeneral {Info on making your own customMessages can be found [6]here }. InfoText:
[7] Appereance: logon.css => .InfoText, content: system generated. Subtitle: [8] 147
Appereance: logon.css => .Subtitle, content: logonmessages.xml => kmsgAuthenticateRemembermyIDandpassword Logon Credentials
[9] Appereance: logon.css => .PromptTable and .PromptCaption, content: logonmessages.xml => kmsgAuthenticateUser, kmsgAuthenticatePassword, kmsgAuthenticateLogOn Select a language
[10] Appereance: logon.css => .SAWLogonInput, content: logonmessages.xml => kmsgSelectALanguage (Note: the availble langauges are controlled by the instancecong.xml) Copyright:
[11] Appereace: logon.css => .Footer (font-size is overruled), content:productmessages.xml => kmsgProductGeneral, utilmessages.xml => kmsgNQuireLegalCopyright Log O Screen
[14] Appereance: logon.css => .Headline, content: ProductMessages.xml => kmsgProductGeneral Appereance: 148
lo-
gon.css => .Subtitle, content: logonmessages.xml => kmsgAuthenticateSSOThankYouHaveLoggedO, kmsgAuthenticateThankYouHaveLoggedO, kmsgAuthenticateThankYouWereLoggedOText Till Next Time This article was original written for the Ciber Knowledge Blog: http://knowledge.ciber.nl/weblog/?p=132
1.
http://4.bp.blogspot.com/_qd3TDEvIh4Y/SNnUoe1nEZI/AAAAAAAAAvo/XEyG0ENisNs/s1600-h/OBIEE_CUSTOM_LOG_ON_
OFF_001.png 2. http://obiee101.blogspot.com/2008/09/obiee-setting-up-compagny-custom-skin.html 3. 4. 5. http://2.bp.blogspot.com/_qd3TDEvIh4Y/SNnUoVX5FJI/AAAAAAAAAvw/JdL6u1CUlbc/s1600-h/OBIEE_CUSTOM_LOG_ON_ http://4.bp.blogspot.com/_qd3TDEvIh4Y/SNnUoqICVqI/AAAAAAAAAv4/Q3ikgqpFTN0/s1600-h/OBIEE_CUSTOM_LOG_ON_ http://1.bp.blogspot.com/_qd3TDEvIh4Y/SNnUo47Si6I/AAAAAAAAAwA/JSWeQVG00Jc/s1600-h/OBIEE_CUSTOM_LOG_ON_ OFF_002.png OFF_003.png OFF_004.png 6. http://obiee101.blogspot.com/2008/09/obiee-setting-up-custommessages-folders.html 7. 8. 9. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SNnUfo5i1lI/AAAAAAAAAvA/lhcU4YBQXow/s1600-h/OBIEE_CUSTOM_LOG_ON_ http://1.bp.blogspot.com/_qd3TDEvIh4Y/SNnUfsZ_pEI/AAAAAAAAAvI/QbVOenCVPk0/s1600-h/OBIEE_CUSTOM_LOG_ON_ http://3.bp.blogspot.com/_qd3TDEvIh4Y/SNnUf_QwNLI/AAAAAAAAAvQ/VA1xwnkFes8/s1600-h/OBIEE_CUSTOM_LOG_ON_ OFF_005.png OFF_006.png OFF_007.png 10. http://2.bp.blogspot.com/_qd3TDEvIh4Y/SNnV3yxnz9I/AAAAAAAAAwI/wBkxUmPW6cY/s1600-h/OBIEE_CUSTOM_LOG_ON_ OFF_012.png 11. http://3.bp.blogspot.com/_qd3TDEvIh4Y/SNnUfwjw-5I/AAAAAAAAAvY/fxyYzZ6NNb0/s1600-h/OBIEE_CUSTOM_LOG_ON_ OFF_008.png 12. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SNnUgK8RsiI/AAAAAAAAAvg/SAzOMliPnS4/s1600-h/OBIEE_CUSTOM_LOG_ON_ OFF_009.png 13. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SNnUODBtElI/AAAAAAAAAuw/gnkCaPt9JWQ/s1600-h/OBIEE_CUSTOM_LOG_ON_ OFF_010.png 14. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SNnUO869LQI/AAAAAAAAAu4/bwElaOGGFqo/s1600-h/OBIEE_CUSTOM_LOG_ON_ OFF_011.png
After customizing the log on log o screen ([1]http://obiee101.blogspot.com/2008/09/obiee-makingcustom-l og-on-and-log-o.html) its time to customise the portal:
Title:
Appearance:
Background: Appearance: portalbanner.css => .Headline, content: background-image: url(bg banner.jpg); PortalLinks:
Appearance: portalbanner.css => .WelcomeTextCell, Content: uimessages.xml => kmsgUIWelcome Dashboard actions: 150
[2] Appereance: portalbanner.css => .DashBarIconCell, .DashBarAlertCell, .DashBarProductCell, .DashBarActiveProductCell, .DashBarActionCell, Content: uimessages.xml => kmsgUIPortal, kmsgUIAnswers, kmsgUIProductsLink, kmsgUISettings, kmsgUILogo Till Next Time This article was original written [3]http://knowledge.ciber.nl/weblog/?p=133
2. http://www.blogger.com/$image[36].png 3. http://knowledge.ciber.nl/weblog/?p=133
for
the
Ciber
Knowledge
Blog:
1. http://obiee101.blogspot.com/2008/09/obiee-making-custom-log-on-and-log-off.html
2.10
October
Its a simple LOV prompt which returns me 3 presentation variables (dp cache {0,1 }, dp seed {0,1 } and dp log {0,1,2 }. In the prex of each report we default add:
(you can nd the postx block in the advanced tab of your report)
When developing your dashboard you can playaround with dierent settings to nd the optimum. Leave the prompt on the dashboard and make in only available for administrators or developers, so that in time of trouble your are quickly able to bypass the cache or turn on logging. Till Next Time SET VARIABLE DISABLE CACHE HIT = @ {dp cache } {0 }, DISABLE CACHE SEED = @ {dp seed } {0 }, LOGLEVEL = @ {dp log } {0 };
This is very easy when add: ShowThousandsSeparator=False in the ValueScale tag in the PCXML le of the graph
After the Login screen ([1]http://obiee101.blogspot.com/2008/09/obiee-making-custom-l og-on-and-logo.html) and the portalbanner ([2]http://obiee101.blogspot.com/2008/09/obiee-portal-customiz ationpart-1.html) its time
Most of this
[6] Appearance: portalcontent.css => .TabSep Thickness of the bar below the tabs: [7] Appearance: portalcontent.css => .TabLineTable Tab Background images
[8] Minibuttons:
[10]
[11] Of course this posting doesnt include all possible CSS settings but it gives you a good starting point. Till Next Time This article was original written for the Ciber Knowledge Blog: [12]http://knowledge.ciber.nl/weblog/?p=137
1. http://obiee101.blogspot.com/2008/09/obiee-making-custom-log-on-and-log-off.html 2. http://obiee101.blogspot.com/2008/09/obiee-portal-customization-part-1.html 3. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SOz3v8oG1QI/AAAAAAAAAy4/LVcHHbaywww/s1600-h/portal_content001.png 4. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SOz3v5bT3CI/AAAAAAAAAzA/AgcltpsB1GE/s1600-h/portal_content002.png 5. http://2.bp.blogspot.com/_qd3TDEvIh4Y/SOz3v5NI0hI/AAAAAAAAAzI/7hla_U3msJk/s1600-h/portal_content003.png 6. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SOz3vyRvhrI/AAAAAAAAAzQ/uWaTOKc3PSw/s1600-h/portal_content004.png 7. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SOz3wBnSKOI/AAAAAAAAAzY/KzUJ0taZnEI/s1600-h/portal_content005.png 8. http://2.bp.blogspot.com/_qd3TDEvIh4Y/SOz3h6lwtDI/AAAAAAAAAyY/yQXCIdLORAo/s1600-h/portal_content006.png 9. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SOz3h_ACTfI/AAAAAAAAAyg/SvgLV99-uwU/s1600-h/portal_content007.png 10. png 11. png 12. http://knowledge.ciber.nl/weblog/?p=137 http://4.bp.blogspot.com/_qd3TDEvIh4Y/SOz3iLBB0_I/AAAAAAAAAyw/0S1H0MfRB5U/s1600-h/portal_content009. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SOz3h8CzISI/AAAAAAAAAyo/TxV_hWZPT5Q/s1600-h/portal_content008.
[2]Or any other picture you can nd..... Make a copy of the productmessages.xml to its customMessages folder. Edit the entry for kmsgPoweredByAnchor to the new picture. You will have to do this for every language. Till Next Time
1. http://3.bp.blogspot.com/_qd3TDEvIh4Y/SO9MeYv4ZtI/AAAAAAAAAzg/lJxNAJSRalw/s1600-h/siebelbug.gif 2. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SO9Meq2UNEI/AAAAAAAAAzo/5VSotNk9ZFc/s1600-h/MyCompagny.jpg
[1]OBIEE web services part 3 [2]OBIEE web services part 4 [3]OBIEE web services part 5 Till Next Time
copy reports write properties to catalog objects creating and lling dashboard pages
155
picture):
Step 3: Add a narrative view to report with the following script in the prex area
?!?script src=[3]http://maps.google.com/maps?le=api &v=2.x &key=ABQIAAAAtghZliBar5ci3sjZR oGRSEtwgT n0GADCjO95K9FWMY2XE2RQZwN8F1TggjSu117aG70pYMI0GfQ type=text/javascript!?!?!?/script!?! ?!?script type=text/javascript!?! var map1 = null; var geocoder1 = null; function initialize1(address1) { if (GBrowserIsCompatible()) { map1 = new GMap2(document.getElementById(1), {size:new GSize(400,300) }); geocoder1 = new GClientGeocoder(); map1.setCenter(new GLatLng(37.4419, -122.1419), 13); } if (geocoder1) { geocoder1.getLatLng( address1, function(point1) { if (!point1) { alert(address1 + not found); } else { map1.setCenter(point1, 13); map1.addOverlay(new GMarker(point1)); } } ); } } var map2 = null; var geocoder2 = null; function initialize2(address2) { if (GBrowserIsCompatible()) { map2 = new GMap2(document.getElementById(2), {size:new GSize(400,300) }); geocoder2 = new GClientGeocoder(); map2.setCenter(new GLatLng(37.4419, -122.1419), 13); } if (geocoder2) { geocoder2.getLatLng( address2, function(point2) { if (!point2) { alert(address2 + not found); } else { map2.setCenter(point2, 13); map2.addOverlay(new GMarker(point2)); } } ); } } var map3 = null; var geocoder3 = null;function initialize3(address3) { if (GBrowserIsCompatible()) { map3 = new GMap2(document.getElementById(3), {size:new GSize(400,300) }); geocoder3 = new GClientGeocoder(); map3.setCenter(new GLatLng(37.4419, 122.1419), 13); } if (geocoder3) { geocoder3.getLatLng( address3, function(point3) { if (!point3) { alert(address3 + not found); } else { map3.addOverlay(new GMarker(point3));map3.setCenter(point3, 13); } } ); } } ?!?/script!?! ?!?/head!?!
Replace ?!? and !?! with tag symbols This code is for max 3 maps on a page but easily extenbel to any higher number. More info on the google map API [4]http://code.google.com/apis/maps/documentation/examples/ In the narrative part add
:?!?div id=@7 style=width: 400px; height: 300px;text-align:center;!?! ?!?script type=text/javascript!?! initialize@7(@6) ?!?/script!?! ?!?/div!?!@1, @6
Where @7 is the rcount column and @6 is the google adress. Now put it all on the dashboard: 157
Till Next Time Edit if you are using IE you migth want to look also here: [5]http://obiee101.blogspot.com/2009/07/obiee-google-maps-altern ative-ending.html
1. http://code.google.com/apis/maps/signup.html 2. http://vmobiee:9704/analytics/ 3. http://maps.google.com/maps?file=api&v=2.x&key=ABQIAAAAtgh-ZliBar5ci3sjZR_oGRSEtwgT_ n0GADCjO95K9FWMY2XE2RQZwN8F1TggjSu117aG70pYMI0GfQ 4. http://code.google.com/apis/maps/documentation/examples/ 5. http://obiee101.blogspot.com/2009/07/obiee-google-maps-alternative-ending.html
net stop Oracle BI Server Copy E:\OracleBI\server\Log \NQQueryEmpty.log E:\OracleBI\server\Log \NQQuery.log net start Oracle BI Server 158
That way I can do a Q &D reset and now that the next entry is my query. Till Next Time
1. http://obiee101.blogspot.com/2008/01/obiee-optimizing-nqquerylog-for.html
2.11
November
dim table level dim table level 2; dim table level 3; dim table level 4; dim table level 5;
Now we could map this in OBIEE as dim table level 1 => dim table level 2 => dim table level 3 => dim table level 4 => dim table level 5 => fact table. But then again we would you loose the benet of small dimension table by introducing costly joins. Example:
select T36.LEVEL 01 as c1, sum(T56.F FACT VAL) as c2from DIM LEVEL 01 T36, DIM LEVEL 02 T38, DIM LEVEL 03 T41, DIM LEVEL 04 T45, DIM LEVEL 05 T50, F FACTS T56where ( T36.LEVEL 01 = T38.LEVEL 01 and T36.LEVEL 01 = T56.LEVEL 1 and T38.LEVEL 02 = T41.LEVEL 02 and T38.LEVEL 02 = T56.LEVEL 2 and T41.LEVEL 03 = T45.LEVEL 03 and T41.LEVEL 03 = T56.LEVEL 3 and T45.LEVEL 04 = T50.LEVEL 04 and T45.LEVEL 04 = T56.LEVEL 4 and T50.LEVEL 05 = T56.LEVEL 5 ) group by T36.LEVEL 01order by c1 Let OBIEE make the decision! If you really want to maximize the speed of OBIEE you can use the federated query functionality. Beside splitting the dimension table we also split the dimension key in the fact table. (In a later article I will show you how you make your querys aggregate aware and speed them up a lot!.) Your fact table will look like: level 1, level 2, level 3, level 4, level 5, fact 1 If you map this in physical layer as: dim table level 1 => fact table, dim table level 2 => fact table, dim table level 3 => fact table, dim table level 4 => fact table and dim table level 5 159
=> fact table and put all the dimension tables in the same datasource in the business model layer:
[1] You will see that OBIEE automatically choices the correct dim table while drilling down:
level 1: select T36.LEVEL 01 as c1, sum(T56.F FACT VAL) as c2from DIM LEVEL 01 T36, F FACTS T56where ( T36.LEVEL 01 = T56.LEVEL 1 ) group by T36.LEVEL 01order by c1 level 2: select T38.LEVEL 01 as c1, T38.LEVEL 02 as c2, sum(T56.F FACT VAL) as c3from DIM LEVEL 02 T38, F FACTS T56where ( T38.LEVEL 01 = A and T38.LEVEL 02 = T56.LEVEL 2 ) group by T38.LEVEL 01, T38.LEVEL 02order by c1, c2 level 3: select T41.LEVEL 01 as c1, T41.LEVEL 02 as c2, T41.LEVEL 03 as c3, sum(T56.F FACT VAL) as c4from DIM LEVEL 03 T41, F FACTS T56where ( T41.LEVEL 01 = A and T41.LEVEL 02 = AA and T41.LEVEL 03 = T56.LEVEL 3 ) group by T41.LEVEL 01, T41.LEVEL 02, T41.LEVEL 03order by c1, c2, c3 level 4: select T45.LEVEL 01 as c1, T45.LEVEL 02 as 160
c2, T45.LEVEL 03 as c3, T45.LEVEL 04 as c4, sum(T56.F FACT VAL) as c5from DIM LEVEL 04 T45, F FACTS T56where ( T45.LEVEL 01 = A and T45.LEVEL 02 = AA and T45.LEVEL 03 = AAF and T45.LEVEL 04 = T56.LEVEL 4 ) group by T45.LEVEL 01, T45.LEVEL 02, T45.LEVEL 03, T45.LEVEL 04order by c1, c2, c3, c4 level 5: select T50.LEVEL 01 as c1, T50.LEVEL 02 as c2, T50.LEVEL 03 as c3, T50.LEVEL 04 as c4, T50.LEVEL 05 as c5, sum(T56.F FACT VAL) as c6from DIM LEVEL 05 T50, F FACTS T56where ( T50.LEVEL 01 = A and T50.LEVEL 02 = AA and T50.LEVEL 03 = AAF and T50.LEVEL 04 = AAFG and T50.LEVEL 05 = T56.LEVEL 5 ) group by T50.LEVEL 01, T50.LEVEL 02, T50.LEVEL 03, T50.LEVEL 04, T50.LEVEL 05order by c1, c2, c3, c4, c5 Edit: OBIEE guru Stijn Gabriels pointed out to me that you also have to set the levels for each dimension
column. (When you start with a virgin repository OBIEE will do automaticly, but you should always check them!) This article was orinally written for the ciber knowledge blog : [2]http://knowledge.ciber.nl/weblog/?p=147 Till Next Time
1. file://localhost/C:/Documents%20and%20Settings/john.minkjan/Application%20Data/Windows%20Live%20Writer/ PostSupportingFiles/c30200ed-d8fd-4797-bcfa-900e6b94c9b9/image[2].png 2. http://knowledge.ciber.nl/weblog/?p=147
ag fact table level ag fact table level 2; ag fact table level 3; ag fact table level 4; Mapping the physical layer
1, fact aggregate level 1 fact aggregate level 2 fact aggregate level 3 fact aggregate level 4
161
Next
we
have
to
map
our
dimension
table(s)
to
our
aggregate
table(s):
162
[4] Check that the Aggregation content is on Logical level If you are not sure about the level use the Check levels functionality (press the more button)
[6] 163
[7] Log: select distinct T36.LEVEL 01 as c1, T307.F FACT VAL as c2 from DIM LEVEL 01 T36, F FACTS 1 T307 where ( T36.LEVEL 01 = T307.LEVEL 1 ) order by c1 Level 2
[8]
select distinct T38.LEVEL 01 as c1, T38.LEVEL 02 as c2, T310.F FACT VAL as c3 from DIM LEVEL 02 T38, F FACTS 2 T310 where ( T38.LEVEL 01 = A and T38.LEVEL 02 = T310.LEVEL 2 ) order by c1, c2 Level 3
[9]
select distinct T41.LEVEL 01 as c1, T41.LEVEL 02 as c2, T41.LEVEL 03 as c3, T314.F FACT VAL as c4 from DIM LEVEL 03 T41, F FACTS 3 T314 where ( T41.LEVEL 01 = A and T41.LEVEL 02 = AA and T41.LEVEL 03 = T314.LEVEL 3 ) order by c1, c2, c3 And so on&.. This article was orinally written for the ciber knowledge blog : [10]http://knowledge.ciber.nl/weblog/?p=148 Till Next Time 164
1. http://obiee101.blogspot.com/2008/11/obiee-huge-dimensions-lets-split-them.html 2. http://2.bp.blogspot.com/_qd3TDEvIh4Y/SRNOELho__I/AAAAAAAAA5E/PG6VqPrWuV8/s1600-h/obi02.png 3. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SRNOQFsHVMI/AAAAAAAAA5M/mMuR6DPWpNs/s1600-h/obi03.png 4. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SRNOjtKtjkI/AAAAAAAAA5U/bL2kWgUTqnQ/s1600-h/obi04.png 5. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SRNOtsnM4fI/AAAAAAAAA5c/63VekwZJQiQ/s1600-h/obi05.png 6. http://2.bp.blogspot.com/_qd3TDEvIh4Y/SRNPk_PJ8iI/AAAAAAAAA58/Hf2zXyoozy4/s1600-h/obi09.png 7. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SRNO_1-crrI/AAAAAAAAA5k/vFHNstIlvNc/s1600-h/obi06.png 8. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SRNPNWW-rCI/AAAAAAAAA5s/-W8Cm-HUU1U/s1600-h/obi07.png 9. http://3.bp.blogspot.com/_qd3TDEvIh4Y/SRNPVHKJe8I/AAAAAAAAA50/GulLutX2QrI/s1600-h/obi08.png 10. http://knowledge.ciber.nl/weblog/?p=148
Open the repository in online mode. In the physical layer of your repository create a new database, connection pool and schema.
[3] From the tools > utilities menu select the aggregate persistence wizard:
[6] gregate:
[7] Checking the Use Surrogate Key ? will later on map the aggregates using a surrogate key, this can improve performance if you have (complex) keys, consisting of multiple columns.
Select the database, schema and connection pool the script has to use. Be sure to have create and drop table rights in that schema. 167
[9] Close the online repository . Open the le, it should look something like this:
create aggregates ag F FACTS for BM AGG WIZ.F FACTS(F FACT VAL) at levels (BM AGG WIZ.DIM LEVELDim.LEVEL 01 using surrogate key , BM AGG WIZ.DIM DATEDim.D YEAR using surrogate key ) using connection pool AGGR.CP AGGR in AGGR..AGGR;
Before the create aggregates add delete aggregates; (don t forget the semicolon!) 168
delete aggregates; create aggregates ag F FACTS for BM AGG WIZ.F FACTS(F FACT VAL) at levels (BM AGG WIZ.DIM LEVELDim.LEVEL 01 using surrogate key , BM AGG WIZ.DIM DATEDim.D YEAR using surrogate key ) using connection pool AGGR.CP AGGR in AGGR..AGGR;
Open the repository again and have a look at the AGGR database in the physical layer:
[10] If you have a close look at the joins you will see that they are using the surrogate key:
[12] If you open one of the aggregates in the Sources you will see that OBIEE already did the level mapping:
[13] In the log le you can nd the SQL issued to the database: CREATE TABLE ag F FACTS ( LEVEL 0 000000C6SK DOUBLE PRECISION, D YEAR 000000D6SK DOUBLE PRECISION, F FACT VAL00000086 DOUBLE PRECISION ) Now check with a simple request if OBIEE is actually picking up the aggregate:
[14] 170
select distinct T1047.LEVEL 0100000074 as c1, T1052.D YEAR0000007E as c2, T1059.F FACT VAL00000086 as c3 from SA LEVEL 0000000C6 T1047, SA D YEAR000000D6 T1052, ag F FACTS T1059 where ( T1047.LEVEL 0 000000C6SK = T1059.LEVEL 0 000000C6SK and T1052.D YEAR 000000D6SK = T1059.D YEAR 000000D6SK ) order by c1, c2 The next step Based on the basic script we have now with some clever copy and paste actions it s easy to extend to other aggregates.
delete aggregates; create aggregates ag F FACTS01 YEAR for BM AGG WIZ.F FACTS(F FACT VAL) at levels (BM AGG WIZ.DIM LEVELDim.LEVEL 01 using surrogate key , BM AGG WIZ.DIM DATEDim.D YEAR using surrogate key ) using pool AGGR.CP AGGR in AGGR..AGGR, ag F FACTS02 YEAR for BM AGG WIZ.F FACTS(F FACT VAL) at levels (BM AGG WIZ.DIM LEVELDim.LEVEL 02 using surrogate key , BM AGG WIZ.DIM DATEDim.D YEAR using surrogate key ) using pool AGGR.CP AGGR in AGGR..AGGR, ag F FACTS03 YEAR for BM AGG WIZ.F FACTS(F FACT VAL) at levels (BM AGG WIZ.DIM LEVELDim.LEVEL 03 using surrogate key , BM AGG WIZ.DIM DATEDim.D YEAR using surrogate key ) using pool AGGR.CP AGGR in AGGR..AGGR, ag F FACTS04 YEAR for BM AGG WIZ.F FACTS(F FACT VAL) at levels (BM AGG WIZ.DIM LEVELDim.LEVEL 04 using surrogate key , BM AGG WIZ.DIM DATEDim.D YEAR using surrogate key ) using pool AGGR.CP AGGR in AGGR..AGGR;
connection
connection
connection
connection
Before you run the script check your , and ; and be sure that each aggregate has a unique name . When (not) to use this feature:
This is perfect in a Proof of Concept (POC) or if your have to do some rapid application development (RAP) This feature work very crude: A delete aggregates is a DROP TABLE 171
This feature doesn t create any indexes, you have to create them yourself! This works perfect if you have to do some cross database aggregates, it can really boost the performance there. Till next time This article was orginally written [15]http://knowledge.ciber.nl/weblog/?p=149 for the Ciber knowledge blog:
1. http://obiee101.blogspot.com/2008/11/obiee-making-it-aggregate-aware.html 2. http://3.bp.blogspot.com/_qd3TDEvIh4Y/SRbMsGD6pOI/AAAAAAAAA6E/Xa_LigkEhZk/s1600-h/OBIAGG01.png 3. http://3.bp.blogspot.com/_qd3TDEvIh4Y/SRbM_LAyHsI/AAAAAAAAA6M/2riSJ4zjoik/s1600-h/OBIAGG02.png 4. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SRbNKMBbbNI/AAAAAAAAA6U/T9uW-UuMCyE/s1600-h/OBIAGG03.png 5. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SRbNTl51O5I/AAAAAAAAA6c/wct2hZAI4vE/s1600-h/OBIAGG04.png 6. http://2.bp.blogspot.com/_qd3TDEvIh4Y/SRbNqvEL92I/AAAAAAAAA6k/e_q6H9Iliyc/s1600-h/OBIAGG05.png 7. http://3.bp.blogspot.com/_qd3TDEvIh4Y/SRbNzxq3-NI/AAAAAAAAA6s/xvzjOQ7Q5ws/s1600-h/OBIAGG06.png 8. http://3.bp.blogspot.com/_qd3TDEvIh4Y/SRbN-85f3iI/AAAAAAAAA60/donx9OBV9to/s1600-h/OBIAGG07.png 9. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SRbOIK3vAZI/AAAAAAAAA68/5gJZ6ri45dA/s1600-h/OBIAGG08.png 10. http://4.bp.blogspot.com/_qd3TDEvIh4Y/SRbOWsRlYtI/AAAAAAAAA7E/yzEcDAkIH2I/s1600-h/OBIAGG09.png 11. http://2.bp.blogspot.com/_qd3TDEvIh4Y/SRbOfqMzXNI/AAAAAAAAA7M/ORVSity3ua0/s1600-h/OBIAGG10.png 12. http://3.bp.blogspot.com/_qd3TDEvIh4Y/SRbOrerNNvI/AAAAAAAAA7U/C8ZrWYQDHf8/s1600-h/OBIAGG11.png 13. http://3.bp.blogspot.com/_qd3TDEvIh4Y/SRbO1maoEaI/AAAAAAAAA7c/mOjKzBBQe6o/s1600-h/OBIAGG12.png 14. http://1.bp.blogspot.com/_qd3TDEvIh4Y/SRbPB9hZ1YI/AAAAAAAAA7k/E23QxGegags/s1600-h/OBIAGG13.png 15. http://knowledge.ciber.nl/weblog/?p=149
BEGIN FOR i IN (SELECT CREATE INDEX IDX AGGR SUBSTR (0000 TO CHAR (ROWNUM), -5) ON AGGR. table name ( column name ) NOLOGGING NOPARALLEL AS sql str FROM all tab cols WHERE owner = AGGR AND (table name LIKE AG % OR table name LIKE SA %)) LOOP execute immediate (i.sql str); END LOOP; END; Till Next Time
Neem gewoon uw eigen vragen mee en ontdek de geheimen van OBI! Op 14 januari 2009 is de eerste editie van OBI Forum Live. Een initiatief van CIBER, InCore Solutions en Scamander, in samenwerking met Oracle Nederland. OBI Forum Live zal plaatsvinden bij Oracle Nederland in De Meern. Schrijf je nu in op [1]http://www.obi-forumlive.nl/
1. http://www.obi-forumlive.nl/
[1] Go to your view.css directory in ..s MyCompagny\b mozilla 4 Locate this part and change the colour: /* ***** */ /* Title */ /* ***** */ .TitleTable { font-family: arial, helvetica, sans-serif; border-width: 0 0 4px 0; border-style: solid; border-color: #FF0000; } If you are on OC4J dont forget it to copy to applications directory: ...oc4j bi\j2ee\home\applicatio ns\analytics\analytics\ res\s MyCompagny\b mozilla 4 Till Next Time
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/SRqiPIAn1SI/AAAAAAAAA8Q/Bs4w5UnWFPA/s1600-h/image%5B2%5D.png
Rule of thumb: Number of concurrent users * 5. There are a couple of more setting, but unless you have a lot of concurrent users (1000+) the gain of these settings is minimal. Specifying the Maximum Amount of Time an Entry Can Exist in the Oracle BI Presentation Services Cache From the guide: You can override the maximum amount of time, in minutes, that an entry in the cache can exist before it is removed. The internal default is 60 (one hour). Depending on (the number of requests being run, an entry may be removed before the time limit expires. The following entry is an example: <CacheMaxExpireMinutes>60</CacheMaxExpireMinutes> Rule of thumb: Dont make this any longer then 10 % of your ETL refresh rate to avoid the risk of user seeing old data inadvertently. Be aware that CacheMaxExpireMinutes also inuenced by CacheMinUserExpireMinutes. This means that in a 24Hour ETL cycle this shouldnt be any longer then 150 minutes. Specifying the Least Amount of Time an Entry Can Exist in the Oracle BI Presentation Services Cache From the guide: You can override the minimum amount of time, in minutes, that an entry in the cache can exist before it is removed. The internal default is 10. The following entry is an example: <CacheMinExpireMinutes>10</CacheMinExpireMinutes> Rule of thumb: 20 % of CacheMaxExpireMinutes Specifying the Least Amount of Time an Entry Can Exist in the Oracle BI Presentation Services Cache After Use From the Guide: You can override the minimum amount of time, in minutes, that an entry in the cache can exist after it has been viewed by a user. The internal default is 10. For example, if CacheMaxExpireMinutes is set to 60 minutes and a user views the entry during the 59th minute, the entry exists for that user for an additional 10 minutes. The user can continue paging through the data without requiring a new request to be run. The following entry is an example: <CacheMinUserExpireMinutes>10</CacheMinUserExpireMinutes> Rule of thumb: same as CacheMinExpireMinutes Till Next Time This article was orginally written [1]http://knowledge.ciber.nl/weblog/?p=150
1. http://knowledge.ciber.nl/weblog/?p=150
for
the
Ciber
knowledge
blog:
[2] But I dont want to use outerjoins, since obiee messes them up anyway when you try do ltering later on. Here is a small Q &D trick Add an extra fact column and multiply it with a random number:
[4] What is happening? If we look in the log we see that OBIEE isnt executing the RAND() function on the Database side but internally. For that it rst gets only the dimension columns from the database: 175
select T26.D YEAR as c2, T26.D YEAR MONTH as c3 from DIM YEAR MONTH DAY T26 where ( T26.D YEAR = 2013 ) Next it will get the facts: select D2.c2 as c1, D2.c3 as c2, D2.c1 as c3 from (select D1.c1 as c1, D1.c2 as c2, D1.c3 as c3 from (select sum(T31.F FACT VAL) as c1, T26.D YEAR as c2, T26.D YEAR MONTH as c3, ROW NUMBER() OVER (PARTITION BY T26.D YEAR MONTH ORDER BY T26.D YEAR MONTH ASC) as c4 from DIM YEAR MONTH DAY T26, F FACTS T31 where ( T26.D YEAR = 2013 and T26.D YEAR MONTH DAY = T31.D DATE ) group by T26.D YEAR, T26.D YEAR MONTH ) D1 where ( D1.c4 = 1 ) ) D2 order by c2 After that it stitches the querys together. Till Next Time
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/SRqUbnVYI0I/AAAAAAAAA7w/b_tZxnF-wDU/s1600-h/image%5B2%5D.png 2. http://lh4.ggpht.com/_qd3TDEvIh4Y/SRqUcdIQbYI/AAAAAAAAA74/ZnRuIvRvZIc/s1600-h/image%5B5%5D.png 3. http://lh3.ggpht.com/_qd3TDEvIh4Y/SRqUdFz8OGI/AAAAAAAAA8A/0PaKqioqJlY/s1600-h/image%5B9%5D.png 4. http://lh5.ggpht.com/_qd3TDEvIh4Y/SRqUeYuVTkI/AAAAAAAAA8I/izjHtzMTQek/s1600-h/image%5B13%5D.png
Outerjoins in OBIEE can be a bit tricky and dont always give you the result you would expect. In this article I will get trough the basics, in a next trough some pittfalls.... Creating an outerjoin In OBIEE outerjoins are created in the Business Model Layer: Open the properties screen of the logical join:
[1] In the type dropdown box you can choose between Inner,Left Outer, Right Outer and Full outer. Left outer join
[2] A Left Outer join is interpreted by OBIEE as show me all data form the left table {DIM YEAR MONTH DAY } and any matches with the right table {F FACTS }. If we look in the log we can see the following physical query:
select T26.D YEAR as c1, sum(T31.F FACT VAL) as c2 from DIM YEAR MONTH DAY T26 left outer join F FACTS T31 On T26.D YEAR MONTH DAY = T31.D DATE group by T26.D YEAR order by c1, c2 177
[4] A Right Outer is interpreted by OBIEE as show me all data form the right table {F FACTS } and any matches with the left table {DIM YEAR MONTH DAY }. If we look in the log we can see the following physical query: select T26.D YEAR as c1, sum(T31.F FACT VAL) as c2 from F FACTS T31 left outer join DIM YEAR MONTH DAY T26 On T26.D YEAR MONTH DAY = T31.D DATE group by T26.D YEAR order by c1, c2 If you have a closer look at the log you will see that OBIEE has translated the join to a left outer joinby switching the tables.
[5] 178
[6] A Full Outer Join is interpreted by OBIEE as show me all data form the left table {DIM YEAR MONTH DAY } and all the data from the the right table {F FACTS } regardless of any matches. If we look in the log we can see the following physical query: select T26.D YEAR as c1, sum(T31.F FACT VAL) as c2 from DIM YEAR MONTH DAY T26 full outer join F FACTS T31 On T26.D YEAR MONTH DAY = T31.D DATE group by T26.D YEAR order by c1, c2
[7] ..
[8] Till Next Time This article is orignally written [9]http://knowledge.ciber.nl/weblog/?p=152 for the ciber knowledge blog:
[3]
select T26.D YEAR as c1, sum(T31.F FACT VAL) as c2 from DIM YEAR MONTH DAY T26 left outer join F FACTS T31 On T26.D YEAR MONTH DAY = T31.D DATE group by T26.D YEAR having 440000 < sum(T31.F FACT VAL) order by c1
This kills the outerjoin.... I hear think why not add OR IS NULL. Lets do that:
[5] 180
select T26.D YEAR as c1, sum(T31.F FACT VAL) as c2 from DIM YEAR MONTH DAY T26 left outer join F FACTS T31 On T26.D YEAR MONTH DAY = T31.D DATE group by T26.D YEAR having 440000 < sum(T31.F FACT VAL) or sum(T31.F FACT VAL) is null order by c1
We still are missing a couple o years. Let try an in view lter: change F FACT VAL to:
CASE WHEN SUM(F FACTS.F FACT VAL by DIM YEAR MONTH DAY.D YEAR )> 440000 then SUM(F FACTS.F FACT VAL by DIM YEAR MONTH DAY.D YEAR ) else NULL end
[8] From the log: SET VARIABLE QUERY SRC CD=Report;SELECT DIM YEAR MONTH DAY.D YEAR saw 0, CASE WHEN SUM(F FACTS.F FACT VAL by DIM YEAR MONTH DAY.D YEAR )> 440000 then SUM(F FACTS.F FACT VAL by DIM YEAR MONTH DAY.D YEAR ) else NULL end saw 1 FROM BM OUTER JOIN ORDER BY saw 0 select T26.D YEAR as c1, sum(T31.F FACT VAL) as c4 from DIM YEAR MONTH DAY T26 left outer join F FACTS T31 On T26.D YEAR MONTH DAY = T31.D DATE group by T26.D YEAR order by c1 As you can see OBIEE did the case when logic internally. Till Next Time This article is orignally written for the ciber knowledge blog:
1. http://obiee101.blogspot.com/2008/11/obiee-understanding-outerjoins-part-1.html 2. http://lh6.ggpht.com/_qd3TDEvIh4Y/SSVcfTEXH4I/AAAAAAAAA9Y/0RfODY8xq0s/s1600-h/image2.png 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/SSVcgp35QXI/AAAAAAAAA9g/cc2wfRabnhk/s1600-h/image5.png 4. http://lh4.ggpht.com/_qd3TDEvIh4Y/SSVciJ3iL7I/AAAAAAAAA9o/cj8iM-2ss_8/s1600-h/image8.png 5. http://lh3.ggpht.com/_qd3TDEvIh4Y/SSVcjVBwexI/AAAAAAAAA9w/EBAQw8Yemqk/s1600-h/image14.png 6. http://lh4.ggpht.com/_qd3TDEvIh4Y/SSVckjYY0GI/AAAAAAAAA94/lkvscV3cW7c/s1600-h/image11.png 7. http://lh6.ggpht.com/_qd3TDEvIh4Y/SSVcl-DtxLI/AAAAAAAAA-A/Bkb3Pj1LDhY/s1600-h/image15%5B2%5D.png 8. http://lh4.ggpht.com/_qd3TDEvIh4Y/SSVcnNluWPI/AAAAAAAAA-I/8nfUtoNqcSg/s1600-h/image31.png
Still it wise to put some eort in the way you map the tables in the repository, especially if you want to minimize the query response time. Lets go back to out basic model:
[1]
[2] As you can see this table only contains data after 2008. The data before 2008 is in the old database. Making a federated / fragmented logical table Step 1 import the old fact table into physical layer of the repository:
[3] Step 2 make the correct joins in the Physical Layer 183
[4]
Step 3 Add the old table to the datasource of the logical table
[5]
[6]
[7]
[10] Its good practice to also set the where clause(s): 185
[11]
[12] Why? During transaction from the old to a new system there is usually a grace period where both systems are kept up to date, if we dont restrict this grace period the numbers might not add up correctly. Lets have a look at the result:
[13] Optimizing the fragmentation If we take a look at log of the previous query: Sending query to database named ORCL (id: 8216 ): 186
select T46.LEVEL 01 as c1, T46.LEVEL 05 as c2 from DIM LEVEL 05 T46 order by c2 +++Administrator:2d0000:2d0001 -- Sending query to database named ORCL (id: 8233 ): select T26.D YEAR as c1, T26.D YEAR MONTH DAY as c2 from DIM YEAR MONTH DAY T26 order by c2 +++Administrator:2d0000:2d0001 -- Sending query to database named ORCL OLD (id: 8250 ): select T1220.F FACT VAL as c1, T1220.D DATE as c2, T1220.LEVEL 5 as c3 from F FACTS T1220 where ( T1220.D DATE < 20080101 ) order by c2 +++Administrator:2d0000:2d0001 -- Sending query to database named ORCL (id: 8165 ): select D0.c3 as c2, D0.c2 as c3, sum(D0.c1) as c6 from (select T31.F FACT VAL as c1, T26.D YEAR as c2, T46.LEVEL 01 as c3 from DIM LEVEL 05 T46, DIM YEAR MONTH DAY T26, F FACTS T31 where ( T26.D YEAR MONTH DAY = T31.D DATE and T31.LEVEL 5 = T46.LEVEL 05 and T31.D DATE >= 20080101 ) ) D0 group by D0.c2, D0.c3
You will see that the old data isnt picked up very eciently. OBIEE res three separated querys to the database and stitches and summarizes the data locally, while the new data is summarized at the database. Use the database potential OBIEE is NOT a database! So all data manipulation / aggregation we can do at the database side is usually faster then bringing the data over to the BI-server. If the fact are in the old system then there is a big changes that it also contains the dimensions. If not ask your DBA to make a copy to that database either physical or as a view based on a database link. We can import and map the old dimensions the same way as the old fact table. 187
[14]
[17]
[18] From the log: +++Administrator:2d0000:2d0003 Sending query to database named ORCL OLD (id: 9994 ): select T1220.F FACT VAL as c1, T2134.LEVEL 01 as c2, T1220.D DATE as c3 from 188
DIM LEVEL 05 T2134, F FACTS T1220 where ( T1220.LEVEL 5 = T2134.LEVEL 05 and T1220.D DATE < 20080101 ) order by c3 +++Administrator:2d0000:2d0003 -- Sending query to database named ORCL OLD (id: 9868 ): select T2140.D YEAR as c1, T2134.LEVEL 01 as c3, sum(T1220.F FACT VAL) as c5 from DIM LEVEL 05 T2134, DIM YEAR MONTH DAY T2140, F FACTS T1220 where ( T1220.D DATE = T2140.D YEAR MONTH DAY and T1220.LEVEL 5 = T2134.LEVEL 05 and T1220.D DATE < 20080101 and (T2140.D YEAR in (2007, 2008)) ) group by T2134.LEVEL 01, T2140.D YEAR
Nicely split into two non overlapping querys. Till Next Time This article is originally written for the Ciber knowledge blog.
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/SScAYQNYvoI/AAAAAAAAA-Q/aJNHosH0Ai8/s1600-h/image%5B92%5D.png 2. http://lh6.ggpht.com/_qd3TDEvIh4Y/SScAZGKir4I/AAAAAAAAA-Y/uMzq_S5FB6Y/s1600-h/image%5B6%5D.png 3. http://lh6.ggpht.com/_qd3TDEvIh4Y/SScAaFB6BwI/AAAAAAAAA-g/EHGQByl1w4k/s1600-h/image%5B10%5D.png 4. http://lh6.ggpht.com/_qd3TDEvIh4Y/SScAbHIegqI/AAAAAAAAA-o/GG4K4Clb594/s1600-h/image%5B53%5D.png 5. http://lh6.ggpht.com/_qd3TDEvIh4Y/SScAcLd-xHI/AAAAAAAAA-w/pMgQLcTGiCI/s1600-h/image%5B14%5D.png 6. http://lh3.ggpht.com/_qd3TDEvIh4Y/SScAdH0nfRI/AAAAAAAAA-4/_wLnFkCLNUE/s1600-h/image%5B19%5D.png 7. http://lh6.ggpht.com/_qd3TDEvIh4Y/SScAeVRBlvI/AAAAAAAAA_A/Q1GeIstjvOQ/s1600-h/image%5B93%5D.png 8. http://lh4.ggpht.com/_qd3TDEvIh4Y/SScAfLXYJ0I/AAAAAAAAA_I/2QU7deJJCW0/s1600-h/image%5B94%5D.png 9. http://lh4.ggpht.com/_qd3TDEvIh4Y/SScAgYSrxpI/AAAAAAAAA_Q/-VRB4YnpEpg/s1600-h/image%5B95%5D.png 10. http://lh3.ggpht.com/_qd3TDEvIh4Y/SScAhqXBH3I/AAAAAAAAA_Y/8tYKaUP8hNE/s1600-h/image%5B96%5D.png 11. http://lh6.ggpht.com/_qd3TDEvIh4Y/SScAjFhKlaI/AAAAAAAAA_g/h54xQQcVKPw/s1600-h/image%5B44%5D.png 12. http://lh5.ggpht.com/_qd3TDEvIh4Y/SScAkwkiroI/AAAAAAAAA_o/A51YHdZT1kA/s1600-h/image%5B97%5D.png 13. http://lh4.ggpht.com/_qd3TDEvIh4Y/SScAlmmycsI/AAAAAAAAA_w/v2QtxRIhF90/s1600-h/image%5B57%5D.png 14. http://lh6.ggpht.com/_qd3TDEvIh4Y/SScAmnNIycI/AAAAAAAAA_4/ZHn83auPVzs/s1600-h/image%5B87%5D.png 15. http://lh6.ggpht.com/_qd3TDEvIh4Y/SScAnllI39I/AAAAAAAABAA/CN0KnZ-qX88/s1600-h/image%5B89%5D.png 16. http://lh3.ggpht.com/_qd3TDEvIh4Y/SScAoYUqcuI/AAAAAAAABAI/nm0JdKZQPV8/s1600-h/image%5B98%5D.png 17. http://lh5.ggpht.com/_qd3TDEvIh4Y/SScAqGQFj5I/AAAAAAAABAQ/_Vu8RP6ad-Q/s1600-h/image%5B90%5D.png 18. http://lh3.ggpht.com/_qd3TDEvIh4Y/SScArIQvPAI/AAAAAAAABAY/psPQZqLgzGE/s1600-h/image%5B91%5D.png
[1]
[2]
[3]
Error Codes: OPR4ONWY:U9IM8TAC:OI2DL65P State: HY000. Code: 10058. [NQODBC] [SQL STATE: HY000] [nQSError: 10058] A general error has occurred. [nQSError: 16001] ODBC error state: 37000 code: -3100 message: [Microsoft][ODBC Excel Driver] Syntax error (missing operator) in query expression count(distinct T2207.[F LETTER]).. [nQSError: 16014] SQL statement preparation failed. (HY000)
This is causes by the fact that Microsoft Excel doesnt know the COUNT DISTINCT command.
You can x this by deselecting the count distinct feature in the database properties: 190
[1]
[2]
[3]
[4]
[5]
[6]
Enter the web site home directory, usually ..\Inetpub\wwwroot. Click next.
[7]
[8]
Click Finish.
[9]
[10]
[11]
[12]
Click Finish
[13] 197
[14]
[15]
Click Finish
[17] Check the Web Service Extension permissions for the saw.dll Till Next Time Edit: Je gives some info on using this on a 64 bit pltafrom: 199
[18]http://it.toolbox.com/blogs/achieving-great-bi/obiee-on-vist a-64bit-with-iis-70-29882
1. http://lh3.ggpht.com/_qd3TDEvIh4Y/SSmbYJmxhhI/AAAAAAAABBI/1wnH5qTEXj0/s1600-h/image3.png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/SSmbZW1KFcI/AAAAAAAABBQ/CiRsM-apv8Q/s1600-h/image8.png 3. http://lh4.ggpht.com/_qd3TDEvIh4Y/SSmba1G31yI/AAAAAAAABBY/3DTkOMS0uQU/s1600-h/image9%5B1%5D.png 4. http://lh6.ggpht.com/_qd3TDEvIh4Y/SSmbb3a1nxI/AAAAAAAABBg/3hhtr4Mlq6c/s1600-h/image12%5B2%5D.png 5. http://lh6.ggpht.com/_qd3TDEvIh4Y/SSmbcnJ2lJI/AAAAAAAABBo/z1bTEQMe29g/s1600-h/image15%5B2%5D.png 6. http://lh4.ggpht.com/_qd3TDEvIh4Y/SSmbd6DHEwI/AAAAAAAABBw/ZmI5_w7csRY/s1600-h/image30%5B2%5D.png 7. http://lh3.ggpht.com/_qd3TDEvIh4Y/SSmbez7OCGI/AAAAAAAABB4/srh-cCTOSFc/s1600-h/image24%5B2%5D.png 8. http://lh5.ggpht.com/_qd3TDEvIh4Y/SSmbgOIvhsI/AAAAAAAABCA/qvcqosCsnzU/s1600-h/image33%5B2%5D.png 9. http://lh5.ggpht.com/_qd3TDEvIh4Y/SSmbhA1_-4I/AAAAAAAABCI/7VT5yIBKaDA/s1600-h/image36%5B2%5D.png 10. http://lh6.ggpht.com/_qd3TDEvIh4Y/SSmbiItoTnI/AAAAAAAABCQ/yRun-CRi6ZA/s1600-h/image39%5B2%5D.png 11. http://lh3.ggpht.com/_qd3TDEvIh4Y/SSmbjs63yZI/AAAAAAAABCY/F0DZyPHxtVY/s1600-h/image%5B13%5D.png 12. http://lh5.ggpht.com/_qd3TDEvIh4Y/SSmbk9sIRcI/AAAAAAAABC4/zxttM-Wfg88/s1600-h/image45%5B2%5D.png 13. http://lh5.ggpht.com/_qd3TDEvIh4Y/SSmbmIfbNiI/AAAAAAAABCo/zYZGsSwVBq8/s1600-h/image48%5B2%5D.png 14. http://lh4.ggpht.com/_qd3TDEvIh4Y/SSmbnf6RQeI/AAAAAAAABCw/v7pb7Lu89S4/s1600-h/image%5B14%5D.png 15. http://lh5.ggpht.com/_qd3TDEvIh4Y/SSmbk9sIRcI/AAAAAAAABC4/zxttM-Wfg88/s1600-h/image45%5B2%5D.png 16. http://lh4.ggpht.com/_qd3TDEvIh4Y/SSmbpG8ak8I/AAAAAAAABDA/AIkaj8GIrgo/s1600-h/image%5B12%5D.png 17. http://lh3.ggpht.com/_qd3TDEvIh4Y/SSmbqNxhPII/AAAAAAAABDI/aSWb6NRlKSE/s1600-h/image57%5B3%5D.png 18. http://it.toolbox.com/blogs/achieving-great-bi/obiee-on-vista-64bit-with-iis-70-29882
Dont do your development as an extension of the PAINT or SALES rpd. Start with a clean one. Replacing the Oracle logo with your own Company logo, sending in the SALES webcat as a Proof Of Concept, claiming 10k as costs, is not only very stupid, its illegal / criminal! Do a consistency check before you send it to the customer. Dont do any customizations in S(K) ORACLE10 directory, create a new one. Check which version of OBIEE your customer is using. Clean the RPD of test users. Remove any test material from the RPD. Start with a clean WEBCAT. Develop shared lters directly as shared lters, do not copy them. DO NOT USE other customers data in a Proof Of Concept for a new lead. If the customer gives you test data in separated XLS sheets, try merging them into one sheet, this will save a lot of time conguring ODBC connections. Dont go overboard with the aggregate persistence wizard. 400 aggregate tables on one fact table is plain stupid. If a customer really needs that, try selling them a product like ESSBASE. Install a version control system. (Dont forget to check in/out !) 200
Develop your reports based on the customers screen size, most will still be on 17 (1024 x 768). Check your calculations against common sense: a 50, per year / per employee turnover should might be a good indicator that the calculation is wrong. Check your calculations against common sense: a .0004 % annual growth 5 years in a row is very very strange....... Have one standard for graphs; 2D graphs are better readable then 3D. Keep your reports to one colour schema. Document your work! Try to avoid case 1=0 constructions in your prompts, use a proper LOV table. 27/11/08: Adrian Ward: When doing a presentation to the client, run through it rst to cache the results. It will be far more impressive. 28/11/08: Bytus: Never try to recreate the Excel requirements specications, screenshots of old systems or Powerpoint mock-ups 1:1 at all costs. Work towards the best approximation which satises the actual clients needs (not his wishes) while bringing forward the strong points of OBI EE. (It can never be an Excel!) 03/05/08: Sunil: Above all be truthful and claim only what you know. 19/01/09: John Minkjan: Create dierent connection pools for dierent user groups 19/04/09: John Minkjan: Read Stephen Few: Information Dashboard Design: The Eective Visual Communication of Data 06/05/10: John Minkjan: Use display folders to organize your work. 28/06/10: John Minkjan: Dont use SYSTEM accounts in your connection pool
[1] The month year part of the date dimension wasnt sorted in the right way. He forgot to assign a sort column (format (YYYYMM)):
[3] 202
[1]
[2]
[4] 203
[5]
Looks alright? Have a look again without year and month: 204
[7]
[10]
206
2.12
December
[1] If you want to do PIT reporting (Point In Time) you need to use the SCF columns:
[2] One possible solution track is using creating a SCF IS PIT column in the repository based on a repository variable. First lets create a PIT DATE session variable:
[4] Our data will now look like this (Current date = 03-DEC-2008):
[5] If we add a lter to our report : [6] we only get CURRENT data:
[7] For most users this is the information they are looking for. For those who need to go back in time with the same report, you simple add a prompt to the dashboard allowing them to set the PIT date:
[2] 209
Press Disabled Items and check if the OBIEE Oce add in is the list. Till Next Time
1. http://bidwcz.blogspot.com/2008/12/chybjc-bi-office-add-in-me-se-to-stt-i.html 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/STZ2o-d3oCI/AAAAAAAABGk/X-F2RMOG5j0/s1600-h/image%5B4%5D.png
[2] One of our customers wanted to use the graph from a pivot view to create an individual graph for each machine. One problem.... Oracle forgot to make it available for the pivot view, its not in the graph select dropdown list: 210
[3] My colleague Rob van Beek found a workaround. Go to the advanced tab of the report:
Press the set XML button:[6] You will get a warning like this:
[7] This is because the pivot view template doesnt know timeline graphs. If you really want you can probably hack OBIEE to suppress the warning, but I would just leave it like this. Press OK to ignore the warning. In your Compound lay-out you can see the results: 211
[8] Till Next Time This article was originally written [9]http://knowledge.ciber.nl/weblog/?p=157 for the Ciber knowledge blog:
212
[2]
Enable the Use Custom CSS Style enter display:none Till Next Time
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/ST0VsEr8WyI/AAAAAAAABH0/c7spQMnU-9U/s1600-h/image%5B5%5D.png 2. http://lh3.ggpht.com/_qd3TDEvIh4Y/ST0Vsw3WN-I/AAAAAAAABH8/5FAI7Lw6FkY/s1600-h/image%5B2%5D.png
TIMESTAMPADD(SQL TSI DAY, DAYOFWEEK(CURRENT DATE) *-1,CURRENT DATE) Till Next Time
This always produces costly SQL since OBIEE will execute this as a SELECT DISTINT against the reference table. Much better is to add a small LOV table to repository with its own business model. I created a small XLS spreadsheet with a couple of LOVs:
[1] Next I imported it into the repository and create the dim version of the LOV:
[4] Now you can create each LOV prompt as a direct SQL request:
[5] 215
TYPE =
The result can be stored in a presentation or a repository variable for late processing:
[10] 217
[13] 218
OC4J Prerequisites First we have to tell the presentation server where to nd the dictionary. This is congured in the INSTANCECONFIG.XML le. Usually this le is found in {OracleBIDate }\web\cong. Open the le and add: <SubjectAreaMetadata> <DictionaryURLPrex>/analytics/dictionary/</DictionaryURLPrex> </SubjectAreaMetadata> between the <WebCong> tags.
[14] WOW: Some OBIEE cong tags and the contents are CaSe SeNsItIvE! OC4J web server Create the dictionary directory in the analytics application folder:
[15] Usually {OracleBI }\oc4j bi\j2ee\home\applicatio n\analytics\analytic. (it s the folder where your SAW.DLL is located). Copy the content of your dictionary export folder to this folder:
[17] 219
[19] ISS Prerequisites Create a new virtual directory in your IIS manager
[20] Add the virtual directory to your INSTANCECONFIG.XML. Usually this le is found in {OracleBIDate }\web\cong. <SubjectAreaMetadata> 220
<DictionaryURLPrex>/analyticsDictionary/</DictionaryURLPrex> </SubjectAreaMetadata>
[21] WOW: Some OBIEE cong tags and the contents are CaSe SeNsItIvE! Restart the presentation server
[24] [25]Granting access to the metadata dictionary Log in as administrator Go Settings > Administration 221
[28] By default this is set to everyone. Till Next Time This article was orignally written for the Ciber knowledge blog: [29]http://knowledge.ciber.nl/weblog/ EDIT: This Feature is availible from 10.3.4
1. file://localhost/mnt/ext/blogbooker/tmp/sm6j0byg/sm6j0byg-body.tex.lynx.html 2. file://localhost/mnt/ext/blogbooker/tmp/sm6j0byg/sm6j0byg-body.tex.lynx.html 3. file://localhost/mnt/ext/blogbooker/tmp/sm6j0byg/sm6j0byg-body.tex.lynx.html 4. file://localhost/mnt/ext/blogbooker/tmp/sm6j0byg/sm6j0byg-body.tex.lynx.html 5. http://lh4.ggpht.com/_qd3TDEvIh4Y/SUEQ0L5mjsI/AAAAAAAABI0/eOGowjRgvy8/s1600-h/clip_image0026.jpg 6. http://lh3.ggpht.com/_qd3TDEvIh4Y/SUEQ2JIF1qI/AAAAAAAABI8/B7VWtyp8Hpw/s1600-h/clip_image0045.jpg 7. http://lh4.ggpht.com/_qd3TDEvIh4Y/SUEQ4JAOo6I/AAAAAAAABJE/LaGD487aGOU/s1600-h/clip_image006%5B1%5D.jpg 8. http://lh4.ggpht.com/_qd3TDEvIh4Y/SUEQ6PoCQuI/AAAAAAAABJM/sohVstGBTWw/s1600-h/clip_image0085.jpg 9. http://lh6.ggpht.com/_qd3TDEvIh4Y/SUEQ7iRqCAI/AAAAAAAABJU/9Np85RMdosg/s1600-h/clip_image0104.jpg 10. http://lh5.ggpht.com/_qd3TDEvIh4Y/SUEQ89AUefI/AAAAAAAABJc/60v6LQ2Nffg/s1600-h/clip_image0124.jpg 11. http://lh4.ggpht.com/_qd3TDEvIh4Y/SUEQ_DEKFCI/AAAAAAAABJk/_O882iqeqlY/s1600-h/clip_image0144.jpg 12. http://lh5.ggpht.com/_qd3TDEvIh4Y/SUERBS4-7YI/AAAAAAAABJs/zZgIqlc5U0M/s1600-h/clip_image0164.jpg 13. http://lh5.ggpht.com/_qd3TDEvIh4Y/SUERDMTXmbI/AAAAAAAABJ0/NIOEwCPnaIA/s1600-h/clip_image0184.jpg 14. http://lh4.ggpht.com/_qd3TDEvIh4Y/SUERFWLhNEI/AAAAAAAABJ8/D6qJAuJ5euY/s1600-h/clip_image020%5B1%5D.jpg 15. http://lh5.ggpht.com/_qd3TDEvIh4Y/SUERHFXfePI/AAAAAAAABKE/E5gYKOV4FOw/s1600-h/clip_image022%5B1%5D.jpg 16. http://lh4.ggpht.com/_qd3TDEvIh4Y/SUERI54zFJI/AAAAAAAABKM/nbhOQbaBYr8/s1600-h/clip_image024%5B1%5D.jpg 17. http://lh5.ggpht.com/_qd3TDEvIh4Y/SUERLKXnimI/AAAAAAAABKU/v3BTlHGP1mY/s1600-h/clip_image026%5B1%5D.jpg 18. http://lh5.ggpht.com/_qd3TDEvIh4Y/SUERMzpE7lI/AAAAAAAABKc/TiJ-M7j2XHE/s1600-h/clip_image0297.jpg 19. http://lh6.ggpht.com/_qd3TDEvIh4Y/SUERN8S57LI/AAAAAAAABKk/bRlDD845cLc/s1600-h/clip_image031%5B1%5D.jpg 20. http://lh5.ggpht.com/_qd3TDEvIh4Y/SUERPWAC0qI/AAAAAAAABKs/AmLYVMT7vOY/s1600-h/clip_image0334.jpg 21. http://lh5.ggpht.com/_qd3TDEvIh4Y/SUERQuKB6kI/AAAAAAAABK0/0OH3Zs3AwGQ/s1600-h/clip_image035%5B1%5D.jpg 22. jpg 23. http://lh4.ggpht.com/_qd3TDEvIh4Y/SUERTQk5CSI/AAAAAAAABLE/NXeShz4dc84/s1600-h/clip_image02914.jpg 24. jpg 25. file://localhost/mnt/ext/blogbooker/tmp/sm6j0byg/sm6j0byg-body.tex.lynx.html http://lh4.ggpht.com/_qd3TDEvIh4Y/SUERUZz1tMI/AAAAAAAABLM/NZjsod-qnRc/s1600-h/clip_image0311%5B1%5D. http://lh6.ggpht.com/_qd3TDEvIh4Y/SUERSCBI39I/AAAAAAAABK8/1hOyit03L-A/s1600-h/clip_image0261%5B1%5D.
222
[2] step 2: Create a scheduler command Kick of: {OracleBI }\server\Bin>admintool /command {YournQCommandDirectory }:/nQMetaDataExport.txt every day/week/month WOW: The command line switch of the admintool is not supported by Oracle. Till Next Time
1. http://obiee101.blogspot.com/2008/12/obiee-metadata-dictionary.html 2. http://lh6.ggpht.com/_qd3TDEvIh4Y/SUYgCuBtEWI/AAAAAAAABME/UwLFPBGkBzw/s1600-h/clip_image002%5B5%5D.jpg
[2] Decided to unistall it for the time being......... This is an reaction for this article: [3]http://obiee101.blogspot.com/2008/09/obiee-google-chrome.html Till Next Time
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/SUuJuNoZ57I/AAAAAAAABMk/JrQMqzr2970/s1600-h/image%5B2%5D.png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/SUuJvfkAOXI/AAAAAAAABMs/IMfCq2ykJIw/s1600-h/image%5B5%5D.png 3. http://obiee101.blogspot.com/2008/09/obiee-google-chrome.html
[2] When selecting Create Bookmark Link you get an URL giving back the same prompt settings. An other option is creating a Prompted URL. This stores the value of the used prompts in the URL (Like goUrl) and allows you to edit the values. This functionality is enabled in the instancecong.xml le: <Dashboard> <EnablePromptedURL>True</EnablePromptedURL> </Dashboard>
[3] The URL will look something like: [4]http://vmobiee:9704/analytics/saw.dll?Dashboard & scid=sccbLaQP0rs &PortalPath= %2Fshared %2FSample %20Sales %2F portal %2F01 %20Ranks %20 %26 %20Toppers &Page=11 %20Multi %20Dim %20TopNs &Action=Navigate &col1=1 &val1=7 &col2= %22D0 %20Time %22. %22T05 %20Per %20Name %20Year %22 &val2=2007 &col3= %22D4 %20Product %22. %22P04 %20 %20Brand %22 &val3=Brand %203 Before sending the URL to somebody you can edit the prompt values somewhat. If you want to this programmatically use the goUrl functionality. You can set the lifespan of the bookmark with the <BookmarkExpirationDays> tags: <Dashboard> <EnableBookmarkURL>True</EnableBookmarkURL> <EnablePromptedURL>True</EnablePromptedURL> <BookmarkExpirationDays>30</BookmarkExpirationDays> </Dashboard> Till Next Time
1. http://lh3.ggpht.com/_qd3TDEvIh4Y/SUZmKlzmyiI/AAAAAAAABMM/2qoNr15FzBE/s1600-h/image2.png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/SUZmL96b8dI/AAAAAAAABMU/7Tmi38cvBvE/s1600-h/image5.png 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/SUZmM8Nr7QI/AAAAAAAABMc/eJpWpXJ3YDY/s1600-h/image8.png 4. http://vmobiee:9704/analytics/saw.dll?Dashboard&_scid=sccbLaQP0rs&PortalPath=%2Fshared%2FSample% 20Sales%2F_portal%2F01%20Ranks%20%26%20Toppers&Page=11%20Multi%20Dim%20TopNs&Action=Navigate&col1=1&val1=
225
[1] Since you are usually only working in one area at a time, why dont switch o the others to get more working space:
[2]
226
Chapter 3
2009
3.1 January
227
OBI Forum Live Vergeet je niet in te schrijven !LAATSTE KANS! (2009-01-05 09:18)
Ze Bloggen en Loggen... Ontmoet ze nu op OBI FORUM LIVE CIBER, InCore Solutions en Scamander zijn toonaangevende bedrijven op het gebied van Oracle s BI Suite. John Minkjan (CIBER), Remco van Dam (InCore Solutions), Daan Bakboord (Scamander) en Gerard Braat (Oracle) zijn Nederland s bekendste en beste (b)loggers op dit vlak. Op de nationale en internationale fora zijn ze bekende personen en leveren ze een zeer belangrijke bijdrage aan de kennisdeling. N heeft u de mogelijkheid om deze 4 belangrijkste spelers persoonlijk te ontmoeten en met ze te sparren . Neem gewoon uw eigen vragen mee en ontdek de geheimen van OBI! Op 14 januari 2009 is de eerste editie van OBI Forum Live. Een initiatief van CIBER, InCore Solutions en Scamander, in samenwerking met Oracle Nederland. OBI Forum Live zal plaatsvinden bij Oracle Nederland in De Meern. Schrijf je nu in op [1]http://www.obi-forumlive.nl/
1. http://www.obi-forumlive.nl/
228
bi
sample
analysis
[1]
[2]
AGO(BM AGO TEST.F FACTS.F FACT VAL, BM AGO TEST.DIM DATE TESTDim.YEAR, 1)
Which is not quite correct since it is missing the AGO data for FEB 29 2008 (1232). Now you could argue that this is correct since there is no FEB 29 2009. Most accounting systems agree that in such a case the data for FEB 29 should be added to the data of FEB 28. One way of solving this is adding a Year Ago DATE ID to your date dimensions with a double entry for FEB 28 2009:
[4]
[5]
[6]
We see that the data for FEB 28 and FEB 29 2008 is now summarized for FEB 28 2009. An other advance for working with xed ago column is your time dimension is that the query costs are about 80 % percent lower then using the OBIEE AGO function. Is this example 187 versus 853 on as Oracle 10Gr2 database. Till Next Time
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/SWpiqjRRbkI/AAAAAAAABOs/VGdu9R6anuo/s1600-h/image%5B6%5D.png 2. http://lh3.ggpht.com/_qd3TDEvIh4Y/SWpir2RphMI/AAAAAAAABO0/kqtYJdFoGus/s1600-h/image%5B7%5D.png 3. http://lh3.ggpht.com/_qd3TDEvIh4Y/SWpit6TxI3I/AAAAAAAABPA/oiD3IYiCR0k/s1600-h/image%5B21%5D.png 4. http://lh5.ggpht.com/_qd3TDEvIh4Y/SWpiuzUT0nI/AAAAAAAABPI/0PY6kX9QXk8/s1600-h/image%5B28%5D.png 5. http://lh6.ggpht.com/_qd3TDEvIh4Y/SWpivwzIkCI/AAAAAAAABPQ/XdUPRxBfhb8/s1600-h/image%5B26%5D.png 6. http://lh5.ggpht.com/_qd3TDEvIh4Y/SWpixPX6OvI/AAAAAAAABPY/67KW5xqVZeE/s1600-h/image%5B27%5D.png
...When a dynamic repository variable is updated, cache is automatically purged. This is designed behavior. Cache will be invalidated (i.e. purged) whenever the initialization block that populates dynamic repository variable is refreshed. The reason that refreshing a variable purges cache is that if a variable was used in a calculation, and the variable changed, then cache would have invalid data. By purging cache when a variable changes, this problem is eliminated. Since this is the designed functionality, Change Request 12-EOHPZ3 titled Repository variable refresh purges cache exists on our database to address a product enhancement request. The workaround is to go through the dynamic repository variables and verify that the variables are being refreshed at the correct interval. If a variable needs to be refreshed daily, there may be a need to set up a cache seeding .bat le that runs after the dynamic variable has been updated. If the cache seeding .bat le runs prior to the refresh of the dynamic variable refresh, then the cache will be lost. Till Next Time 232
[3] Dont forget to disable Everyone. Assign the users to there groups and check in TOAD or SQL Developer if the right connections are made:
[4] This way you can ask your DBA to assign the right resources to every group instead of an average setting for every one. Till Next Time
1. http://lh4.ggpht.com/_qd3TDEvIh4Y/SXN1_c1TsxI/AAAAAAAABPg/R4N_broAty0/s1600-h/image%5B3%5D.png 2. http://lh4.ggpht.com/_qd3TDEvIh4Y/SXN2AfuHP9I/AAAAAAAABPo/Q1E3CybFCfY/s1600-h/image%5B7%5D.png 3. http://lh3.ggpht.com/_qd3TDEvIh4Y/SXN2BZSi_bI/AAAAAAAABPw/G6NpPJGLvM8/s1600-h/image%5B11%5D.png 4. http://lh4.ggpht.com/_qd3TDEvIh4Y/SXN2FfJr4II/AAAAAAAABP4/mvsZXnsiBCw/s1600-h/image%5B15%5D.png
First of all I would like to thank everybody who has voted for me in the rst round and with great pleasure Ill accept the challenge for the next round. So if you follow BI news in Dutch, cast your vote! Doesnt have be on me..... but I dont mind if you do ;-) . Till Next Time
1. http://www.linkedin.com/pub/2/583/66a 2. http://nlbi.blogspot.com/2009/01/bi-consultant-van-2008-stemronde-2.html 3. http://www.linkedin.com/pub/2/583/66a 4. http://nlbi.blogspot.com/2009/01/bi-consultant-van-2008-stemronde-2.html
If you want to check how a report or dashboard runs as a dierent user but you havent yet setup ACT AS functionality or you dont know the password of the user, you can pass the &impersonate variable trought the URL. (If you are logging in as Administrator) Change this URL to the one shown below: For dashboards: [1]http://vmobiee:9704/analytics/saw.dll?Dashboard &impersonate=OBIEE A Directly in answers: [2]http://vmobiee:9704/analytics/saw.dll?An swers &impersonate=OBIEE A where OBIEE A is the username of the person you want to impersonate. Till Next Time
1. http://vmobiee:9704/analytics/saw.dll?Dashboard&impersonate=OBIEE_A 2. http://vmobiee:9704/analytics/saw.dll?Answers&impersonate=OBIEE_A
One of the little known possibilities are the row based calculations in a pivot table. Lets start with a simple report based on the sales sample RPD:
[1] 235
[2]
[3]
[4]
In the columns section click on the column properties and select New Calculated Item 236
[1] Then when building a report the column appears strange in answers, it includes the folder prex:
[2] It doesnt seem to inuence the results, it appears to be just on of those things.....
A Yamazumi chart is a stacked bar chart that shows the balance of cycle time workloads between a number of operators typically in an assembly line or work cell. The Yamazumi chart can be either for a single product or multi product assembly line. Yamazumi is a Japanese word that literally means to stack up. Toyota uses Yamazumi work balance charts to visually present the work content of a series of tasks and facilitate work balancing and the isolation and elimination of non value added work content. 238
[2] The minimum available data columns are: EMP NO: identies the employee TASK START TIME: Task Start Time TASK ORDER: RCOUNT for the tasks of the employee during the period, based on the TASK START TIME { RCOUNT(YamazumiTable.TASK START TIME by YamazumiTable.EMP NO) } TASK: Identies the task DURATION: TASK duration in minutes
[3] 239
1.2 Pivot Table The base data has to be transformed into a pivot table:
[6] Chart only, Horizontal Bar, 2D Stacked, Rectangle Set legend to None
[7] 1.4 Colouring the Task: Go to Format Chart Data > Conditional 240
242
4. http://lh6.ggpht.com/_qd3TDEvIh4Y/SX7WbReuUTI/AAAAAAAABUE/CBXYOAJv2sU/s1600-h/clip_image006%5B4%5D.jpg 5. http://lh5.ggpht.com/_qd3TDEvIh4Y/SX7WchYcEhI/AAAAAAAABUM/bJAaC7Cg07o/s1600-h/clip_image008%5B4%5D.jpg 6. http://lh3.ggpht.com/_qd3TDEvIh4Y/SX7WdxnNzcI/AAAAAAAABUU/aDWVQ6_BfCo/s1600-h/clip_image010%5B4%5D.jpg 7. http://lh4.ggpht.com/_qd3TDEvIh4Y/SX7WegSvY-I/AAAAAAAABUc/cP03pcpjYPU/s1600-h/clip_image012%5B4%5D.jpg 8. http://lh6.ggpht.com/_qd3TDEvIh4Y/SX7Wf1nouFI/AAAAAAAABUk/zibGSvQnBs0/s1600-h/clip_image014%5B4%5D.jpg 9. http://lh4.ggpht.com/_qd3TDEvIh4Y/SX7WhONVukI/AAAAAAAABUs/smpkTyQEP2g/s1600-h/clip_image016%5B4%5D.jpg 10. http://lh4.ggpht.com/_qd3TDEvIh4Y/SX7WiOw1wYI/AAAAAAAABU0/ipsMzY3KgbI/s1600-h/clip_image018%5B4%5D.jpg 11. http://lh3.ggpht.com/_qd3TDEvIh4Y/SX7WjLq4vhI/AAAAAAAABU8/UDbRR6EX168/s1600-h/clip_image020%5B4%5D.jpg 12. http://lh5.ggpht.com/_qd3TDEvIh4Y/SX7WkZeB8iI/AAAAAAAABVE/0xyLzAfGfQs/s1600-h/clip_image022%5B4%5D.jpg 13. http://lh5.ggpht.com/_qd3TDEvIh4Y/SX7Wl0CzY_I/AAAAAAAABVM/6Kg-ziD8DNI/s1600-h/clip_image024%5B5%5D.jpg
[1] Enter : <META HTTP-EQUIV = REFRESH CONTENT = 900> where 900 is the refresh time in seconds. Dont forget to check the Contains HTML Markup box. Till Next Time. Edit: Stijn pointed me to adding: <META HTTP-EQUIV=CACHE-CONTROL CONTENT=NO-CACHE > To avoid caching of the browser.
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/SYBlYBRYG9I/AAAAAAAABVU/i2lIgjxrMt8/s1600-h/image%5B3%5D.png
[3] In the Display Column & Table Headings you have ve choices:
[5] 244
As separate rows
[6] This allows you to customize the column heading over two rows:
[7]
[8] As Table.Column
[10]
Doesnt seem to change anything at rst glance, but works ne when you have two columns with the same name from dierent folders:
[11]
3.2
February
OBIEE Ago and and error ORA-00942: table or view does not exist (2009-02-11 09:51)
George did a good one: [1]http://translate.google.com/translate?u=http://bidwcz.blogspo t.com/ &sl=cs &tl=en &hl=en &ie=UTF-8 On how to use PERF PREFER INTERVAL STITCH JOIN here! Till Next Time
1. http://translate.google.com/translate?u=http://bidwcz.blogspot.com/&sl=cs&tl=en&hl=en&ie=UTF-8
Most managers tend to bring paper printouts of there reports to the meeting. This means that the printout for manager 1 at 09:10 will dierent from the printout for manager 2 at 09:15. This leads to useless discussing of the numbers on the report.
A DWH generally contains data over a long period of time. For strategic or tactical discussions todays unstable data is not signicant compared to the amount of historical data. A federated query would be a unnecessary claim of recourses of the OLTP system.
The ETL process which loads the DWH often cleanses the data from the OLTP system. (FI: Dont count invoices from department 999). If these rules arent covered in the RPD it will lead to the wrong numbers. Does this mean you should use federated querys against an OLTP system at all? Of course not! Just think about the result your are trying to get. Try conning the federated query to a specic level. (FI: Use in only when a day to day comparison is made.) Till Next Time
[2] Put the result in a presentation variable called YesNo On your report create a lter like:
[3] Pay close attention to the position of the singel quotes! Put both the prompt and the report on a dashboard page: 248
[4]
[2] Anyway here is how you can undo the damage. As always be careful when editing directly into the catalog XML.. Backup! Open the catalog in a o line mode: 249
[3]
Navigate to /system/metadata
[4]
[5]
[7] Press save, close catalog manager, restart presentation service. Till Next Time
1. mailto:F@#$K 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/SZqufGTqBhI/AAAAAAAABXw/sLxszFRZXBA/s1600-h/image%5B3%5D.png 3. http://lh6.ggpht.com/_qd3TDEvIh4Y/SZqufzakQHI/AAAAAAAABX4/tiXBUSrf6Zo/s1600-h/image%5B8%5D.png 4. http://lh3.ggpht.com/_qd3TDEvIh4Y/SZquhfOjloI/AAAAAAAABYA/ovFY-dQoE_4/s1600-h/image%5B12%5D.png 5. http://lh4.ggpht.com/_qd3TDEvIh4Y/SZquinzPKtI/AAAAAAAABYI/hOqQafL8-l4/s1600-h/image%5B16%5D.png 6. http://lh4.ggpht.com/_qd3TDEvIh4Y/SZqukUa8DEI/AAAAAAAABYQ/kb-_UWrMjP4/s1600-h/image%5B19%5D.png 7. http://lh5.ggpht.com/_qd3TDEvIh4Y/SZqul5mHVtI/AAAAAAAABYY/3MA7lPQtA8I/s1600-h/image%5B22%5D.png
One of the question I get asked on regurlar basis is: If have a timestamp column, how do I convert this in a date only prompt. 251
[1] One of the possible solution is this: First Create as truncated date column in your RPD:
[2] using :
[3] on the show dropdown select SQL results. Next edit the SQL to:
SELECT DISTINCT DIM DATE F FACTS.DATE TRUNC FROM BM CP TEST ORDER BY DIM DATE F FACTS.DATE TRUNC
[1] Graphical representation over a period becomes quit tricky. Best solution: Have the ETL people create a valid entry for each day. Good alternative: Create an entry for each day in the repository. First create an alias for the calendar table:
[2] Join this with a COMPLEX join to your fact table 253
[3] Dont forget to restrict the open ended data! DIM DATE.DATEDATE >= AWOL.FROM DATE AND DIM DATE.DATEDATE <= CASE WHEN AWOL.TO DATE IS NULL THEN CURRENT DATE ELSE AWOL.TO DATE END Join this with your regular calendar dimension and set it to outerjoin in the Business model.
[5]
254
[1] Step 1b: If you are using OC4J sync the le with the one in {OracleBI }\oc4j bi\j2ee\home\applicatio ns\analytics\analytics\ res\b mozilla Step 2: restart the presentation server and you webserver. Step 3: Add the execution code to your dashboard:
[2] 255
Dont forget to check the Contains HTML Markup! Step 4: Save your dashboard page and test....
If you look in the conguration guide you will nd that the CASE SENSITIVE CHARACTER COMPARISON parameter in the NQCong le controls the case sensitive search within OBIEE. Be aware that you might be fooled by your database settings. If you are on an Oracle database 10G+ you can use a connection script in the repository to allow case insensitive searches. Go to the connection pool, click on the connection script tab.
[1] 256
Enter:
alter session set NLS SORT=BINARY CI alter session set NLS COMP=LINGUISTIC
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/SaayIZJNPuI/AAAAAAAABaY/mzxy6ELGZzU/s1600-h/image%5B3%5D.png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/SaayJTodb9I/AAAAAAAABag/vKsgEByVfOg/s1600-h/image%5B7%5D.png
On the OTN forums this picture from the Oracle Business Intelligence Enterprise Edition Deployment Guide: 257
[1] It contains the DEFAULT portnumbers used by OBIEE 25: SMTP 2001: Chart Image Server (Corda) <-> Presentationserver 9700: Prim. Cluster Controler <-> Sec. Cluster Controller 9701: BI Server <-> Cluster Controllers 9703: BI Server <-> Presentation Services 9704: HTTP Web Server 9705: Scheduler <-> Presentationserver 9706: Cluster Controllers <-> Presentationserver 9708: Scheduler <-> : Cluster Controllers 9710: Scheduler <-> Presentation Server <-> J2EE 9810: Javahost <-> Scheduler <-> Presentationserver Till Next Time
1. http://lh4.ggpht.com/_qd3TDEvIh4Y/Saap8dUMd4I/AAAAAAAABaQ/UJi7roncW0U/s1600-h/image%5B9%5D.png
258
[1] On the Date level add the next higher level (month) in the Preferred Drill Path:
[2] Do the same for Month (quarter), Quarter (year). Check the result:
[3]
[4] 259
[5] Yeah I know its not perfect ..... Till Next Time
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/SafD_oVAg9I/AAAAAAAABao/TnV2i4oxixw/s1600-h/image%5B3%5D.png 2. http://lh4.ggpht.com/_qd3TDEvIh4Y/SafEAthWr_I/AAAAAAAABaw/qHOwnERnBZY/s1600-h/image%5B7%5D.png 3. http://lh6.ggpht.com/_qd3TDEvIh4Y/SafEBjtgWdI/AAAAAAAABa4/ZujAUxNx_JE/s1600-h/image%5B10%5D.png 4. http://lh6.ggpht.com/_qd3TDEvIh4Y/SafECmLcgFI/AAAAAAAABbA/ujLdoo7GOOg/s1600-h/image%5B13%5D.png 5. http://lh6.ggpht.com/_qd3TDEvIh4Y/SafEDlNc8dI/AAAAAAAABbI/Ab4JgwAztNQ/s1600-h/image%5B16%5D.png
3.3
March
[1] select Calendar from the control dropdown box, if you do it later on it wont be available (undocumented feature ;-) ). Step 2: Alter the column function: CASE WHEN 1=0 THEN CALENDAR.D DATE ELSE TIMESTAMP 1900-01-01 00:00:00 END The CASE WHEN part guarantees validation of the column. Step 3: Set the presentation variable and label
[2] 260
Step 4: repeat step1 Step 5: Alter the column function: CASE WHEN 1=0 THEN CALENDAR.D DATE ELSE TIMESTAMP 2999-12-31 00:00:00 END This has to be dierent from the one used in step 2 since OBIEE uses the default outcome of the formula as internal name for the column. Step 6: Set the presentation variable and label
[3] Step 7: reference the variable in your report: [4] Step 8 : Create the dashboard:
create index dt3 on daytime2(cast (DAYTIME as timestamp)); 2: Create a view on your table casting the date column as TIMESTAMP: create view v daytime2 as (select cast(daytime as timestamp) as daytime from daytime2) Map this view to your RPD and you will, check the explain plan, see that Oracle uses your index. If you have any better / other solutions please let me know! Till Next Time
[1] When playing around with session variables in the repository in the help context you wil nd a reverence to NQSSetSessionValue:
[2] But if your looking for how to use it........ (At least I couldnt nd anything on the net or in the docs.). Anyhow: after logging an SR I was pointed in a direction to nd a solution. The way to use this function is to issue an direct SQL request from a web page by ussing the ?IssueRawSQL?SQL (FI: [3]http://vmobiee:9704/analytics/saw.dll?IssueRawSQL?SQL )
[4] 262
[5] Next you have to format the request like: call NQSSetSessionValue(DataType VariableName=Value;) FI: call NQSSetSessionValue(Float MYSESSIONVAR=11;)call NQSSetSessionValue(String MYSESSIONVAR=Test;) The types allowed are: Integer, String, Float, Date, Time and DateTime.
(passwordhash is the password in reverse) Step 6: Create a Custom Authenticator in your oine RPD:
[1] Step 7: Add the User and Group variable to a init block
[2] Step 8: reboot the bi-server and start testing! Till Next Time
1. http://lh3.ggpht.com/_qd3TDEvIh4Y/SbA584SfG1I/AAAAAAAABdA/_rLQqCOTmgM/s1600-h/image%5B1%5D.png 2. http://lh4.ggpht.com/_qd3TDEvIh4Y/SbA5-Y3OQAI/AAAAAAAABdI/pO7nPgTepm4/s1600-h/image3%5B2%5D.png
Yesterday I was awarded BI consultant 2008 by the visitors of [2]www.bidutch.nl. I would like to thank everybody who voted for me! Results from the past are no warranty for the future, they only make the new challenge bigger.
1. http://www.bidutch.nl/ 2. http://www.bidutch.nl/
year level: select distinct d year, 4 AS DIM LEVEL from d date quarter level: select distinct d quarter, 3 AS DIM LEVEL from d date etc.
[2] 265
In your fact table you add an extra column named dim date level:
[4]
[5]
Add an inner join on your core fact table to your original dimension: 266
[8] set the aggregation level for the level column to MIN:
[10]
[11]
[12]
[13] Be sure to check all your dimension levels! Till Next Time
1. http://lh4.ggpht.com/_qd3TDEvIh4Y/SbEXqI_2BdI/AAAAAAAABdQ/spEcPK79DTs/s1600-h/image%5B3%5D.png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/TCjUPkL6O0I/AAAAAAAAC2w/1zfjOYkTROQ/s1600-h/image%5B7%5D.png 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/TCjUQf8TJkI/AAAAAAAAC24/AphULOFjv-A/s1600-h/image%5B6%5D.png 4. http://lh6.ggpht.com/_qd3TDEvIh4Y/SbEXrdH_P4I/AAAAAAAABdY/9495pZAJNfo/s1600-h/image%5B36%5D.png 5. http://lh3.ggpht.com/_qd3TDEvIh4Y/SbEXsRTsbiI/AAAAAAAABdg/pSfYQZtYfwo/s1600-h/image%5B9%5D.png 6. http://lh6.ggpht.com/_qd3TDEvIh4Y/SbEXtZb_ChI/AAAAAAAABdo/tuIONFOnBJU/s1600-h/image%5B37%5D.png
268
7. http://lh5.ggpht.com/_qd3TDEvIh4Y/SbEXuny5liI/AAAAAAAABdw/krF_aducFO4/s1600-h/image%5B38%5D.png 8. http://lh5.ggpht.com/_qd3TDEvIh4Y/SbEXvqG1MzI/AAAAAAAABd4/EdaULji19jI/s1600-h/image%5B39%5D.png 9. http://lh6.ggpht.com/_qd3TDEvIh4Y/SbEXxUkr_MI/AAAAAAAABeA/CbEw0sIpEPc/s1600-h/image%5B40%5D.png 10. http://lh6.ggpht.com/_qd3TDEvIh4Y/SbEXyRzn_ZI/AAAAAAAABeI/dn7-tOD8mJA/s1600-h/image%5B26%5D.png 11. http://lh4.ggpht.com/_qd3TDEvIh4Y/SbEXzHBOD-I/AAAAAAAABeQ/WEc-FYmxvfo/s1600-h/image%5B41%5D.png 12. http://lh4.ggpht.com/_qd3TDEvIh4Y/SbEX0Y0JW1I/AAAAAAAABeY/IKiRefs4fdw/s1600-h/image%5B42%5D.png 13. http://lh5.ggpht.com/_qd3TDEvIh4Y/SbEX1bjOLrI/AAAAAAAABeg/DaBwvr0ewYM/s1600-h/image%5B43%5D.png
based on the MM/DD/YYYY format. Till Next Time John Minkjan is a principal BI-consultant and OBIEE Product Expert at Ciber in the Netherlands, the text of this article is also published on his personal blog: [1]http://obiee101.blogspot.com/
1. http://obiee101.blogspot.com/
[1] Enable the Use Custom CSS Style enter display:none. Both for the eld and the header. (Be aware the original value is still available in the source of the page!) Till Next Time
1. http://lh4.ggpht.com/_qd3TDEvIh4Y/SbZBksXXWoI/AAAAAAAABfg/xLo4FOeLcxM/s1600-h/image%5B6%5D.png
[3] In the Prex part put: // Set the Google maps api key: <script src=[4]http://maps.google.com/maps?le=api &v=2 &key=ABQIAAAAtghZliBar5ci3sjZR oGRSEtwgT n0GADCjO95K9FWMY2XE2RQZwN8F1TggjSu117aG70pYMI0GfQ type=text/javascript></script> <script type=text/javascript> // Declarations var map = null; var geocoder = null; var marker = null; function initialize() { if (GBrowserIsCompatible()) { // Create the map map = new GMap2(document.getElementById(map canvas)); // Set the center without markers; 13 is the zoom level map.setCenter(new GLatLng(37.4419, -122.1419), 13); // Add the compass and zoom control map.addControl(new GLargeMapControl()); // Add the Map type control map.addControl(new GMapTypeControl()); // Get a new geocoder (needed to convert adresses to coordinates geocoder = new GClientGeocoder(); // Get the ICON for the marker icon0 = new GIcon(); icon0.image = [5]http://www.google.com/maples/marker.png icon0.shadow = [6]http://www.google.com/maples/shadow50.png icon0.iconSize = new GSize(20, 34); icon0.shadowSize = new GSize(37, 34); icon0.iconAnchor = new GPoint(9, 34); icon0.infoWindowAnchor = new GPoint(9, 2); icon0.infoShadowAnchor = new GPoint(18, 25); // Get the Adresses GetMapAdress () } } function showAddress(address,comment) { // Coverts adresses to coordinates and set the marker on the chart if (geocoder) { geocoder.getLatLng ( 271
address, function(point) { if (!point) { alert(address + not found); } else { map.setCenter(point, 13); var marker = createMarker(point,icon0,comment); map.addOverlay(marker); // Opens the last marker marker.openInfoWindowHtml(comment); } } ); } } function createMarker(point, icon, popuphtml) // Creates the marker { var popuphtml = <div id=\popup\> + popuphtml + <\/div>; var marker = new GMarker(point, icon); GEvent.addListener(marker, click, function() {marker.openInfoWindowHtml(popuphtml); }); return marker; } function GetMapAdress () {
} </script> <body onload=initialize();return false onunload=GUnload()> <div id=map canvas style=width: 600px; height: 400px></div> </body> </html>
[9] Till Next Time Edit if you are using IE you migth want to look also here: [10]http://obiee101.blogspot.com/2009/07/obiee-google-maps-alter native-ending.html
1. http://obiee101.blogspot.com/2008/10/obiee-using-google-maps-q-style.html 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/Sb9WMTE0ZZI/AAAAAAAABg4/_7-W0vqBvuM/s1600-h/image%5B3%5D.png 3. http://lh3.ggpht.com/_qd3TDEvIh4Y/Sb9WNgB9cII/AAAAAAAABhA/PAH1TdinXqc/s1600-h/image%5B7%5D.png 4. http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAtgh-ZliBar5ci3sjZR_oGRSEtwgT_ n0GADCjO95K9FWMY2XE2RQZwN8F1TggjSu117aG70pYMI0GfQ 5. http://www.google.com/mapfiles/marker.png 6. http://www.google.com/mapfiles/shadow50.png 7. mailto:/ 8. mailto:/ 9. http://lh6.ggpht.com/_qd3TDEvIh4Y/Sb9WRL2S_jI/AAAAAAAABhI/b4bh09IHqRk/s1600-h/image%5B14%5D.png 10. http://obiee101.blogspot.com/2009/07/obiee-google-maps-alternative-ending.html
[1] 273
[4]
3.4
April
[2]
SELECT case when 1=0 then D2 Market.M01 Market else Market end FROM Sample Sales Union all SELECT case when 1=0 then D2 Market.M01 Market else Area end FROM Sample Sales Union all SELECT case when 1=0 then D2 Market.M01 Market else District end FROM Sample Sales Put the result in a presentation called ltername Create a new promt for the dynamic content in the column put: case when @ {ltername } {Market1 }= Market then D2 Market.M01 Market else case when @ {ltername } {Market1 } = Area then D2 Market.M02 Area else case when @ {ltername } {Market1 }= District then D2 Market.M03 District else D2 Market.M03 District end end end WOW: Its very sensitive on the place of the single quotes!
[1] Next create a prompt and put the result in two presentation variables:[2]
[2] 276
[3] Next use the HTML SHAPE tag to add the coordinates: [4]http://www.faqs.org/docs/htmltut/images/ AREA SHAPE.html <MAP NAME=map1> <AREA HREF=contacts.html ALT=Contacts TITLE=Contacts SHAPE=RECT COORDS=6,116,97,184> <AREA HREF=products.html ALT=Products TITLE=Products SHAPE=CIRCLE COORDS=251,143,47> <AREA HREF=new.html ALT=New! TITLE=New! SHAPE=POLY COORDS=150,217, 190,257, 150,297,110,257> </MAP>
CLAUSE IN THE DB 7331425 : CANNOT CHANGE COLUMN POSITION ON COMBINED REQUEST 7521870 : REPORT FOOTER NOT SHOWING WHEN NAVIGATED FROM A DASHBOARD REQUEST 7642637 : NQSECUDMLGEN EXTENSION FOR LIFE SCIENCES DEVELOPMENT TEAM 7482937 : INCORRECT ESSBASE MDX FOR LOGICAL QUERY WITH OR/AND FILTER ACROSS LEVELS 7189308 : OBIEE BRIEFING BOOK READER NOT WORKING ON WINDOWS VISTA 7373627 : AN LDAP USER THAT RUNS AN IBOT DOES NOT SEED THE CACHE 7462652 : DISCONNECTED SYNC PROCESS LOOPS WITHOUT REACHING AN END 7302600 : CATALOG MANAGER CLEAN-UP OF ORPHANED USER RECORDS 7140673 : OBI PRESENTATION SERVER CRASH IN PIVOT TABLE Till Next Time
[2] 278
[3]
[4]
[9] Now the trick is to enter an SQL statement for which the rst column gives back the value you want to use for your scale marker. In this case: SELECT MIN(F1 Revenue.1-01 Revenue (Sum All) ) saw 0, D0 Time.T02 Per Name Month saw 1 FROM Sample Sales ORDER BY saw 1 Do the same for the MAX marker: SELECT MAX(F1 Revenue.1-01 Revenue (Sum All) ) saw 0, D0 Time.T02 Per Name Month saw 1 FROM Sample Sales ORDER BY saw 1 Play around with the Marker caption, color en line width:
280
[2] In my translation table I added the column and its translations: [3] Based on this column I created a prompt with no label text:
[5] In English:
[6] In French:
[7] You can use the presentation variable for your ltering. Till Next Time
1. http://lh4.ggpht.com/_qd3TDEvIh4Y/SeYcYcNYQoI/AAAAAAAABlM/fohF0LTxTUk/s1600-h/image2.png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/SeYcYwpbJPI/AAAAAAAABlU/hhVZ4OYmbfI/s1600-h/image5.png 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/SeYcZt00_GI/AAAAAAAABlc/j3jvF30QBlI/s1600-h/image10.png 4. http://lh5.ggpht.com/_qd3TDEvIh4Y/SeYcar7kZSI/AAAAAAAABlk/0xSVtgrRTfQ/s1600-h/image14.png 5. http://lh4.ggpht.com/_qd3TDEvIh4Y/SeYcbXNU48I/AAAAAAAABls/9yFtqMDxLoY/s1600-h/image17.png 6. http://lh5.ggpht.com/_qd3TDEvIh4Y/SeYcd6MDXgI/AAAAAAAABl0/NC_e9fkdn80/s1600-h/image20.png 7. http://lh4.ggpht.com/_qd3TDEvIh4Y/SeYceg1DyKI/AAAAAAAABl8/gWM9w7LkDJs/s1600-h/image23.png
281
[2] For product 13 and 14 it isnt clear if the data is missing (NULL) or is zero (0). One way of making it visible is this: Add an extra column which only shows the zeros (case when...):
[3] (In the nal report you can hide it) 282
[7] 283
[1] to this:
[2] It was a question raised on the OTN forum: spa?threadID=886991 284 [3]http://forums.oracle.com/forums/thread.j-
And to be quit honest I didnt think it was possible... But Stijn Gabriels, one of the great OBIEE CSS gurus, came with a very elegant solution. Goto the views.css of the style you are using (S directory) and add td.GFPFilter br { display:none; } If you are using OC4J as webserver sync the les in the J2EE container. Till Next Time
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/Seji__iuvpI/AAAAAAAABnI/0nC4VaURNFc/s1600-h/image%5B2%5D.png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/SejjAu0ORQI/AAAAAAAABnQ/UICo5BfH7FI/s1600-h/image%5B6%5D.png 3. http://forums.oracle.com/forums/thread.jspa?threadID=886991
[2] to this:
[3] based on an OTN entry from Stijn Gabriels. But what if you only want this eect for 1 dashboard page or when you dont have easy access to the views.css? Simple add a text frame to your dashboard page:
[4] And set the content to: <style type=text/css> td.GFPFilter br { display:none; } </style>
[5] dont forget the Contains HTML Markup chechkbox. Till Next Time
1. http://obiee101.blogspot.com/2009/04/obiee-prompts-putting-label-in-front.html 2. http://lh3.ggpht.com/_qd3TDEvIh4Y/Sel6YXGsj-I/AAAAAAAABnY/LiRjMdLbRLI/s1600-h/image%5B2%5D.png 3. http://lh3.ggpht.com/_qd3TDEvIh4Y/Sel6ZE35twI/AAAAAAAABng/uQ4Zt5YPfwQ/s1600-h/image%5B6%5D.png 4. http://lh6.ggpht.com/_qd3TDEvIh4Y/Sel6Z2-lnrI/AAAAAAAABno/W4P_MTpucs8/s1600-h/image%5B9%5D.png 5. http://lh4.ggpht.com/_qd3TDEvIh4Y/Sel6a4mr6XI/AAAAAAAABnw/rXehD23Fslw/s1600-h/image%5B12%5D.png
285
Information Dashboard Design: The Eective Visual Communication of Data by Stephen Few. ([1]http://www.amazon.com/Information-Dashboard-Design-Ee ctiveCommunication/dp/0596100167)
The current version of OBIEE has the (dis)advantage that it doesnt have many charting options. This means we have put in some extra toughts in the way we put the data on the dashboards. In comming period I will post some examples how the ndings of Stephen Few can be implemented within OBIEE. Till Next Time
1. http://www.amazon.com/Information-Dashboard-Design-Effective-Communication/dp/0596100167
[3]
[4]
[5]
[6]
[8] Step 6: Remove the chart box by setting the Major Gridline colour the same as the background.
[9] 289
doesnt give the user enough information, charts tend to take up [12] more dashboard space and space is expensive !. Till Next Time
1. http://obiee101.blogspot.com/2009/04/obiee-final-skills-creating-great.html 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/SetvAPj5U6I/AAAAAAAABn4/85sks_Qa_6w/s1600-h/image%5B2%5D.png 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/SetvA0JeN0I/AAAAAAAABoA/XPdSpIHT5jk/s1600-h/image%5B30%5D.png 4. http://lh5.ggpht.com/_qd3TDEvIh4Y/SetvB0XegaI/AAAAAAAABoI/13WoQHtDePc/s1600-h/image%5B31%5D.png 5. http://lh5.ggpht.com/_qd3TDEvIh4Y/SetvCmAfVnI/AAAAAAAABoQ/9Eyhxw85-RM/s1600-h/image%5B32%5D.png 6. http://lh3.ggpht.com/_qd3TDEvIh4Y/SetvDt41ddI/AAAAAAAABoY/7k8GB1AUYh4/s1600-h/image%5B33%5D.png 7. http://lh5.ggpht.com/_qd3TDEvIh4Y/SetvEhTTy1I/AAAAAAAABog/gIUicMqy3-w/s1600-h/image%5B34%5D.png 8. http://lh6.ggpht.com/_qd3TDEvIh4Y/SetvFYMpYSI/AAAAAAAABoo/4vQJRMEXhvc/s1600-h/image%5B35%5D.png 9. http://lh3.ggpht.com/_qd3TDEvIh4Y/SetvGeHSMfI/AAAAAAAABow/4jvgliyM6L4/s1600-h/image%5B36%5D.png
290
[1] From the release notes: Oracle BI Enterprise Edition Version 10.1.3.4.1 contains no new features. However, Oracle BI Publisher Version 10.1.3.4.1 contains new features. For more information about the new Oracle BI Publisher features, refer to the Oracle Business Intelligence Publisher New Features Guide. Release 10.1.3.4.1 of Oracle Business Intelligence Enterprise Edition includes several new features for Oracle BI Publisher. These are outlined in the following list andexplained in detail in the Oracle Business Intelligence Publisher New Features Guide: Support for Oracle WebLogic Server 10.3 Extended Support for Single Sign-On Providers Automatic Refresh of LDAP Cache Support for Siebel CRM Security Support for Secure File Transfer Protocol (SFTP) for Burst Reports Data Model Enhancements Scheduler Support for JNDI Connection Pools Support for Expressions to Calculate Date Parameters RTF Template Enhancements Remove Logos and Links from the BI Publisher Header Disable Access to Guest Page for Unauthorized Users Updates to the BI Publisher Web Service The 10.1.3.4.1 release of the Oracle Business Intelligence Enterprise Edition introduces no new features for BI Oce. This download seems to be mainly intressting if you using BI-publisher or want to keep up to date with patches. Till Next Time
1. http://lh3.ggpht.com/_qd3TDEvIh4Y/SfKxdpTKXRI/AAAAAAAABqA/6XIX88_4HpE/s1600-h/image%5B3%5D.png
[1] They used the old sample sales instead [2]http://obiee101.blogspot.com/2009/01/obiee-sample-sales.html Its alive: of the extended:
[4] (duh.... Its pointing to a non existing repository......) Still a bad out of the box example in my opinion. Till Next Time
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/SfLG0yvL7sI/AAAAAAAABqQ/a6uLJLNw9AM/s1600-h/image%5B4%5D.png 2. http://obiee101.blogspot.com/2009/01/obiee-sample-sales.html 3. http://lh6.ggpht.com/_qd3TDEvIh4Y/SfLKptqdnEI/AAAAAAAABqY/lIikm73Rmtg/s1600-h/image%5B8%5D.png 4. http://lh4.ggpht.com/_qd3TDEvIh4Y/SfLOc2N2UgI/AAAAAAAABqg/Sy3BKslQgC8/s1600-h/image%5B12%5D.png
[1] This is control by the pcxml le belonging to the Graph type: Open the le in an editor and look for the DataLabels tag. Edit the last to numbers (hex) of the BGColor subtag to 00 292
[2] (sync the le with the one in the OC4J if used). Restart everything. Till Next Time
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/SfLrsTYBKDI/AAAAAAAABqo/JpjWsAMzmDc/s1600-h/image%5B2%5D.png 2. http://lh3.ggpht.com/_qd3TDEvIh4Y/SfLrtMiwu3I/AAAAAAAABqw/VrZgLIlvE0w/s1600-h/image%5B5%5D.png
[2] It should simple read Criteria which means the same in Dutch as English. The text can be found in searchmessages.xml. Copy the le to your customMessages directory in your language directory.
293
[2] With the help of [3]Christi@n I recovered from my brain freeze and started editing a copy of languagenames.xml in the general customMessages folder:
[4] A quick reboot of the presentation server a the problem was xed:
[5] Well not really......As most students in the Netherlands I dropped my French classes ASAP in high school. My knowledge of the French language is restricted to Papa fume un pipe dans le jardin... (Dad smokes a pipe in the garden). Thankfully one of the best names in the Dutch OBI community Stijn came to the rescue and prevented this faux pas : In English language names are written with a capital, but not in French. Changing franais to Franais is actually incorrect, because it means something dierent. To be more clear: franais means French and un Franais means a Frenchmen. This explains why some language names are written without a capital. A quick conference with the customer reviled that the issue was raised by a Dutchmen who thought the French branches would be oended if there language wasnt starting with a Capital. Till Next Time
1. http://en.wikipedia.org/wiki/MoSCoW_Method 2. http://lh6.ggpht.com/_qd3TDEvIh4Y/SfRruL_JNbI/AAAAAAAABrw/RZDeHrHsJFE/s1600-h/image%5B1%5D.png 3. mailto:Christi@n 4. http://lh4.ggpht.com/_qd3TDEvIh4Y/SfQsai9lrfI/AAAAAAAABrg/cgu3a5FUmy8/s1600-h/image%5B5%5D.png 5. http://lh5.ggpht.com/_qd3TDEvIh4Y/SfQsbYL7zJI/AAAAAAAABro/ApsoQy5tKt0/s1600-h/image%5B10%5D.png
3.5
May
[1]
[2] It gives two dimensions (Brand & Market), two measures (Revenue and Revenue Yago), there comparision (Revenue Yago / Revenu) The OBIEE buble chat has 5 elements:
[3] [4] [5] [6] [7] [8] : X-axis : Y-axis : Dimension 1 : Dimension 2 (optional) : Comparison value
[10] On a personal note I nd this a horrible chart.... If your really need this much info at once try splitting it into two graphs:
[11] 296
[2] 297
[3] The colour of the Even row is control by views.css: TABLE.ResultsTable TD.ECell
[4] The colour of the Odd rows is controlled by the default background-colour of the table:
[5] But chancing this will also change the normal background-color of the cell. You can avoid this by adding a extra TABLE.ResultsTable TD.OCell just below the TD.ECell in the views.ccs:
[6] That way you can use both styles without them inuencing each other: 298
(2009-05-05 21:14)
This one from Tim (the Bip master) really saved my day: [1]http://blogs.oracle.com/xmlpublisher/2009/04/template builder woes 1.html Till Next Time
1. http://blogs.oracle.com/xmlpublisher/2009/04/template_builder_woes_1.html
[1] Besides lovely T-shirts an awfully lot of good presentations, new info and real indept discussions! Presentations on Thursday may 14th: Craig Stewart: 299
Craig showed us how to tune / customize the Oracle Data Integrator to your own needs. Edward Roske: Edward is the godfather of Essbase. He gave us some got workings on the Essbase internals, Sparse en Dense Blocks. Wen to use block storage and wen to use aggregate storages. Check out his blog at: [2]http://looksmarter.blogspot.com/ Mark Rittman: Leave it up to Mark to educate us how on some basic concepts on the database like compression, partioning and materialized views can save us storage space and processing time! John Minkjan: My own story on OBIEE cache management, my basic conclusion is still dont use it, try to bring it to the DB! Venkat Janakiraman: Writer of on the most inuential OBIEE blogs, this guy eats and breaths OBI and Essbase. He gave a good presentation how with simple means the security between OBIEE and Essbase can be kept in sync. Adam Bloom: Some good info on how setting the loglevel to 5 can help identifying which processes run amok in the BI-server. Andreas Nobbmann: UDML is getting more and more important as an exchange mechanism between the BIserver and the outside world. Andreas showed us how to use the dierent tools for manipulating UDML A very good meal at Due South: This place is really on its way to earn a Michelin star. If your in Brighton give it a try: [3]http://www.duesouth.co.uk/ Presentations on Friday May 15th: Mike Durran: Mike give us a live glance at the new stu in OBIEE 11G. The new graphs look very impressive. (Stephen Few would turn in his grave if he was dead......). We tried to pressure him on a release date, but he wouldnt give in :-( Emiel van Bockel: Emiel gave us the story from the architect point. He proved that you dont always need a star schema. Especially with OBIEE its possible to use other modelling technique. Emiel showed us also that storing history doesnt always have to be SCD2. 300
Maarten-Jan Kampen: Filling in for Daan Bakboord Maarten-Jan showed us how you can use Oracle mapviewer integrated with OBIEE Adrian Ward: Adrian gave us some good tips on how to set up OBIEE in an international environment. Antony Heljula: He is the guy you should speak to if you want to integrate SOA with OBIEE. Antony showed us that SOA is as hard as we think and can be made operational within the hour. Peter Brink: Cube Organized views in the Oracle DB are relatively new and therefore unknown. Still you should check them out if your not ready to go to Essbase (yet). All in all a successful event and certainly one I will go to next time. Lots of indept discussions with some of the Oracle BI frontrunners. Till Next Time
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/ShBDwpm3ClI/AAAAAAAABuc/h5MyqOBcDMQ/s1600-h/PICT2190%5B4%5D.jpg 2. http://looksmarter.blogspot.com/ 3. http://www.duesouth.co.uk/
[1] NQS General Prex VMVGGOBI Originating Server Name 733547 Days passed since 1-1-0000 40458 Seconds passed since last midnight 00000006 Incremental number since last BI server start: Till Next Time
1. http://lh3.ggpht.com/_qd3TDEvIh4Y/ShKPWJhEP1I/AAAAAAAABuk/6Hd5kA-mk7E/s1600-h/image5.png
301
#003366 #f2f5f9 #000066 #000000 #666666 #F7F7F7 #CCCCCC #DDDDDD #999999 #a3c2df #3c3c3c #2b7c92 #F5F5F5 #BF2C2C #FBEA7B #54A36A #DEDEDE #FFFFE1 #CCCC00
[1]
[2] You can nd it in the left top corner of the prompt editor:
[3] 303
3.6
June
install
on
VM
working:
After adding there logo to the banner we ran into the problem that there was a lot of space wasted because the logo was much smaller the the original Oracle one.
Turns out that there is an opaque hidden image controlling the push to the right. This controled by: {s name }\portal\portallogo.gif. If 304
you resize the width of this image you can get a much smaller gap: Till Next Time
[1] OBIEE GRAPHS.VBS John Minkjan [2]Http://www.obiee101.blogspot.com Get the all the OBIEE images to pipe the output into the le use: cscript OBIEE GRAPHS.vbs > OBIEE GRAPHS.HTML Declarations Redim FolderList(0)A at list of the directory subtree FolderList(0) = E:\OracleBI\web\appextbackslashres\s oracle10 This part of the script walks the directory structure and stores all of the folder paths in the FolderList Array. FolderIndex = 0 Do Until FolderIndex > Ubound(FolderList) Set fso = CreateObject(Scripting.FileSystemObject) Set f = fso.GetFolder(folderList(folderindex)) If f.subfolders.count > 0 Then 305
For Each folder In f.subFolders if folder.attributes <> 22 Then Exclude hidden system folders redim preserve FolderList(Ubound(FolderList)+1) FolderList(ubound(FolderList)) = folder.path End If Next End If FolderIndex = FolderIndex + 1 Loop Set up a header for the output wscript.echo <BODY> This part of the script Works through the list of folders and outputs the data for each le wscript.echo <table border=1> for n = 0 to ubound(FolderList) Set fso = CreateObject(Scripting.FileSystemObject) Set f = fso.GetFolder(FolderList(n)) For Each le In f.Files if (right(le.Name,3) = jpg or right(le.Name,3) = gif) and instr(le.parentfolder,b mozilla 4) = 0 then wscript.echo <TR> wscript.echo <TD> wscript.echo le.parentfolder &\ & le.Name wscript.echo </TD> wscript.echo <TD> wscript.echo <IMG SRC= & le.parentfolder &\ & le.Name & /> wscript.echo </TD> wscript.echo </TR> End if Next Next wscript.echo </table> wscript.echo </BODY> Till Next Time
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/SjapKNFrFfI/AAAAAAAAB4o/xnekeDBKbr8/s1600-h/image%5B3%5D.png 2. http://www.obiee101.blogspot.com/
Read Users.VBS John Minkjan http:// [1]http://www.obiee101.blogspot.com/ Get all the users from a repository 1: Make an UDML export of the PRD using nqgenudml.exe 2: Change the lename/location in this script 3: Run the script from the command line cscript Read Users.VBS > users.txt Set objFSO = CreateObject(Scripting.FileSystemObject) point this to your UDML EXPORTSet 306
objFile = objFSO.OpenTextFile(E:\names.txt, ForReading) Const ForReading = 1 Dim arrFileLines() dim strRLinedim strTemp1dim strTemp2 i=0 Do Until objFile.AtEndOfStream strRline = objFile.ReadLine if left(strRline,12) = DECLARE USER then Redim Preserve arrFileLines(i) arrFileLines(i) = strRline i=i+1 end if Loop objFile.Close Then you can iterate it like this For Each strLine in arrFileLines strTemp1 = MID(strLine ,15 , 50) IF instr(strline, } ) >0 THEN strTemp2 = MID(strLine , instr(strline, {)+ 1, (instr(strline, }) - (instr(strline, {)+ 1))) ELSE strTemp2 = END IF WScript.Echo MID(strTemp1 ,1 , instr(strTemp1, )-1) &; & strtemp2 Next
[1]
[2] 307
The credentials were ok, so the problem must be something else. Checking the ODBC manager revealed that he was using a ODBC with a space in the name Server 01
[3] A close look a the connection selection screen of the admin tool revealed that OBIEE translated the space to an underscore:
[4] Seems you can t use space in the ODBC connection, use underscores instead. Till Next Time
1. http://lh3.ggpht.com/_qd3TDEvIh4Y/Sjv7iaaKw0I/AAAAAAAACAM/lBrOD3YU7Y8/s1600-h/image%5B11%5D.png 2. http://lh6.ggpht.com/_qd3TDEvIh4Y/Sjv7i7lXa7I/AAAAAAAACAU/tK0rJMzt73Q/s1600-h/image%5B5%5D.png 3. http://lh3.ggpht.com/_qd3TDEvIh4Y/Sjv7js-JQiI/AAAAAAAACAc/GsP9CAIiaVQ/s1600-h/image%5B8%5D.png 4. http://lh3.ggpht.com/_qd3TDEvIh4Y/Sjv7kM0nyNI/AAAAAAAACAk/pvXIxGNPbYk/s1600-h/image%5B15%5D.png
OBIEE Get all users and roles from RPD (2009-06-22 19:49)
In this post [1]http://obiee101.blogspot.com/2009/06/obiee-get-all-users-from -rpd.html I showed you how to get the users from the RPD. Taking that as a starting point its a small step to get users and the roles they have and put the export in an XLS: 308
Read Usergroups.VBSJohn Minkjanhttp:// [2]http://www.obiee101.blogspot.com/ Get all the users from a repository 1: Make an UDML export of the PRD using nqgenudml.exe 2: Change the lename/location in this script 3: Run the script from the command line cscript Read Usergroups.VBS > users.txt 4: Put the export in a XLS Pivot table Set objFSO = CreateObject(Scripting.FileSystemObject) point this to your UDML EXPORT Set objFile = objFSO.OpenTextFile(E:\usergroup.txt, ForReading) Const ForReading = 1 Dim arrFileLines() dim strRLine dim strTemp1 dim strTemp2 dim strTemp3 dim intRoles intRoles = 0 i=0 WScript.Echo USER NAME;FULL NAME;ROLE;COUNT Do Until objFile.AtEndOfStream strRline = objFile.ReadLine if left(strRline,12) = DECLARE USER then Redim Preserve arrFileLines(i) strTemp1 = MID(strRLine ,15 , 50) strTemp1 = MID(strTemp1 ,1 , instr(strTemp1, )-1) IF instr(strRline, } ) >0 THEN strTemp2 = MID(strRLine , instr(strRline, {)+ 1, (instr(strRline, }) - (instr(strRline, {)+ 1))) ELSE strTemp2 = END IF arrFileLines(i) = strTemp1 &; & strtemp2 intRoles = 1 i=i+1 end if if intRoles >= 1 then if instr(strRline,HAS ROLES ( ) >0 then intRoles =2 end if if intRoles =2 and instr(strRline,HAS ROLES ( ) =0 then strTemp3 = MID(strRline,instr(strRline, )+1,50) strTemp3 = MID(strTemp3,1,instr(strTemp3, )-1) WScript.Echo arrFileLines(i-1) &; & strTemp3 &;1 end if if intRoles =2 and instr(strRline,) ) >0 then intRoles = 0 end if end ifLoop objFile.Close
309
[1] Of course the answer can be found the manual on page 18&.. It is controlled by the value of : AllowRememberPassword in the instancecong.xml. set it to true between the serverinstance tags to switch it on:
3.7
July
{webmessage name=kmsgDashboardAlternateFormats } {span class=DashboardFormatLinks } {?xml:namespace prex = sawm / } {sawm:param insert=1 } {/sawm:param } {/span } {span class=DashboardFormatLinks } {sawm:param insert=2 } {/sawm:param } {/span } {span class=DashboardFormatLinks } {sawm:param insert=3 } {/sawm:param } {/span } {/webmessage } 1 = refresh 2 = print 3 = Brieng Just comment out it in your version controllemessages.xml in th CustomMessage folder. Till Next Time
[2] Step 2: In the CompagnyImages Folder create a subfolder called images (or whatever other name you like!)
[3] Step 3: Put all the image you want to use in the images folder, they can any web recognized format (jpg, gif, png&.)
[4] Step 4: Go back to your CompagnyImages Folder and add a index.gif picture, as far asa I know this has to be a gif (lowercase). This will be the category in the conditional format selector:
[5] Step 5: If you are using OC4J BI sync the folder {OracleBI }\web\app\resashs {StyleName }\meters the one in {OracleBI }\oc4j bi\j2ee\home\applicatio ns\analytics\analytics\ res\s {StyleName }\meters Step 6: Restart the presentation server and the application server (OC4J) Step 7: 312
[2] Provides some good info on what is going on. Till Next Time
1. http://localhost:9704/analytics/saw.dll?perfmon 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/SlRln1bV9VI/AAAAAAAACBs/OJsG9ly_Jck/s1600-h/image%5B2%5D.png
[1] A crude and simple way is to edit the dashboardtemplates.xml: [2]<WebMessage name=kuiPersonalizeLink> [3]<HTML> [4]<span class=minibuttonOn style=display:none> [5]<a href=javascript:void(null) onclick=return NQWPopupMenu(event,idPersonalizationMenu,null,top)> <sawm:messageRef name=kmsgDashboardPageOptionsMenu/> <img src=fmap:Views/sortdesc.gif border=none/> </a> </span> <br/> </HTML> </WebMessage> 314
It changes this
[3] tag of the instancecong.xml Till Next Time Note: Have a look at Stijn his comment on 508 Compliancy
[1] Its July 16th 2009 ................................ :-) Till Next Time Note: seems to be working again...
1. http://1.bp.blogspot.com/_qd3TDEvIh4Y/Sl7lpWWj7iI/AAAAAAAACC8/tfyfOcTwcOQ/s1600-h/OTN_Down.bmp
[1] (Yeah I know there better ways :-) ) Till Next Time Stijn found the original post on this subject: http://obiee101.blogspot.com/2008/08/obiee-dierence-between-two-ro ws.html
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/Smc2PtKMlbI/AAAAAAAACDE/-wX-mEniwns/s1600-h/image3.png
[1] In this article: [2]http://oraclebiblog.blogspot.com/2009/07/how-to-hide-saved- lter-view-link.html John Andrzejek shows a way of doing this by editing a CSS le. I prefer editing the viewmessages.xml. Remove the text between the kmsgViewSavedFilterAnchorText tags. (you have to do this for every languages you use).
[3] Till Next Time Edit: Stijn found the orignal : http://obiee101.blogspot.com/2008/08/obiee-dierence-between-two-ro ws.html
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/SmdJCEtGUrI/AAAAAAAACDM/Fxxqmn9HGE4/s1600-h/image[2].png 2. http://oraclebiblog.blogspot.com/2009/07/how-to-hide-saved-filter-view-link.html 3. http://lh3.ggpht.com/_qd3TDEvIh4Y/SmdJC8yo9aI/AAAAAAAACDU/Epj1LWOUexo/s1600-h/image[5].png
317
[1] Had to clean the attic at my parents, and found one my rst computers. Wonder if OBIEE will run on it :-) &..
1. http://lh3.ggpht.com/_qd3TDEvIh4Y/SmdO9H4DfeI/AAAAAAAACDc/Wci-Ql5KUko/s1600-h/image%5B3%5D.png
[1]http://en.wikipedia.org/wiki/Business intelligence Before you start with anything get up to speed with dimensional modeling.
[2]http://www.kimballgroup.com/ (Get familiar with the works of Ralph Kimball) Brush up your modeling capabilities, ADAPT is a good method to start with:
[3]http://www.symcorp.com/downloads/ADAPT white paper.pdf Read up on your Data Warehouse / BI basics: [4]http://blogs.oracle.com/bimadeez/2010/06/data guide.html warehousing architect a beginners
Get a clean (virtual) machine and rst install an Oracle database. The 10g express version is OK for starters. 318
[8]http://www.oracle.com/technology/documentation/bi ee.html If you have everything installed work trough the OBE tutorials on OBIEE.
[9]http://www.oracle.com/technology/obe/obe bi/bi ee 1013/index.html Don t not only copy the click but be sure you understand what is happening! Download and install the extended sales sample RPD and CAT. Dissect every report and dashboard to understand how the reports work.
[10]http://download.oracle.com/technology/products/bi/les/orac le bi sample analysis setup les.zip Have a good look around at the OTN forums. Most questions have been asked before.
OBIEE forum: [11]http://forums.oracle.com/forums/forum.js pa?forumID=378 OBISE forum: [12]http://forums.oracle.com/forums/forum.js pa?forumID=404 Read the works of Stephen Few on how to design a good dashboard from the visual standpoint:
[13]http://www.perceptualedge.com/articles/Whitepapers/Common Pitfalls.pdf [14]http://www.amazon.com/Information-Dashboard-Design-Eective -Communication/dp/0596100167 Learn to create reports and dashboard which people need, which is often completely dierent of the reports and dashboard they intentionally asked for&
[15]http://www.orm.net/ 319
Congure your OTN account so that you watch certain users. Looking around at the forum you soon learn which users give the most valuable answers. Start following the OBIEE related blogs. At this moment there are about 10 your really need to watch. (Check my blog list). Must read material:
[16]http://greatobi.wordpress.com/2010/01/07/can-you-just-turn-a nswers-on/ {Je McQuigg } [17]http://greatobi.wordpress.com/2009/08/24/using-report-specs- for-requirements/ {Je McQuigg } [18]http://exoticexpedition.wordpress.com/2010/01/15/6-guiding-p rinciples-of-obiee-dashboard-design/ {Deepanshu Mehta } [19]http://it.toolbox.com/blogs/eye-on-obi/understanding-the-ora cle-bi-server-see-the-light-31891 {Gerard Braat } If you need more practices check out the Oracle Learning Library:
20100413: Added link to Oracle Learning Library. 20091008: Added link to ADAPT modelling method. 20100107: Added must read material. 20100515: Added more must read material 20100630: Added more must read material
1. http://en.wikipedia.org/wiki/Business_intelligence 2. http://www.kimballgroup.com/ 3. http://www.symcorp.com/downloads/ADAPT_white_paper.pdf 4. http://blogs.oracle.com/bimadeez/2010/06/data_warehousing_architect_-_a_beginners_guide.html 5. http://www.oracle.com/technology/software/products/database/index.html 6. http://www.oracle.com/technology/obe/11gr1_db/index.htm 7. http://www.oracle.com/technology/software/htdocs/devlic.html?url=/technology/software/products/ias/ htdocs/101320bi.html 8. http://www.oracle.com/technology/documentation/bi_ee.html 9. http://www.oracle.com/technology/obe/obe_bi/bi_ee_1013/index.html 10. http://download.oracle.com/technology/products/bi/files/oracle_bi_sample_analysis_setup_files.zip 11. http://forums.oracle.com/forums/forum.jspa?forumID=378 12. http://forums.oracle.com/forums/forum.jspa?forumID=404 13. http://www.perceptualedge.com/articles/Whitepapers/Common_Pitfalls.pdf 14. http://www.amazon.com/Information-Dashboard-Design-Effective-Communication/dp/0596100167 15. http://www.orm.net/ 16. http://greatobi.wordpress.com/2010/01/07/can-you-just-turn-answers-on/ 17. http://greatobi.wordpress.com/2009/08/24/using-report-specs-for-requirements/ 18. http://exoticexpedition.wordpress.com/2010/01/15/6-guiding-principles-of-obiee-dashboard-design/ 19. http://it.toolbox.com/blogs/eye-on-obi/understanding-the-oracle-bi-server-see-the-light-31891 20. http://apex.oracle.com/pls/apex/f?p=OTNCR:1:0
320
CASE WHEN DAY DATE <SYSDATE 21 then 00-PREVIOUS ELSE CASE WHEN DAY DATE > SYSDATE + 7 THEN 02-NEXT ELSE 01-CURRENT END END AS P21MINT7PLUSPERIOD
This will give 00-PREVIOUS , 01-CURRENT or 02-NEXT for P21MINT7PLUSPERIOD. It s important that you created this in the physical layer. The TODATE function doesn t like dynamical column in the Business Model Layer. Next when created an alternative hierarchy: TIME.TOTAL => TIME.P21MINT7PLUSPERIOD => TIME.DAY. Now we could use the TODATE function like TODATE(FACT, P21MINT7PLUSPERIOD) Which gives us a daily moving period. Till Next Time
3.8
August
Sometimes you are using a trick for such a long time, you automatically suspect the whole world to know it. As you might know the internal communication protocol for the BI-server is UDML. A simple way of getting the UDML for a column is doing a CTRL-C of the column and pasting it into a text editor like notepad:
[1]
[2] How can an RPD developer make use of this feature? Well the trick also works the other way around. If you need to make a lot of variations of column (FI: if you need to make TimeSeries variations for all you measures) simple do some clever Find and Replace (CTRL-H) in the notepad copy. 322
[5] This can save you literally hours of tedious clicking in the RPD. Till Next Time
1. http://lh4.ggpht.com/_qd3TDEvIh4Y/SnVmyIjC7KI/AAAAAAAACDk/IKwA4_Ql-aA/s1600-h/image%5B15%5D.png 2. http://lh3.ggpht.com/_qd3TDEvIh4Y/SnVmy0Bq5NI/AAAAAAAACDs/11DJUnEH7cs/s1600-h/image%5B16%5D.png 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/SnVmztn93QI/AAAAAAAACD0/wGKJMTvfm8I/s1600-h/image%5B17%5D.png 4. http://lh3.ggpht.com/_qd3TDEvIh4Y/SnVm0ZvkWQI/AAAAAAAACD8/cD4JydLMOTA/s1600-h/image%5B18%5D.png 5. http://lh6.ggpht.com/_qd3TDEvIh4Y/SnVm1MbsQ9I/AAAAAAAACEE/gfZSbASKsa8/s1600-h/image%5B31%5D.png
1. http://www.obiforums.com/
[1]
[2] But how can we compare this to the rest? Let s add an extra column which gives us the rank number if it s between 1 and 10, else 99.
[3]
case when RANK(F1 Revenue.1-01 Revenue (Sum All)) <= 10 then RANK(F1 Revenue.1-01 Revenue (Sum All)) else 99 end
[5] case when RANK(F1 Revenue.1-01 Revenue (Sum All)) <= 10 then Cast( RANK(F1 Revenue.1-01 Revenue (Sum All)) as char)|| - ||D1 Customer.C1 Cust Name else 99 - The Rest end Check the results:
[6] Now the big trick, switch to pivot table and arrange the columns like this: 325
[1]
[3]
[4] By default the dashboard will return no rows. It a good custom to set the default no rows text: 326
[5]
[1]
to this: 327
The problem is that the presentation server converts the HTML br symbol to htmltext ( & g t) so the google maps api doesnt regonise it. This can be bypassed by using the javascript replace command:
comment.replace(/, /g, ,<> )); (without the spaces) the code to create the marker now would look like this:
SELECT TIMES.CALENDAR YEAR saw 0 FROM BM SALES WHERE LOCATE( noprompt,VALUEOF(NQ SESSION.GROUP)) > 0 ORDER BY saw 0 328
[2]
[3] Based on being a member of nogroup the prompt will be available: User1:
[4] User2:
1. http://docs.google.com/fileview?id=0B8vnN_oQ0v04MTYwNzI1ODktYmZkNy00MzJlLTkwNGUtYmU3ZjgwMDc3OTQ4&hl=en
[1]
[2] Switch to a narrative view. In the prex part put: <html> <head> <title></title> <meta http-equiv=Content-Type content=text/html; charset=utf-8> <script src=http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2 ></script> <script> var map = null; var count = 0; var adr = new Array(); var cmt = new Array(); var Center = new VELatLong(52, 6); var ZoomLevel = 7; function GetMap() {
adr[@1]=@3;cmt[0]=@2;
map = new VEMap(myMap); map.LoadMap(); map.SetCenterAndZoom(Center, ZoomLevel); FindLocation(adr[0]); } function FindLocation(searchstr) { if (searchstr != ) { map.Find(null, searchstr, null, null, null, null, false, null, null, false, AddPin); } } function AddPin(layer, resultsArray, places, hasMore, veErrorMessage) { if(places.length > 0) { var shape = new VEShape( VEShapeType.Pushpin,places[0].LatLong); shape.SetTitle(places[0].Name); //alert(comments[count]); shape.SetDescription(cmt[count]); map.AddShape(shape); map.SetCenterAndZoom(Center, ZoomLevel); } count++; if(count<adr.length) FindLocation(adr[count]); } </script> </head> <script src=http://code.jquery.com/jquery-latest.js type=text/javascript></script> <script type=text/javascript> $(document).ready( function() {GetMap();return false; } ); </script> <body> <div id=myMap style=position:relative; width:800px; height:600px;></div> </body>
[3]
[4] I personally nd this webservice slower then the one from Google, but maybe some better coding could x that. If you have any ideas, please let me know. Till Next Time
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/Sohn9b7LAiI/AAAAAAAACG4/hHgkb7dVFjg/s1600-h/image[6].png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/Sohn-GhgNTI/AAAAAAAACHA/atxoUGjR4-Y/s1600-h/image[7].png 3. http://lh3.ggpht.com/_qd3TDEvIh4Y/Sohn-hTsmeI/AAAAAAAACHI/9e_gN1ZTRAQ/s1600-h/image[11].png 4. http://lh3.ggpht.com/_qd3TDEvIh4Y/Sohn_qlYK2I/AAAAAAAACHQ/y8Up2pTBisw/s1600-h/image[15].png
3.9
September
[1] Please be patient or post urgent questions at the OTN forum: [2]http://forums.oracle.com/forums/forum.jspa?forumID=378 EDIT: 19/09/2009 Sort of feeling better now, still got the snies. Thanks everybody for the wishes! Till Next Time
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/Sqz8FaWoGlI/AAAAAAAACHY/ifzokz60Lg0/s1600-h/ill%5B3%5D.jpg 2. http://forums.oracle.com/forums/forum.jspa?forumID=378
332
333
922101341&plat_lang=912P&patch_num_id=1104095&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=8284585&aru=11758316&release= https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=8796912&aru=11740894&release= https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=8669206&aru=11667148&release= https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=8743856&aru=11613091&release= https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=8685156&aru=11602487&release= https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=8650261&aru=11588395&release= https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=8685120&aru=11570547&release= https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=8633968&aru=11512244&release= https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=8616993&aru=11446193&release= https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=6702999&aru=11446270&release= https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=8611209&aru=11435901&release= https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=8238481&aru=11399535&release= https://updates.oracle.com/ARULink/PatchDetails/process_form?patch_num=8439796&aru=11383294&release= 922101341&plat_lang=912P&patch_num_id=1129620&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 922101341&plat_lang=912P&patch_num_id=1127918&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 922101341&plat_lang=912P&patch_num_id=1121595&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 922101341&plat_lang=2000P&patch_num_id=1116704&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 922101341&plat_lang=912P&patch_num_id=1114790&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 922101341&plat_lang=912P&patch_num_id=1114789&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 922101341&plat_lang=912P&patch_num_id=1112085&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 922101341&plat_lang=912P&patch_num_id=1108436&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 922101341&plat_lang=912P&patch_num_id=1103463&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 922101341&plat_lang=912P&patch_num_id=1103471&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 922101341&plat_lang=912P&patch_num_id=1102657&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 922101341&plat_lang=912P&patch_num_id=1099646&email=john.minkjan%40ciber.nl&userid=ml-491067.993& 922101341&plat_lang=912P&patch_num_id=1098237&email=john.minkjan%40ciber.nl&userid=ml-491067.993&
[1] I never had any use for it until I saw some entries by Nicolas and @lex on some secret procedures. [2]http://gerardnico.com/wiki/dat/obiee/presentation service/obiee nqs drill [3]http://siebel-essentials.blogspot.com/2009/08/oracle-bi-serve r-nqs-procedures.html It appears to by a demo/check tool to test your sql when developing a application which uses a ODBC connection to the BI-server. I couldn t nd any documentation, so tips pointers are welcome. After starting the application you have to click: 334
[5] The usage of the database eld is unclear for me at the moment. From the utility menu you can directly test your BI-server sql:
[6]
[7] From the View Schema you get an very unusable info of the catalog:
[9] It seems this is a R &D/Q &D tool for the development team which somehow made it s way into the production release. I you have some more info or usage- for it please let me know. Till Next Time
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/SrAYglsGqZI/AAAAAAAACHg/SyaXw39_H8E/s1600-h/image2.png 2. http://gerardnico.com/wiki/dat/obiee/presentation_service/obiee_nqs_drill 3. http://siebel-essentials.blogspot.com/2009/08/oracle-bi-server-nqs-procedures.html 4. http://lh6.ggpht.com/_qd3TDEvIh4Y/SrAYhWn07dI/AAAAAAAACHo/asuM8Pj3b0g/s1600-h/image5.png 5. http://lh5.ggpht.com/_qd3TDEvIh4Y/SrAYh1fZnTI/AAAAAAAACHw/Vxlq_3aZVZc/s1600-h/image8.png 6. http://lh5.ggpht.com/_qd3TDEvIh4Y/SrAYinZe3vI/AAAAAAAACH4/ku60vMlB3VM/s1600-h/image11.png 7. http://lh5.ggpht.com/_qd3TDEvIh4Y/SrAYjX_LECI/AAAAAAAACIA/y2eQ6IHurUU/s1600-h/image14.png 8. http://lh6.ggpht.com/_qd3TDEvIh4Y/SrAYkM4tDiI/AAAAAAAACII/5GeiIR8KleQ/s1600-h/image17.png 9. http://lh4.ggpht.com/_qd3TDEvIh4Y/SrAYk8X4JYI/AAAAAAAACIQ/SjpJMZdjAZ8/s1600-h/image20.png
We ran the command: export LD_PRELOAD=/path/to/libibmldap.so Then we restarted the BI Server and Presentation services, and the problem went away! This article was original posted on the Kevin C. oraclebi blog. [2]http://obiee101.blogspot.com/2009/09/obiee-blog-lost.html Till Next Time
1. mailto:%27@%27 2. http://obiee101.blogspot.com/2009/09/obiee-blog-lost.html
See:
[1] comes along, and most of the time the conclusion is that it can t be done without some serious JS hacking. Here is a workaround which takes a little bit less eort: First create an extra column containing your ToolTip text and column header like:
<div title=This text explains the contence of the column>1-01 Revenue (Sum All)</div>
[4] Till Next Time Edit: Here is an even quicker method: [5]http://obieepractice.blogspot.com/2008/11/column-headerooltip -mouse-over.html
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/SrjRZZjQNvI/AAAAAAAACI8/y5NaC2UFndM/s1600-h/image[3].png 2. http://lh3.ggpht.com/_qd3TDEvIh4Y/SrjRkelVFEI/AAAAAAAACJE/9p4Et5gshm0/s1600-h/image[15].png 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/SrjRwKVcHeI/AAAAAAAACJM/E1f0Zi5ID-k/s1600-h/image[11].png 4. http://lh4.ggpht.com/_qd3TDEvIh4Y/SrjR9rxpDfI/AAAAAAAACJU/596U1By7SqQ/s1600-h/image[19].png 5. http://obieepractice.blogspot.com/2008/11/column-headerooltip-mouse-over.html
<ReportAggregateEnabled>true</ReportAggregateEnabled> Make sure you don t accidentally put this inside an element nested inside <ServerInstance>, or it won t work.
Save instancecong.xml, and restart your BI Server and Presentation service. Now, the correct amount should be shown for the ltered Grand Total variance: 338
[3] This was previously a bug in OBIEE that was addressed by adding the ReportAggregateEnabled option. It s not really documented anywhere other than on Metalink, so hopefully this will be helpful to someone. This article was original posted on the Kevin C. oraclebi blog. See: [4]http://obiee101.blogspot.com/2009/09/obiee-blog-lost.html Till Next Time
1. http://oraclebi.soundvoid.net/wp-content/uploads/2008/10/unfiltered-unagg.jpg 2. http://oraclebi.soundvoid.net/wp-content/uploads/2008/10/filtered-unagg.jpg 3. http://oraclebi.soundvoid.net/wp-content/uploads/2008/10/filtered-agg.jpg 4. http://obiee101.blogspot.com/2009/09/obiee-blog-lost.html
339
8. http://oraclebi.soundvoid.net/wp-content/uploads/2008/09/top_5by_criteria.jpg 9. http://obiee101.blogspot.com/2009/09/obiee-blog-lost.html
1. I decided to turn to SQL to give me the results I need. I started by building a query that gave me the Top 6 dates in my base table: SELECT * FROM (SELECT DISTINCT week_ending FROM base_table ORDER BY week_ending DESC) WHERE rownum <= 6; WEEK_ENDING ------------------------13-JUL-08 06-JUL-08 29-JUN-08 22-JUN-08 15-JUN-08 08-JUN-08 6 rows selected
2. Next, I used the query above in the WHERE clause for a view: CREATE OR REPLACE VIEW top_six_weeks_vw AS SELECT * FROM base_table bt WHERE bt.week_ending IN (SELECT * FROM (SELECT DISTINCT week_ending FROM base_table ORDER BY week_ending DESC) WHERE rownum <= 6);
3. Now, simply model this view in the OBIEE Repository, and your Answers reports will only display the latest 6 weeks worth of data. This article was original posted on the Kevin [2]http://obiee101.blogspot.com/2009/09/obiee-blog-lost.html Till Next Time
2. http://obiee101.blogspot.com/2009/09/obiee-blog-lost.html
C.
oraclebi
blog.
See:
1. http://oraclebi.soundvoid.net/2008/09/when-the-top-n-filter-fails/2008/09/using-the-top-n-filter/
340
For those who run their OBIEE servers in a Linux environment, it s possible to open your repository in Online mode from your Windows-based local machine. I just discovered this, so I thought I would pass it along. This assumes that you have the appropriate version of OBIEE installed on your local machine. Update: Do not use spaces in your System DSN names. You will get an error when trying to connect to that server. [1] This article has quite a few screenshots, so continue reading by clicking below: All you need to do is create a new System DSN: Go to Start > Run&, and type odbcad32, then press enter (or open ODBC Data Sources from Administrator Tools). Click the System DSN tab and click Add: [2] Choose Oracle BI Server as the Driver: [3] Give the DSN a Name (no spaces) and optionally a Description, and specify the hostname of your BI server, then click Next: [4] Type a login ID and Password for your repository, and specify the BI Server Port. Check the option Connect to Oracle BI Server to obtain default settings& to make life easier, and click Next: [5] Accept the defaults if you re happy with them, and click Finish: [6] You ve now added a new System DSN to your local machine and are ready to open the repository in Online mode: [7] In the Administrator tool, choose the blue folder to open in online mode, and choose the DSN you just created from the list below the login prompt. Enter your login details and click Open to work on your repository in Online mode: Of course, as the OBIEE documentation recommends, I would only use Online mode for making small changes to your repository. Any signicant amount of work should be done in oine mode. This article was original posted on the Kevin C. oraclebi blog. See: [8]http://obiee101.blogspot.com/2009/09/obiee-blog-lost.html Till Next Time
1. http://oraclebi.soundvoid.net/wp-content/uploads/2008/10/obiee-admin1.jpg 2. http://oraclebi.soundvoid.net/wp-content/uploads/2008/10/system-dsn-tab.jpg 3. http://oraclebi.soundvoid.net/wp-content/uploads/2008/10/driver.jpg 4. http://oraclebi.soundvoid.net/wp-content/uploads/2008/10/config1.jpg 5. http://oraclebi.soundvoid.net/wp-content/uploads/2008/10/config2.jpg 6. http://oraclebi.soundvoid.net/wp-content/uploads/2008/10/config3.jpg 7. http://oraclebi.soundvoid.net/wp-content/uploads/2008/10/new-system-dsn.jpg 8. http://obiee101.blogspot.com/2009/09/obiee-blog-lost.html
3.10
October
3.11
December
[1]
342
[1] Open the second revenue column and change the formula to:
[2] SUM(F1 Revenue.1-01 Revenue (Sum All) BY D1 Customer.C1 Cust Name) Create a Top N lter for the second revenue column:
[3]
[5] 343
[6]
344
Chapter 4
2010
4.1 January
INCORRECT TRANSALTION OF NO RESULT TO ' 20-nov-09 390.2 KB 8978017 Oracle BI Suite EE: Patch: ADD OR REMOVE PROGRAMS" SHOWS WRONG VERSION FOR BI OFFICE ADD-IN" 19-nov-09 34.3 MB 9081493 Oracle BI Suite EE: Patch: MERGE REQUEST ON TOP OF 10.1.3.4.1 FOR BUGS 8439796 8468309 6-nov-09 1.7 MB 7438317 Oracle BI Suite EE: Patch: BI SERVER TAKES OVER 30 MINUTES TO STARTUP 6-nov-09 519.9 KB 8803399 Oracle BI Suite EE: Patch: ASSERTION_FAILURE ERROR WHEN DASHBOARD NAME CONTAINS KOREAN CHARS 6-nov-09 1.6 MB 8927890 Oracle BI Suite EE: Patch: UPDATE FOR OBIEE 10.1.3.4.1 20-okt-09 191.2 KB 8669206 Oracle BI Suite EE: Patch: FIREFOX 3.0 REFRESH FAILURE CAUSES UNEXPECTED BEHAVIOR IN DRILLING/VIEW SELECTOR 12-okt-09 110.8 MB 8760212 Oracle BI Suite EE: Patch: COMMANDS FOR FULL AND INCREMENTAL SHOULD ALLOW DB SPECIFIC TEXTS 12-okt-09 6.8 MB 8743856 Oracle BI Suite EE: Patch: EXECUTION PLAN DOES NOT UPDATE LAST TASK AS COMPLETED 12-okt-09 6.8 MB 8990093 Oracle BI Suite EE: Patch: MLR BACKPORT FOR BASE BUGS 8797200 8909410 8603005 6-okt-09 13.1 MB 8565823 Oracle BI Suite EE: Patch: MODIFYING VIEWS.CSS .PTSECTSTABLE PADDING 0PX DOES NOT HAVE ANY IMPACT 25-sep-09 179.9 KB 8797200 Oracle BI Suite EE: Patch: METADATA CACHE IS NOT RELEASED WHEN THE GROUP CHANGES FOR THE USER 18-sep-09 13.1 MB 8633968 Oracle BI Suite EE: Patch: MLR BACKPORT FOR BASE BUGS 8331209 8371708 8372436 17-sep-09 906.9 KB 8284585 Oracle BI Suite EE: Patch: NAVIGATION/DRILL DOES NOT WORK WHEN THE COLUMN BEING DRILLED IS IN POSITION 11+ 8-sep-09 9.2 KB 8796912 Oracle BI Suite EE: Patch: DISCONNECTED DOESNT WORK ON VISTA AS NON-ADMIN USER 3-sep-09 128.7 KB 8685156 Oracle BI Suite EE: Patch: BLR BACKPORT OF BUG 8394579 ON TOP OF 10.1.3.4.1 (BLR #147542) 28-jul-09 1.3 MB 8650261 Oracle BI Suite EE: Patch: BLR BACKPORT OF BUG 8595693 ON TOP OF 10.1.3.4.1 (BLR #143831) 24-jul-09 313.3 KB 8685120 Oracle BI Suite EE: Patch: MLR BACKPORT FOR BASE BUGS 8680924 8674235 8608837 8567128 21-jul-09 624.6 KB 6702999 Oracle BI Suite EE: Patch: REPORT AGGREGATE - RANK HAS DIFFERENT BEHAVIOR VS RANK WITH AGGREGATE 19-jun-09 147.7 KB 8616993 Oracle BI Suite EE: Patch: BI OFFICE PATCH 19-jun-09 54.0 MB 8611209 Oracle BI Suite EE: Patch: MLR BACKPORT FOR BASE BUGS 8332167, 8290868, 8350962 18-jun-09 716.0 KB 8238481 Oracle BI Suite EE: Patch: NQSERROR14026 OCCURED IRREGULARLY 9-jun-09 10.3 KB 8439796 Oracle BI Suite EE: Patch: PRIVILEGE ERROR DISPLAYED ON SELECTION OF DELIVERS RECIPIENTS 4-jun-09 1.6 MB
Yes you need a metalink/support account to download them. No, I will not download them for you and redistribute them. Ask your local Oracle representative for support. Till next time 346
[2] Next go back to your base report and open the column properties screen for your Market column:
[4] If you now test the report you will see that the clicked value isn t passed as lter 347
[5] This is because the report isn t let lter aware. Go to your target report and set a lter on the Market column of the type is prompted.
[6] If you now test it again, you will see the lter value is passed:
[3] If we drill down the time dimension, we will see the AVG Price change accordingly:
[4] We can pin an extra avereg column to the calendar year by using the AGGREGATE BY function (AGGREGATE((F1 Revenue.1-01 Revenue (Sum All)/F2 Units.2-01 Billed Qty (Sum All)) by D0 Time.T05 Per Name Year)) (IT S NOT in the formula editor, you will have to type it!)
[5] But what if we want it for the whole report? Simple leave the BY part empty: (AGGREGATE((F1 Revenue.1-01 Revenue (Sum All)/F2 Units.2-01 Billed Qty (Sum All)) by )
BI Presentation Services conguration le (instancecong.xml) to add the following entry. <ResultRowLimit>95000</ResultRowLimit> The internal default is 65000. If the user exceeds this value, the server returns an error message when the table view is rendered. [1]NOTE: This entry applies to the Table view, not the Pivot Table view. The ResultRowLimit entry controls the maximum value that can be set for the DefaultRowsDisplayed, DefaultRowsDisplayedInDelivery, and the DefaultRowsDisplayedInDownload ( download to Excel) entries. To set DefaultRowsDisplayed, DefaultRowsDisplayedInDelivery, or DefaultRowsDisplayedInDownload to a value that exceeds the current value of ResultRowLimit, you also must increase the value of ResultRowLimit to equal or exceed the value that you want to set. Till Next Time
1. file://localhost/mnt/ext/blogbooker/tmp/sm6j0byg/sm6j0byg-body.tex.lynx.html
[1] to this:
[2] in 5 minutes. It uses the same technique we used with the googlemaps. Create a new narrative view. In the prex part put: 350
<!Get an empty map> <img src=[3]http://chart.apis.google.com/chart?cht=t &chm=europe &chs=440x220 id=GD mapImg/> <!chm ==> geographical area (africa, asia, europe, middle east, south america, usa, world)> <!chs ==> canvas size max 440X220> <!more info [4]http://code.google.com/intl/nl/apis/chart/ > <script type=text/javascript> // setting up parameters var chartURL = [5]http://chart.apis.google.com/chart?cht=t &chtm=europe &chs=440x220 &chds=1,6; var chartBGColor = &chf=bg,s,EAEAEA; //specify the gradient: <default color>, <start of gradient>,.., <end of gradient> var chartPalette = &chco=AEF5EB,EFE6CE,DFAE6B,1F6913,D94801,A63603,7F2704; var chartDataLabels = new Array(); var chartData = new Array(); In the Narrative part put: // Use the push command to ll the array: chartDataLabels.push(@1); chartData.push(@3); In the postx part put: // putting it all together chartURL = chartURL + chartBGColor + chartPalette + &chld= + chartDataLabels.toString().replace(/,/g,) + &chd=t: + chartData.toString();; // now get the image from Google Chart document.getElementById(GD mapImg).src = chartURL; </script> Remember to check the HTML box:
[6] There are maps for africa, asia, europe, middle east, south america, usa and the world. For more info see: [7]http://code.google.com/intl/nl/apis/chart/ Till Next Time This article is also published on [8]http://knowledge.ciber.nl
1. http://lh4.ggpht.com/_qd3TDEvIh4Y/S0OfKqomQyI/AAAAAAAACOA/72WgJoV7Xzw/s1600-h/image%5B2%5D.png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/S0OfLWsIYeI/AAAAAAAACOI/3i01gi3Snsw/s1600-h/image%5B6%5D.png 3. http://chart.apis.google.com/chart?cht=t&chm=europe&chs=440x220" 4. http://code.google.com/intl/nl/apis/chart/ 5. http://chart.apis.google.com/chart?cht=t&chtm=europe&chs=440x220&chds=1,6"; 6. http://lh3.ggpht.com/_qd3TDEvIh4Y/S0OfMH7LMWI/AAAAAAAACOQ/HL_z7yy9kVQ/s1600-h/image%5B9%5D.png 7. http://code.google.com/intl/nl/apis/chart/ 8. http://knowledge.ciber.nl/
351
[4]
[5] add an narrative view: <img src= id=venn chart@9/> <! creates an unique img tag > <script type=text/javascript> var chartURL = [6]http://chart.apis.google.com/chart?cht=v &chd=t:@2,@3,@4,@5,@6,@7,@8 &chtt=@1 &chdl=a|b|c &chdlp=b ; /* cht = chart type chs = chart size chd = chart data chtt = chart title chdl = chart legend chdlp= chart legend position more info [7]http://code.google.com/intl/nl/apis/chart/ */ /* get the chart */ document.getElementById(venn chart@9).src = chartURL; </script> Put all together: 352
&chs=200x200
to this: 353
[2] Java script master Joe Betram showed us the way: spa?threadID=1009297 &tstart=0 Simple add a static text to your report: [3]http://forums.oracle.com/forums/thread.j-
[4] Add Joe s code: <script type=text/javascript> /* orignal code by Joe Betram /* see:http:/*forums.oracle.com/forums/thread.jspa?threadID=1009297 &tstart=0 / var debug =0; if (debug === 1) { document.write(Get all tables+<BR>); } var tables = document.getElementsByTagName(table); if (debug === 1) { document.write(Loop over the tables+<BR>); } for(var table=0; table < tables.length; table++) { if(tables[table].className != PTSectsTable ) { continue; } if (debug === 1) { document.write(Found a pivot table+<BR>); } var tbody = tables[table].getElementsByTagName(tbody)[0]; if (debug === 1) { document.write(Grabbed the tbody code+<BR>); } var trs = tbody.getElementsByTagName(tr); var new tr = document.createElement(tr); if (debug === 1) { document.write(Created the new tr variable+<BR>); } while( trs.length > 0) { 354
var new td = document.createElement(td); if (debug === 1) { document.write(Created a new TD element.+<BR>); } var new table = document.createElement(table); if (debug === 1) { document.write(Created a new table element.+<BR>); } var new tbody = document.createElement(tbody); if (debug === 1) { document.write(Created a new tbody element.+<BR>); } new tbody.appendChild(trs[0]); if (debug === 1) { document.write(Appended Section.+<BR>); } new tbody.appendChild(trs[0]); if (debug === 1) { document.write(Appended Data.+<BR>); } new table.appendChild(new tbody); if (debug === 1) { document.write(Appended tbody to the table tag.+<BR>); } new td.appendChild(new table); if (debug === 1) { document.write(Appended table to the TD tag.+<BR>); } new tr.appendChild(new td); if (debug === 1) { document.write(Appended td to the overall TR tag.+<BR>); } } tbody.appendChild(new tr); if (debug === 1) { document.write(Inserted the new tr variable as the rst child of tbody+<BR>); } } if (debug === 1) { document.write(Finished transposePivotTable+<BR>); } </script> Don t forget to press the SET XML button before you save it! Till Next Time
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/S0Y-lwf7sAI/AAAAAAAACPI/_zI_tvo5mPg/s1600-h/image%5B7%5D.png 2. http://lh4.ggpht.com/_qd3TDEvIh4Y/S0Y-mSWUhsI/AAAAAAAACPQ/UDULmsfRzk0/s1600-h/image%5B6%5D.png 3. http://forums.oracle.com/forums/thread.jspa?threadID=1009297&tstart=0 4. http://lh3.ggpht.com/_qd3TDEvIh4Y/S0Y-nUXH6mI/AAAAAAAACPY/HfrgJ-LW2vU/s1600-h/image%5B10%5D.png
[1] They are QR Codes: [2]http://en.wikipedia.org/wiki/QR Code. Most modern mobiles have a small application on board which can read the information. Because of the build in error correction they are ideal for stu like address labels. With google chart you can easily integrated them in an OBIEE report. [3]http://obiee101.blogspot.com/ add the formula: http://chart.apis.google.com/chart?chs=150x150 &chl=http://obiee101.blogspot.com/ &choe=UTF-8 &cht=qr 355 Say you want to code
[4] More info: [5]http://code.google.com/intl/nl/apis/chart/types.html #qrcodes Till Next Time This article is also published on [6]http://knowledge.ciber.nl
1. http://lh3.ggpht.com/_qd3TDEvIh4Y/S0nto9uKUII/AAAAAAAACPg/W4RKZkNQr3Y/s1600-h/image%5B2%5D.png 2. http://en.wikipedia.org/wiki/QR_Code 3. http://obiee101.blogspot.com/ 4. http://lh5.ggpht.com/_qd3TDEvIh4Y/S0ntprUBv7I/AAAAAAAACPo/pWGbxzYXXwg/s1600-h/image%5B6%5D.png 5. http://code.google.com/intl/nl/apis/chart/types.html#qrcodes 6. http://knowledge.ciber.nl/
[1] 356
[1] Of course there are some tuning possibilities you might want to explore. WORK DIRECTORY PATHS From the OBIEE documentation: Species one or more directories for temporary space. Each directory listed needs to be an existing fully-qualied, writable directory pathname, with double quotes ( ) surrounding the pathname. Specify mapped directories only. UNC path names and network mapped drives are allowed only if the service runs under a qualied user account. To change the account under which the service is running, see the corresponding topic in the Oracle Business Intelligence Enterprise Edition Deployment Guide. Specify multiple directories with a comma separated list. Valid values are any fully qualied pathname to an existing, writable directory. For optimum performance, temporary directories should reside on high performance storage devices. If you specify more than one directory, they should reside on dierent drives. Syntax: WORK DIRECTORY PATHS = <full directory path 1> [,<full directory path 2> {, <full directory path n> }] ; Example 1: WORK DIRECTORY PATHS = C:\Temp ; Example 2: WORK DIRECTORY PATHS = D:\temp, F:\temp ; NOTE: Specifying more than one directory per drive does not improve performance because le I/O takes place through the same I/O controller. In general, specify only one directory per disk drive. 357
Specifying multiple directories on dierent drives improves the overall I/O throughput of the Oracle Business Intelligence Server because internally, the processing les are allocated using a roundrobin algorithm that balances the I/O load across the given disk drives. Rule of thumb: Invest in fast drives, consider virtual / RAM drives. SORT MEMORY SIZE From the OBIEE documentation: Species the maximum amount of memory to be used for each sort operation. Multiple operations can each use memory up to the value specied. The limit for SORT MEMORY SIZE is determined by the physical memory of the server machine and on the number of sort operations that might occur simultaneously. Specify KB for kilobytes, MB for megabytes, and no units for bytes. Example: SORT MEMORY SIZE = 4 MB ; The size specied by SORT MEMORY SIZE sets the upper limit on how large the sorting buer can be in the Oracle Business Intelligence Server. When this limit is exceeded, data is sorted in allotments of the size set by SORT MEMORY SIZE and the sorted sets are merged together. For example, suppose SORT MEMORY SIZE is set to 4 MB and the size of the data to be sorted is 32 MB. The server performs the sort once per each 4 MB of data, for a total of eight sort operations, and then merge the results into a single result set. This technique allows the Oracle Business Intelligence Server to sort data of indenite size. The merge process itself is generally not costly in terms of resources, but it does include a read and write of each result set in a temporary le. To reduce the time this takes, increase the SORT MEMORY SIZE. This parameter can be tuned over time by taking into consideration the data size of the query and the number of concurrent users. Rule of thumb: Don t go overboard with this value, 10mb for a hundred concurrent users is 1 Gb of server memory. Don t let OBIEE push other processes into the swap memory of the OS. SORT BUFFER INCREMENT SIZE From the documentation: Species the increment that the sort memory size is increased by as more memory is needed. As more memory is required, the size increases by the value specied until it reaches the value of SORT MEMORY SIZE. Example: SORT BUFFER INCREMENT SIZE = 256 KB ; This parameter denes the increment by which SORT MEMORY SIZE should be reached. For example, suppose SORT MEMORY SIZE is set to 4 MB and the data to be sorted is just one megabyte. As data is fed into the sort routine, the size of the sort buer increases only by the increment size, rather than the full size allowed by SORT MEMORY SIZE. This mechanism allows the Oracle Business Intelligence Server to sort smaller result sets eciently without wasting memory. Rule of thumb: 5 10 % of the SORT MEMORY SIZE
VIRTUAL TABLE PAGE SIZE From the documentation: Several operations sort, join, union and database fetch can require memory resources beyond those available to the Oracle Business Intelligence Server. To manage this condition, the server uses a virtual table management mechanism that provides a buering scheme 358
for processing these operations. When the amount of data exceeds the VIRTUAL TABLE PAGE SIZE, the remaining data is buered in a temporary le and placed in the virtual table as processing continues. This mechanism supports dynamic memory sizes and ensures that any row can be obtained dynamically for processing queries. When VIRTUAL TABLE PAGE SIZE is increased, I/O operations are reduced. Complex queries may use 20 to 30 virtual tables, while simple queries may not even require virtual tables. The default size of 128 KB is a reasonable size when one considers that the size for virtual paging in Windows NT is 64 KB. This parameter can be tuned depending on the number of concurrent users and the average query complexity. In general, setting the size higher than 256 KB does not yield a corresponding increase in throughput due to the 64 KB size limit of Windows NT system buers, as each I/O still goes through the system buers Rule of thumb: Trust the documentation, more then 256 KB is not necessary. All the parameters are set in the NQSCong.INI File Till Next Time
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/S0oQQSpxyLI/AAAAAAAACPw/Rcsw8rzQUjM/s1600-h/image%5B2%5D.png
[2] Or a carriage return every x columns. So extra lines to Joe s code xed it: <script type=text/javascript> based orignal code by Joe Betram see:[3]http://forums.oracle.com/forums/thread.jspa?threadID=1 009297 &tstart=0 This Version John Minkjan :[4]http://www.obiee101.blogspot.com/ Thanks to Nandoo for noticing the IE bug
/* /* /* /* / /* Set the number of columns */ var intColumnNumbers = 5; function insertAfter( referenceNode, newNode ) { referenceNode.parentNode.insertBefore(newNode, referenceNode.previousSibling); } var debug =1; var sectioncnt =0; var x =0;
359
if (debug === 1) { document.write(Get all tables+<BR>); } var tables = document.getElementsByTagName(table); if (debug === 1) { document.write(Loop over the tables+<BR>); } for(var table=0; table < tables.length; table++) { if(tables[table].className != PTSectsTable ) { continue; } if (debug === 1) { document.write(Found a pivot table+<BR>); } var tbody = tables[table].getElementsByTagName(tbody)[0]; if (debug === 1) { document.write(Grabbed the tbody code+<BR>); } var trs = tbody.getElementsByTagName(tr); var new tr = document.createElement(tr); var nw tr =new Array(); nw tr[x] = document.createElement(tr); if (debug === 1) { document.write(Created the new tr variable+<BR>); } while( trs.length > 0) { var new td = document.createElement(td); if (debug === 1) { document.write(Created a new TD element.+<BR>); } var new table = document.createElement(table); if (debug === 1) { document.write(Created a new table element.+<BR>); } var new tbody = document.createElement(tbody); if (debug === 1) { document.write(Created a new tbody element.+<BR>); } new tbody.appendChild(trs[0]); if (debug === 1) { document.write(Appended Section.+<BR>); } new tbody.appendChild(trs[0]); if (debug === 1) { document.write(Appended Data.+<BR>); } new table.appendChild(new tbody); if (debug === 1) { document.write(Appended tbody to the table tag.+<BR>); } new td.appendChild(new table); if (debug === 1) { document.write(Appended table to the TD tag.+<BR>); } new tr.appendChild(new td); if (debug === 1) { document.write(Appended td to the overall TR tag.+<BR>); } /*nw tr[0].appendChild(new td);*/ sectioncnt = sectioncnt +1; if (debug === 1) { document.write(sectioncnt %intColumnNumbers+<BR>); } if (sectioncnt %intColumnNumbers ===0) { nw tr[x]=new tr; var new tr = document.createElement(tr); x =x+1; }; } var y=0; for (y=0; y<nw tr.length; y++) { tbody.appendChild(nw tr[y]); } tbody.appendChild(new tr); if (debug === 1) { document.write(Inserted the new tr variable as the rst child of tbody+<BR>); } } if (debug === 1) { document.write(Finished transposePivotTable+<BR>); } </script> Till Next Time 360
Must contain at least ve characters, but not more than 30 characters. Must begin with an alphabetic character. It cannot begin with a number, the underscore ( ), the dollar sign ( $), or the number sign ( #). At least one of the characters must be a number. Can contain only the following characters; numbers, letters, and the following special characters: US dollar sign ( $), number sign ( #), or underscore ( ). Cannot contain any Oracle reserved words, such as VARCHAR. 361
Delete cached password data by deleting the contents of the following directory: (UNIX) : ORACLE HOME/j2ee/oc4jinstance/persistence/ascontrol/ascontrol/securestore / (Windows): ORACLE HOME\j2ee\oc4jinstance\ persistence\ascontrol\ascontrolckslashsecurestore/ Start OC4J and the Application Server Control. After the restart, the Application Server Control will use your new Administrator (oc4jadmin) password, which will be stored in encrypted format within the system-jazn-data.xml le. By the way is you have installed OC4J on a windows box it s much easier to retrieve the password. Goto START > Oracle Business Intelligence :
[2] Rightclick on Stop OC4J, goto properties, open the shortcut tab:
[3] The password is right there ;-) Till Next Time This article is also published on [4]http://knowledge.ciber.nl
1. http://carpediemconsulting.wordpress.com/2008/03/16/resetting-the-oc4j-password-in-obiee/ 2. http://lh4.ggpht.com/_qd3TDEvIh4Y/S2XbNWkti5I/AAAAAAAACVw/j8CCYGnrep4/s1600-h/image%5B1%5D.png 3. http://lh3.ggpht.com/_qd3TDEvIh4Y/S1_oqp-xktI/AAAAAAAACV4/roRtDiHV8-g/s1600-h/image3%5B1%5D.png 4. http://knowledge.ciber.nl/
4.2
February
Leftover vacation days male employee xed contracts age 21-30 and Leftover vacation days male employee xed contracts age 31-40
[2] 3. Over 55 characters OBIEE starts to hash the le name, so they are harder to nd on the le system:
[3] 4. If you want to use a scripting tool to create your reports, you will have to recreated the hash. This is almost impossible since Oracle will not tell the public how the Hash works. 5. A Little bird told that you might run into trouble when upgrading to 11g, they couldn t conrm it was taken care of in the test program. Till Nex Time
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/S12aDU8HmhI/AAAAAAAACSQ/cg__5_0GqEc/s1600-h/image%5B3%5D.png 2. http://lh3.ggpht.com/_qd3TDEvIh4Y/S12aEFItLjI/AAAAAAAACSY/kd4DbxFt07o/s1600-h/image%5B7%5D.png 3. http://lh4.ggpht.com/_qd3TDEvIh4Y/S12aE4mzFBI/AAAAAAAACSg/3aDknppSbsw/s1600-h/image%5B11%5D.png
ESSBASE Microsoft Windows (32-bit) (American English) 20-jan-10 7343314 Oracle BI Suite EE: Patch: SEARCH SEGMENTS RETURN ONLY MY SEGMENTS NOT INCLUDING SHARED SEGMENTS. Microsoft Windows (32-bit) (American English) 19-jan-10 8444119 Oracle BI Suite EE: Patch: OBIEE CUSTOM AUTHENTICATOR PASSES INVALID FORM TO ESSBASE Microsoft Windows (32-bit) (American English) 15-jan-10 9165670 Oracle BI Suite EE: Patch: DIFFERENT RESULT FOR TOTALS IN EXCEL THAN ANSWERS WHEN SUM BY IS USED Microsoft Windows (32-bit) (American English) 14-jan-10 8743856 Oracle BI Suite EE: Patch: EXECUTION PLAN DOES NOT UPDATE LAST TASK AS COMPLETED Generic Platform (American English) 7-jan-10 8760212 Oracle BI Suite EE: Patch: COMMANDS FOR FULL AND INCREMENTAL SHOULD ALLOW DB SPECIFIC TEXTS Generic Platform (American English) 7-jan-10 9179169 Oracle BI Suite EE: Patch: DAC 10.1.3.4.X CANT CONNECT TO SQL SERVER 2008 Generic Platform (American English) 6-jan-10
As always: Yes you need a metalink/support account to download them. No, I will not download them for you and redistribute them. Ask your local Oracle representative for support. Till next time
<saw:condition> <sawx:expr xsi:type=sawx:comparison op=greaterOrEqual> <saw:columnRef columnID=c1/> <sawx:expr xsi:type=xsd:decimal>1000000</sawx:expr> </sawx:expr> <saw:displayFormat backgroundColor= #FF0000 wrapText=true/> </saw:condition>
Copy and paste this into an good! XML Editor ( Notepad ++)
[9] Copy and paste all XML into your XML EDITOR:
[11] Copy you condition into the column part just below the labels between saw:totalValue and saw:displayFormats tags
[12] Copy the XML back to OBIEE, don t forget to press the SET XML tag:
366
[14] Although this method of Raghu is very elegant I personally prefer Joe method discussed in part 1. With XML Editing you run into the risk of loosing your stu when make a change in your report easily, also most user won t have access to the Advanced TAB. Till Next Time
1. http://forums.oracle.com/forums/thread.jspa?messageID=4025463� 2. http://lh3.ggpht.com/_qd3TDEvIh4Y/S1dccTM6wtI/AAAAAAAACP4/DmGn9WY5zUc/s1600-h/image%5B8%5D.png 3. http://lh4.ggpht.com/_qd3TDEvIh4Y/S1dcdF5kmjI/AAAAAAAACQA/XFhHktUT5Jk/s1600-h/image%5B12%5D.png 4. http://lh5.ggpht.com/_qd3TDEvIh4Y/S1dqDy5WIEI/AAAAAAAACRA/iPsej9H5CpY/s1600-h/image42.png 5. http://lh5.ggpht.com/_qd3TDEvIh4Y/S1dqEs3jNoI/AAAAAAAACRI/u9fOrMMIfYA/s1600-h/image46.png 6. http://lh6.ggpht.com/_qd3TDEvIh4Y/S1dqFkQkSKI/AAAAAAAACRQ/nwo7DSRi9vA/s1600-h/image49.png 7. http://lh5.ggpht.com/_qd3TDEvIh4Y/S1dqGTa0pSI/AAAAAAAACRY/w07Yo2vbZWw/s1600-h/image%5B3%5D.png 8. http://lh5.ggpht.com/_qd3TDEvIh4Y/S1dqHKZ9Z9I/AAAAAAAACRg/71yB6nQiDaM/s1600-h/image%5B6%5D.png 9. http://lh6.ggpht.com/_qd3TDEvIh4Y/S1dqFkQkSKI/AAAAAAAACRQ/nwo7DSRi9vA/s1600-h/image49.png 10. http://lh3.ggpht.com/_qd3TDEvIh4Y/S1dqH5CMIYI/AAAAAAAACRo/fTm_qhdv6tc/s1600-h/image%5B11%5D.png 11. http://lh3.ggpht.com/_qd3TDEvIh4Y/S1dqIhIhnsI/AAAAAAAACRw/Phl1YlkH_xA/s1600-h/image%5B16%5D.png 12. http://lh3.ggpht.com/_qd3TDEvIh4Y/S1dqJvhR14I/AAAAAAAACR4/UwNkYw-WYzw/s1600-h/image%5B20%5D.png 13. http://lh5.ggpht.com/_qd3TDEvIh4Y/S1dqKH3tSsI/AAAAAAAACSA/hr3RnjXI8uw/s1600-h/image%5B23%5D.png 14. http://lh3.ggpht.com/_qd3TDEvIh4Y/S1dqK9BMdfI/AAAAAAAACSI/fALbBumoUvg/s1600-h/image%5B27%5D.png
Sometimes you want to grab the logical from a dashboard or report without showing it to the user or having to switch on logging. Step 1: Create you report with an sql view: 367
[1]
[2]
<script type=text/javascript> // Original code from Joe Betram // See :[4]http://forums.oracle.com/forums/thread.jspa?messageID=402 6864 #4026864 var tds = document.getElementsByTagName(td); var lSQL = new Array(); for(var td=0;td<tds.length;td++) { if( tds[td].className != SqlViewCell ) { continue; } tds[td].style.display = NONE; lSQL.push(tds[td].innerHTML); } for(var len =0; len < lSQL.length; len++) { document.write(Stored logical SQL in slot + len + is: + lSQL[len] + <BR>); } </script> &
[6] With a little bit of tweaking you can use this script to for instance to call a web service or channel the SQL to another logging program. Till Next Time
1. http://lh4.ggpht.com/_qd3TDEvIh4Y/S16TnxwCTKI/AAAAAAAACSo/u8BW8LCXgNs/s1600-h/image%5B20%5D.png 2. http://lh3.ggpht.com/_qd3TDEvIh4Y/S16To7iFBJI/AAAAAAAACSw/ubqmb5JEbdo/s1600-h/image%5B21%5D.png 3. http://lh3.ggpht.com/_qd3TDEvIh4Y/S16TpsHePaI/AAAAAAAACS4/l_Tu7NBCXI4/s1600-h/image%5B22%5D.png 4. http://forums.oracle.com/forums/thread.jspa?messageID=4026864� 5. http://lh6.ggpht.com/_qd3TDEvIh4Y/S16TqQAGf9I/AAAAAAAACTA/aqBK8irjq3k/s1600-h/image%5B23%5D.png 6. http://lh4.ggpht.com/_qd3TDEvIh4Y/S16TrO5h4uI/AAAAAAAACTI/r7pdL6Jdy3o/s1600-h/image%5B24%5D.png
[1] Most of the properties can be changed from the pivot view editor: 370
[2] But they forgot to put an edit box on the top left corner cell:
[3] If you want to set the background color system wide goto the views.css le and change the PTIndentCell:
[4] If you want to change it only for on report add a static text:
[5] add some javaScript like this: <script type=text/javascript> var tds = document.getElementsByTagName(td); var lCSS = new Array(); for(var td=0;td<tds.length;td++) { if( tds[td].className != PTIndentCell ) { continue; } tds[td].style.backgroundColor= #CCCC00; // Info on property naming: [6]http://codepunk.hardwar.org.uk/css2js.htm lCSS.push(tds[td].innerHTML); } for(var len =0; len < lCSS.length; len++) { //document.write(Bingo + <BR>); //debug only 371
} </script>
(Yep it s based on a idea coming from Joe Betram) Check the contians HTML Markup box:
[8] The naming of CSS properties in javaScript varys slightly from normal CSS: [9]http://codepunk.hardwar.org.uk/css2js.htm Till Next Time
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/S16hHjL5TAI/AAAAAAAACTQ/mLLvj4hSYqM/s1600-h/image%5B2%5D.png 2. http://lh4.ggpht.com/_qd3TDEvIh4Y/S16hISYUT9I/AAAAAAAACTY/Kh6S41kaa4U/s1600-h/image%5B5%5D.png 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/S16hI6wvlhI/AAAAAAAACTg/e7-e-boN3oA/s1600-h/image%5B8%5D.png 4. http://lh6.ggpht.com/_qd3TDEvIh4Y/S16hKe0S-8I/AAAAAAAACTo/gpE-JBc7_PA/s1600-h/image%5B11%5D.png 5. http://lh3.ggpht.com/_qd3TDEvIh4Y/S16hLPDYLsI/AAAAAAAACTw/G8O6sZgQlCQ/s1600-h/image%5B14%5D.png 6. http://codepunk.hardwar.org.uk/css2js.htm 7. http://lh6.ggpht.com/_qd3TDEvIh4Y/S16hMJEPTfI/AAAAAAAACT4/yZ7I0CD-EPw/s1600-h/image%5B17%5D.png 8. http://lh5.ggpht.com/_qd3TDEvIh4Y/S16hM75T57I/AAAAAAAACUA/cvJbAKuE17c/s1600-h/image%5B20%5D.png 9. http://codepunk.hardwar.org.uk/css2js.htm
[2] Put in the reference to the alternate stylesheets: <link rel=stylesheet type=text/css title=Standard href=res/s oracle10/b mozilla 4/views.css> <link rel=alternate stylesheet type=text/css title=Red href=res/Demo/views2.css> <link rel=alternate stylesheet type=text/css title=Green href=res/Demo/views3.css> <meta http-equiv=Default-Style content=Standard> If you now open the report in FireFox and goto view => page style
[4]
= Default 373
[5]
= Red
[6]
= Green
Yes this trick will only work in FireFox (View | Page Style), Opera (View | Style), Konqueror(View | Use StyleSheet), Workarounds for IExplorer are widely spread on the net. Haven t found it in Chrome Yet Till Next Time
1. http://lh6.ggpht.com/_qd3TDEvIh4Y/S2AF0wtKWeI/AAAAAAAACUY/fG5sbNZRqAI/s1600-h/image%5B3%5D.png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/S2AF1gKq8ZI/AAAAAAAACUg/00mqp6SG-BE/s1600-h/image%5B6%5D.png 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/S2AF2aG716I/AAAAAAAACUo/Xak9nKpLUyI/s1600-h/image%5B9%5D.png 4. http://lh6.ggpht.com/_qd3TDEvIh4Y/S2AF25lGvRI/AAAAAAAACUw/tgb8dV2xtAU/s1600-h/image%5B12%5D.png 5. http://lh4.ggpht.com/_qd3TDEvIh4Y/S2AF3oVZkUI/AAAAAAAACU4/WfBxlY0YnXs/s1600-h/image%5B15%5D.png 6. http://lh3.ggpht.com/_qd3TDEvIh4Y/S2AF4Z71IUI/AAAAAAAACVA/YDimtcMSFKA/s1600-h/image%5B18%5D.png
SET XML button in the advanced TAB => [1] This causes your nicely formatted script which looked like this: 374
[3] Basically it has become one long string. You might run into trouble because of comment lines starting with // in your code. This turns the rest of the string into a comment. Always encapsulate your comments as /*..comment..*/ . An other problem might be missing semi-colon ; . Always close your process steps with one. Till Next Time
1. http://lh4.ggpht.com/_qd3TDEvIh4Y/S2XEo1RP35I/AAAAAAAACVY/StIBrk0dH0I/s1600-h/image%5B2%5D.png 2. http://lh4.ggpht.com/_qd3TDEvIh4Y/S2XEpkPACDI/AAAAAAAACVg/VrQLgAJ5eEg/s1600-h/image%5B9%5D.png 3. http://lh3.ggpht.com/_qd3TDEvIh4Y/S2XEqUjYA-I/AAAAAAAACVo/wcuGqnUkLxk/s1600-h/image%5B10%5D.png
[1] 375
[2] Bytes 00.03 {4 } => File Standard; Seems to be always the same [3] Byte 04 {1 } => Length of the object name; Name starts 4 bytes from here. [4] Byte x..03 {3 } => Prequel to object name
[6] Byte x..11 {11 } => prequel 06 00 01 + Hex id of the object owner
[7] Byte x {1 } number of users / groups which have form of permission. [8] Byte x..13 {13 } => Prequel 00 01 {2 } + Hex id of the grantee (group or user) {8 } + permission: (FF FF 00- Full Control ; 0F 00 00 - Change/Modify ;03 00 00 Read; 02 00 00 ; 00 00 00- No Access ) {3 } [for each grantee] Traverse
[10] Byte x .. 3+byte(x-1)+8 => Prequel 00 00 00 {3 } + Object type name as ascii + Sequel 02 00 01 00 04 00 00 00 {8 }
[11] Byte x..x+3 {4 } text Desc [12] Byte x {1 } Length of description 376
[13] Byte x..byte(x-1)+4=> prequel 00 00 00 {3 } description in Ascii; sequel 00 00 00 00 {4 } Now in what way is this info useful? If you want to script your reports, you also need to script the ATR le.. I will hopefully soon have time to show you how to script a report.
[1] This can be done simple from a narrative view: First start with a basic report:
[2] 377
[3] Switch on the HTML in the prex put: <tr><th>[b]Customer[/b]</th><th>[b]Revenue[/b]</t h></tr> In the narrative put: <tr> <td>@1</td> <td> <input type=text onclick=alert(Sum for All Customers: @3!) value=@2 /> </td> </tr> Put it all together on the compound view:
4.3
March
[1] Let start an insider joke: It s the usenet handle of the original programmer ;-) Anyhow it s one of those things you will have to keep in mind when scripting reports. Till Next Time
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/S28KsCcxerI/AAAAAAAACYU/fXWsA9wV8TA/s1600-h/image%5B3%5D.png
[1] The {saw:criteria } tag The {saw:criteria } starts with the subjectArea subtag The rst inner tags are: 379
[2] {saw:columns } Holding the columns information {saw:lter } Holding the lter for the subject area Next Time I will show the detailed columns and lter tags Till Next Time
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/S4eA26ieHBI/AAAAAAAACYg/USx6apWtTSs/s1600-h/image%5B3%5D.png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/S4eA5kS_k8I/AAAAAAAACYo/MWjwXcG9UXQ/s1600-h/image%5B7%5D.png
[5]
[6]
[7]
[1] The {saw:columns } Structure [2] The rst inner tag is {saw:column } . The base tag contains the column formula, columnId and aggregation rule This tag is divided into {saw:tableHeading }, {saw:columnHeading }, {saw:displayFormat }
[4] This allows you to set an alternative caption as table heading. 382
[5] This allows you to set an alternative caption as column heading. Also the interaction on a column level (Ai when you click on the column heading) is set here. the {saw:displayFormat } structure This control the display format of the data cel: [6] This also control the dataformat: [7] Till Next Time
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/S4eGg_dKa1I/AAAAAAAACYw/B1mI4rYzq3c/s1600-h/image%5B3%5D.png 2. http://lh6.ggpht.com/_qd3TDEvIh4Y/S4eGjKIW0CI/AAAAAAAACY4/nNYMyHt5BnY/s1600-h/image%5B7%5D.png 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/S4eGmQOIzeI/AAAAAAAACZA/2vcWaHMK-1s/s1600-h/image%5B14%5D.png 4. http://lh6.ggpht.com/_qd3TDEvIh4Y/S4eGqBKOmdI/AAAAAAAACZI/imh_TAw3GTs/s1600-h/image%5B18%5D.png 5. http://lh5.ggpht.com/_qd3TDEvIh4Y/S4eGuICJmnI/AAAAAAAACZQ/R0ERFrkJIWM/s1600-h/image%5B22%5D.png 6. http://lh4.ggpht.com/_qd3TDEvIh4Y/S4eGwldWnVI/AAAAAAAACZY/8kE6mQYRUuc/s1600-h/image%5B32%5D.png 7. http://lh3.ggpht.com/_qd3TDEvIh4Y/S4eGyoHR5XI/AAAAAAAACZg/obLXoLg_LZw/s1600-h/image%5B26%5D.png
[1] To create lters OBIEE uses sawx epression engine. First it dene the type: [2] Then the right side: [3] and left side: [4] For lters based on an other report it pretty much works the same: 383
[1] If you are coming from OBIEE 10G and want to prep for 11g you might want to catch up on some reading on how to make good graphs, instead of only colourful graphs! For several years the books of Stephen Few: ([2]http://www.perceptualedge.com/blog/) where considered as the one and only standard. Certainly he was one of the rst to write things down: [3](Information Dashboard Design: The Eective Visual Communication of Data ) This is still a must read for every Dashboard developer. Recently a new book has arrived [4]The wall street journal guide to information graphics by Dona M. Wong. Personally I nd this easier to read then the Stephen Few book. I like the setup where on the left page there is a bad example and on the right side there is a good example. Another good feature of the book is the statistical brush-up chapter. Till Next Time
1. http://lh4.ggpht.com/_qd3TDEvIh4Y/S5-Pv2S5CXI/AAAAAAAACbI/NEMhdGQVu6g/s1600-h/image%5B3%5D.png 2. http://www.perceptualedge.com/blog/ 3. http://www.amazon.com/Information-Dashboard-Design-Effective-Communication/dp/0596100167 4. http://www.amazon.com/Street-Journal-Guide-Information-Graphics/dp/0393072959/ref=sr_1_1?ie=UTF8&s= books&qid=1268747321&sr=1-1-spell
384
As always: Yes you need a metalink/support account to download them. No, I will not download them for you and redistribute them. Ask your local Oracle representative for support. Till next time
4.4
April
4.5
May
[1] Which is a nice way to organise your stu and most of all to have it look more professional
[3] So let s start organizing our stu ;-) Till Next Time
1. http://lh3.ggpht.com/_qd3TDEvIh4Y/S-ExNXoU2xI/AAAAAAAACbU/bZJQ8L4D0Hs/s1600-h/image%5B2%5D.png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/S-ExOLybPaI/AAAAAAAACbc/Enm5NdunRfg/s1600-h/image%5B5%5D.png 3. http://lh3.ggpht.com/_qd3TDEvIh4Y/S-ExO9e6fVI/AAAAAAAACbk/iBMufllFe4E/s1600-h/image%5B8%5D.png
[1] into :
[2] First add an extra .TabDimCell to your portalcontent.css and call it .TabDimCell2: 386
[4] On each dashboard page add an extra text element and check the contains HTML box:
[5] Add the following code to the text box [code] <script type=text/javascript> function addSep(id) { var tbody = document.getElementById(id).getElementsByTagName(TBODY)[ 0]; var td1 = document.createElement(td); var row = document.createElement(tr); td1.className = TabSep; td1.innerHTML = ; td1.id=tr2; row.appendChild(td1); tbody.appendChild(row); } function insCell(str,orgclassName) { var oTable = document.getElementById(TabsTable); var lastRow = oTable.rows.length; lastRow = lastRow -1 var mytable=document.getElementById(TabsTable) var newcell=mytable.rows[lastRow].insertCell(-1) //insert new cell to end of 2nd row newcell.innerHTML=str; if (orgclassName == TabDimCell) { 387
newcell.className = TabDimCell2; } if (orgclassName == TabHiCell) { newcell.className = TabHiCell2; } var newcell=mytable.rows[lastRow].insertCell(-1) //insert new cell to end of 2nd row newcell.className = TabSep TabDimSep; newcell.innerHTML = ; } var tds = document.getElementsByTagName(td); var TabCount = 0; var lTAB = new Array(); for (var td = 0; td < tds.length; td++) { if (tds[td].className != TabDimCell & & tds[td].className != TabHiCell ) { continue; } if (TabCount == 4) { addSep(TabsTable); } if (TabCount >= 4) { var str = tds[td].innerHTML; var orgclassName = tds[td].className; insCell(str,orgclassName); tds[td].style.display = NONE; tds[td+1].style.display = NONE; } TabCount = TabCount + 1; } </script> [/code] Ok i m not a full time javascript programmer so if you have a better solution please let me know. Till Next Time
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/S-K1X5iTenI/AAAAAAAACeE/KFzzf8tTEsM/s1600-h/image%5B3%5D.png 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/S-K1YVq59KI/AAAAAAAACeM/8aAsTpMvnpI/s1600-h/image%5B7%5D.png 3. http://lh4.ggpht.com/_qd3TDEvIh4Y/S-K1ZVHgAPI/AAAAAAAACeU/XywU6fckY3k/s1600-h/image%5B10%5D.png 4. http://lh5.ggpht.com/_qd3TDEvIh4Y/S-WVDcfKYDI/AAAAAAAACek/uClICsOsluA/s1600-h/image%5B3%5D.png 5. http://lh6.ggpht.com/_qd3TDEvIh4Y/S-K1aNcjw_I/AAAAAAAACec/C_l1bN3ikkM/s1600-h/image%5B13%5D.png
[1] This Article is only a guideline to an OBIEE naming convention for the repository. The most important aspect of a naming convention is that you use it consistently. The used naming convention should be readable for any future development. 388
Read / write attributes: RO = Read Only RW = Read Write 1.3 Physical Display Folder Name
[5] Format: Ocial Database name (Microsoft) or Schema Name (Oracle) Depending on the database this can be case sensitive. 1.5 Physical Schema Name (Microsoft)
[6] Format: Ocial Schema name (Microsoft). Depending on the database version this can be case sensitive. 389
[7] Format: Ocial table name. Depending on the database version this can be case sensitive. Be aware of trailing spaces. 1.7 Alias table name
[8] Format: TableName + 1.8 Physical Foreign Key A + 2 digit sequence number start = 01(for each table)
[2] Add them with a narrative view as I showed you before. Till next time
1. http://code.google.com/apis/visualization/documentation/gallery.html 2. http://lh6.ggpht.com/_qd3TDEvIh4Y/S-W7CGi8ITI/AAAAAAAACf0/MXcaxEqXrUc/s1600-h/image%5B3%5D.png
This Article is only a guideline to an OBIEE naming convention for the repository. The most important aspect of a naming convention is that you use it consistently. The used naming convention should be readable for any future development.
[3] 391
Format: LD
+ FolderName
[4] Format: TableType + table name TableType: Dim = Dimension Table Fact = Fact Table Bridge = Bridge Table 1.4 Logical Dimension / Hierachy Name:
[6] Format: RLS +Driving Table Name + + Receiving Table Name + Join Type if not inner join
Join Type if not inner join: RO = Right Outer Join LO = Left Outer Join
1. http://lh5.ggpht.com/_qd3TDEvIh4Y/S-E0N70MVkI/AAAAAAAACc0/zLGyylL_6XE/s1600-h/clip_image002%5B3%5D.jpg 2. http://lh4.ggpht.com/_qd3TDEvIh4Y/S-E0O61zltI/AAAAAAAACc8/gfm4NZYSlsI/s1600-h/clip_image004%5B3%5D.jpg 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/S-E0Prh19mI/AAAAAAAACdE/jvOdSAFzUsU/s1600-h/clip_image006%5B3%5D.jpg 4. http://lh4.ggpht.com/_qd3TDEvIh4Y/S-E0QV55cRI/AAAAAAAACdM/mTZydT1FoKQ/s1600-h/clip_image008%5B3%5D.jpg 5. http://lh5.ggpht.com/_qd3TDEvIh4Y/S-E0RKc7HEI/AAAAAAAACdU/KkEW8g6Z__Y/s1600-h/clip_image010%5B3%5D.jpg 6. http://lh6.ggpht.com/_qd3TDEvIh4Y/S-E0SLA8voI/AAAAAAAACdc/9VBrt7sCAYs/s1600-h/clip_image012%5B3%5D.jpg
392
OBIEE Remove Default button from one dashboard only (2010-05-11 18:51)
If you want to remove these from one page only:
[2] Check the contains HTML markup box Add the following script: [code] <script type=text/javascript> function RemoveDefaults() { var tds = document.getElementsByTagName(span); for (var td = 0; td < tds.length; td++) { if (tds[td].className != DashboardFormatLinks) { continue; } //alert(tds[td].innerHTML); tds[td].innerHTML = } } window.onload = RemoveDefaults; </script> [\code] et voila:
[1] This Article is only a guideline to an OBIEE naming convention for the repository. The most important aspect of a naming convention is that you use it consistently. The used naming convention should be readable for any future development. 1.1 Presentation Catalog Name:
[2] Format General: For End User Logical Name +Business Model Name + ) {* } +Business Model Name + ) {* }
Format Custom Display Name: VALUEOF(NQ SESSION.CN Format Custom Description: VALUEOF(NQ SESSION.CD {* } Only used for translated Repositories 1.2 Presentation Table Name
[3] Format General: For End User Logical Name VALUEOF(NQ SESSION.CN +Business Model Name + Business +Business Model Name + Business
Format Custom Description: VALUEOF(NQ SESSION.CD Model Table Name + ) {* } {* } Only used for translated Repositories 1.3 Presentation Column Name 394
[4] Format General: For End User Logical Name +Business Model Name + Business +Business Model Name + Business
Format Custom Display Name: VALUEOF(NQ SESSION.CN Model Table Name + Business Model Column Name + ) {* } Format Custom Description: VALUEOF(NQ SESSION.CD Model Table Name + Business Model Column Name + ) {* } {* } Only used for translated Repositories Till Next Time
OBIEE Remove PDF print option for one dashboard only (2010-05-11 21:13)
Or how to get from:
[1] to
[2] add this to a textbox on the dashboard: [code] <script type=text/javascript> function RemovePDFOption() { var tds = document.getElementsByTagName(span); for (var td = 0; td < tds.length; td++) { if (tds[td].className != DashboardFormatLinks) { continue; } 395
//alert(tds[td].innerHTML); var tHTML = tds[td].innerHTML; tHTML = tHTML.replace(PDF</a>,</a>); //alert(tHTML); tds[td].innerHTML = tHTML; } } window.onload = RemovePDFOption; </script> [/code] Yeah i know this is very crude (the link is still somewhat hidden there), but if you play around with javascript .replace and indexof you can clean it up even more. Till Next Time
1. http://lh4.ggpht.com/_qd3TDEvIh4Y/S-msRdLtDDI/AAAAAAAACgU/bC3jctjv9Ys/s1600-h/image%5B2%5D.png 2. http://lh6.ggpht.com/_qd3TDEvIh4Y/S-msR07h18I/AAAAAAAACgc/cuA6Cd0GgUc/s1600-h/image%5B5%5D.png
396
[3] to
[4] [code]
HR { visibility:hidden; } [/code] For one dashboard only: add a text box to the dashboard page:
[5] Add the following code (thanks Joe!) [code] <script type=text/javascript> var aElm=document.getElementsByTagName(hr); for (var i =0; i <aElm.length;i++) { aElm[i].parentNode.removeChild(aElm[i]); } </script> [/code] And the black line is gone: 397
[1] First of all Kudos to Hitesh for laying the ground work: [2]http://hiteshbiblog.blogspot.com/2010/04/obiee-showing-data-o n-calendar.html First you have to go to the MooTools site and download the basics: The mootools core: [3]http://mootools.net/download => choose the uncompressed version, it makes debugging easier. Next get the More building blocks Date, Scroller, Tips: [4]http://mootools.net/more Finally get the calendar control: [5]http://dansnetwork.com/mootools/events-calendar/download/ Put everything in a subfolder of the Res folder (if you are using OC4J as webserver, you have to sync both RES folders): 398
[6] Let s get some base data to work with: Startdate, Enddate, dayofweek, brand, revenue:
[8] In the prex part we rst select the size of the calendar control:
<link rel=stylesheet typetext/css href=./res/mooTools/mooECalLarge.css> or <link rel=stylesheet typetext/css href=./res/mooTools/mooECal.css> or <link rel=stylesheet typetext/css href=./res/mooTools/mooECalSmall.css> Next we add the references to the javscript:
<script
language=javascript 399
src=./res/mooTools/mootools-1.2.4-core-nc.js></script> <script language=javascript src=./res/mooTools/mootools-1.2.4.4-more.js></script> <script language=javascript src=./res/mooTools/mooECal.js></script> as div tag to hold the body:
<div id=calBody></div> and a function to set the background and font color: <script language=javascript>
function getDiv(holFlag) { if(holFlag==1 || holFlag==7) { return <div style=background-color: #990000;color: #;>; } else { return <div style=background-color: #999900;color: #;>; } } nally the header of the control:
new Calendar( {calContainer:calBody, newDate:1/3/2007, cEvents:new Array( The date is the date on which the control wil be opened. The total prex should look like this:
<link rel=stylesheet typetext/css href=./res/mooTools/mooECalLarge.css> <script language=javascript src=./res/mooTools/mootools-1.2.4-core-nc.js></script> <script language=javascript src=./res/mooTools/mootools-1.2.4.4-more.js></script> <script language=javascript src=./res/mooTools/mooECal.js></script> <div id=calBody></div> <script language=javascript> function getDiv(holFlag) { if(holFlag==1 || holFlag==7) { return <div style=background-color: #990000;color: #;>; } else { return <div style=background-color: #999900;color: #;>; } } new Calendar( {calContainer:calBody, newDate:1/3/2007, cEvents:new Array( In the narrative part we ll the array: 400
{ title: getDiv(@3) +@4: + @5 </div>, start: @1, end: @2, location: } In the postx we close the array:
) }); </script> Set the separator to , Warning if you try to save this from the narrative view you will get the opaque save screen&.
[9] switch to the criteria view rst and then save! Add the narrative to your compound lay-out:
[1] Based on a value or based on a presentation variable. But what if you want to do it based on an other column. Let s say you want the bar to be completely red if it s below the line and completely green if it s above the line: First add two dummy conditions one for red and one for green:
[2]
[3]
[4] Next goto the advanced tab and located the conditions in the XML:
[5] <saw:conditionFormats> <saw:conditionRule> <sawx:expr xsi:type=sawx:comparison op=less> <saw:columnRef columnID=c1/> <sawx:expr xsi:type=xsd:decimal>0</sawx:expr></sa wx:expr> <saw:visualFormats> 402
<saw:visualFormat className=barProp name=normalBar #FF0000/></saw:visualFormats></saw:conditionRule> <saw:conditionRule> <sawx:expr xsi:type=sawx:comparison op=greaterOrEqual> <saw:columnRef columnID=c1/> <sawx:expr xsi:type=xsd:decimal>0</sawx:expr></sa wx:expr> <saw:visualFormats> <saw:visualFormat className=barProp name=normalBar #00FF00/></saw:visualFormats></saw:conditionRule>
color=
color=
Chance <sawx:expr xsi:type=xsd:decimal>0</sawx:expr> to the column you want use like: <sawx:expr xsi:type=sawx:sqlExpression>11 Time Series.1-07 Revenue (Qago)</sawx:expr> Don t forget to press the set XML button:
[6]
[7] hmmmm this is not what we want! What went wrong? The expression builder for the chart conditional format accepted our tweak:
[8] The problem is the way the Presentation-server tells the Corda Engine to create the graph. Since the Corda engine can t see the data it needs to get it s conditions HardCoded. This means the Presentation server will evaluate the rst value of the SQL expression and sent it to the Corda engine. Is there a workaround? It s actually quit simple. Add two more columns to your table RED and GREEN:
[9] 403
[10]
[11]
[12]
[13]
405
8. http://lh3.ggpht.com/_qd3TDEvIh4Y/S-5P9vWOJFI/AAAAAAAACiE/OikIYQzDoM4/s1600-h/image%5B23%5D.png 9. http://lh4.ggpht.com/_qd3TDEvIh4Y/S-5P-HLpXGI/AAAAAAAACiM/b7bzrCqA6PM/s1600-h/image%5B42%5D.png 10. http://lh4.ggpht.com/_qd3TDEvIh4Y/S-5P_AXdPfI/AAAAAAAACiU/8bSot58oDRY/s1600-h/image%5B43%5D.png 11. http://lh3.ggpht.com/_qd3TDEvIh4Y/S-5P_gduhdI/AAAAAAAACic/URM3CmTDZoY/s1600-h/image%5B44%5D.png 12. http://lh5.ggpht.com/_qd3TDEvIh4Y/S-5QASopyqI/AAAAAAAACik/KrcQS8Z2cGI/s1600-h/image%5B35%5D.png 13. http://lh5.ggpht.com/_qd3TDEvIh4Y/S-5QBJqiGmI/AAAAAAAACis/Av4dRWW02dE/s1600-h/image%5B45%5D.png 14. http://lh4.ggpht.com/_qd3TDEvIh4Y/S-5QBw9WUQI/AAAAAAAACi0/UQAMNO-PBvo/s1600-h/image%5B46%5D.png
[2] Most manager won t be satised with this report because there isn t a time element present. Let s add a year:
[3] 406
[4] Okay what about the top10 for each year? Here is one solution: First convert the lter to SQL:
[5]
[6] Add a by to the TOPN Part: TOPN(F1 Revenue.1-01 Revenue (Sum All),10 by D0 Time.T05 Per Name Year ) <= 10
[7] 407
[8]
What about showing the top 2 products for each top10 customer? I will discus that in part2.
[1] Let s try to add the top2 product2 for each customer in the top 10. Start with adding the product column:
[2] You will notice that the revenue for each customer has dropped. This means we rst have to lock the revenue on a customer / year level:
[3] 409
[5] Some how I don t think this correct. Let s get the details for one customer:
[6] 410
He has bought several products so let s tweak this some more. We need to add the TOPN2 Filter for product by customer by year.
411
[1] He also brought back a ton of ideas he will be blogging in the near future. The main themes of the conference were data modelling within OBIEE and the launch of the product currently in our labs soon to be released but we won t tell you when& (Normal people just call it OBIEE 11g). It was great to meet Kurt Wolf and hear from the OBIEE s original father how the basics of OBIEE where thought up (while it was still NQuire). My complements for people from Oracle: Phil Bates, Mike Durran, Adam Bloom and Craig Stewart for NOT telling us when OBIEE 11g will be general available. (Even under intense pressure of everybody else ;-) ) Some other highlights were: Robin Muat (aka RNM1978) had brilliant presentation on how you can load test your OBIEE system and get valid results. Emiel van Bockel showed us that his modelling ideas he presented last year actually work. Antony Heljula give us some useful thoughts on how to determine your system requirements realistically. From all the other presentations you could start to see the integration of the whole BI stack around Oracle s Fusion Middle Ware package. All and all it was a nice conference and hopefully by next year we can see the rst implementations of OBIEE 11g. Till Next Time
1. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_f85cLXN-I/AAAAAAAACn8/EWStqVU6L1M/s1600-h/22052010052%5B3%5D.jpg
412
OBIEE Playing with TopN part 3 the Rank Function (2010-05-22 20:16)
The TOPN function is basically the RANK function with a lter. Knowing this can help us to get around the following error message:
[1] You can translate TOPN( column ,10) to a Where RANK( column ) <=10. How BottmN( column ,10)?. Try this: COUNT( column ) RANK( column ) <=9 {0 based }.
So the BottomN 10 customers become: SELECT D0 Time.T05 Per Name Year saw 0, D1 Customer.C0 Cust Key saw 1, D1 Customer.C1 Cust Name saw 2, F1 Revenue.1-01 Revenue (Sum All) saw 3, COUNT(F1 Revenue.1-01 Revenue (Sum All) by D0 Time.T05 Per Name Year)RANK(F1 Revenue.1-01 Revenue (Sum All) by D0 Time.T05 Per Name Year) saw 4 FROM Sample Sales WHERE COUNT(F1 Revenue.1-01 Revenue (Sum All) by D0 Time.T05 Per Name Year)-RANK(F1 Revenue.1-01 Revenue (Sum All) by D0 Time.T05 Per Name Year) <= 9 ORDER BY saw 0, saw 4
Date 16-June-2010
4-July-2010 7-July-2010 27-July-2010 31-July-2010 24-August-2010 19-September-2010 27-September-2010 18-October-2010 17-November-2010 05-December-2010
Daan Bakboord John Minkjan Rich RMN1978 John Minkjan RMN1978 lost_in_space lost_in_space John Minkjan John Minkjan
4.6
June
Most countries have there local launch at the same time with a video link to the London event. From the information I have so far this is only a marketing launch, not the general availability. (Of course I hope I m wrong ;-) ) Nice to see even PCWORLD has found the bet: [1]http://www.pcworld.com/businesscenter/article/197910/major oracle bi launch coming next month.html. It s still open so have a shot. Till Next Time.
1. http://www.pcworld.com/businesscenter/article/197910/major_oracle_bi_launch_coming_next_month.html
ON LOG OUT AND IN 25 May 2010 1.6 MB 9309415 CANNOT RUN A BIP REPORT WITH BIND VARIABLES USING BI DATA SRC 19 May 2010 28.1 MB 9698146 MERGE REQUEST ON TOP OF 10.1.3.4.1 FOR BUGS 8290868 8331209 8332167 8350962 18 May 2010 41 MB 9548172 JAPANESE CHARACTER SET NOT PASSED CORRECTLY TO DRILL REPORT IN FIREFOX BROWSER 18 May 2010 15.8 KB 9394038 REFRESH LINK IN A REQUEST INSIDE A DASHBOARD DOESNT DISPLAY UPDATED DATA 14 May 2010 2.7 MB 9646342 MERGE REQUEST ON TOP OF 10.1.3.4.1 FOR BUGS 9492821 8439796 13 May 2010 2.7 MB 9483199 PERFORMANCE DROP SINCE 10.1.3.3.2 DUE TO SQL GENERATION IN 10.1.3.4.1 13 May 2010 73.8 KB 9523443 NESTED AGO AND TODATE NOT WORKING AGAINST ESSBASE 05 May 2010 207.8 KB 8768948 NQSSERVER FREQUENTLY CRASHING - 3-975745001 04 May 2010 28.1 MB 9595228 MERGE REQUEST ON TOP OF 10.1.3.4.1 FOR BUGS 6220349 8394579 04 May 2010 3.6 MB 8727821 CR #12-1U5TORQ: MODIFY NQSSERVER.EXE PE HEADER FLAGS TO SUPPORT LARGE ADDRESSES 28-apr-10 1004.3 KB
[2] into :
[3] 416
[4] First follow the steps from the rst article. Next change the code to: [code] <script type=text/javascript> var allHTMLTags = new Array(); onload=function() { if (document.getElementsByClassName == undened) { document.getElementsByClassName = function(className) { var hasClassName = new RegExp((?:|\\s) + className + (?: $|\\s)); var allElements = document.getElementsByTagName(*); var results = []; var element; for (var i = 0; (element = allElements[i]) != null; i++) { var elementClass = element.className; if (elementClass & & elementClass.indexOf(className) != -1 & & hasClassName.test(elementClass)) results.push(element); } return results; } } } function insertAfter( referenceNode, newNode ) { referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); } function addNewLI( obj ) { x = document.getElementsByClassName(TabTable)[0]; var newTable = document.createElement(table); var newLI = document.createElement(tbody); newLI.id=TabsTableRow2; var td1 = document.createElement(td); var row = document.createElement(tr); td1.className = TabSep; td1.innerHTML = ; td1.id=tr2; td1.style.width =40px; row.appendChild(td1); newLI.className = TabTable; newLI.appendChild(row); newTable.cellSpacing = 0px; newTable.cellPadding = 0px; newTable.appendChild(newLI); insertAfter( x, newTable ); } 417
function addSep(id) { var tbody = document.getElementById(id).getElementsByTagName(TBODY)[ 0]; addNewLI( tbody ); } function insCell(str,orgclassName,TabCount) { var oTable = document.getElementById(TabsTableRow2); var lastRow = oTable.rows.length; lastRow = lastRow -1 var mytable=document.getElementById(TabsTableRow2) var newcell=mytable.rows[lastRow].insertCell(-1) //insert new cell to end of 2nd row newcell.innerHTML=str; if (orgclassName == TabDimCell) { newcell.className = TabDimCell2; } if (orgclassName == TabHiCell) { newcell.className = TabHiCell2; } newcell.style.width = 100px; var newcell=mytable.rows[lastRow].insertCell(-1) //insert new cell to end of 2nd row newcell.className = TabSep TabDimSep; newcell.innerHTML = ; } function insLastCell(str,orgclassName,TabCount) { var oTable = document.getElementById(TabsTableRow2); var lastRow = oTable.rows.length; lastRow = lastRow -1 var mytable=document.getElementById(TabsTableRow2) var newcell=mytable.rows[lastRow].insertCell(-1) //insert new cell to end of 2nd row newcell.innerHTML = ; var mytable2=document.getElementById(TabsTableRow2) newcell.style.textAlign = right; var x = screen.width ; x = x - (((TabCount - 4) * 100)+ 130); x = x+px; newcell.style.width = x; } var tds = document.getElementsByTagName(td); var TabCount = 0; var lTAB = new Array(); for (var td = 0; td < tds.length; td++) { if (tds[td].className != TabDimCell & & tds[td].className != TabHiCell ) { continue; } if (TabCount == 4) { addSep(TabsTable); } tds[td].style.width = 100px if (TabCount >= 4) { var str = tds[td].innerHTML; var orgclassName = tds[td].className; 418
insCell(str,orgclassName, TabCount); tds[td].style.display = NONE; tds[td+1].style.display = NONE; } TabCount = TabCount + 1; } insLastCell(str,orgclassName,TabCount); </script> [/code] Till Next Time\
1. http://obiee101.blogspot.com/2010/05/obiee-multi-line-tabs.html 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/S-K1X5iTenI/AAAAAAAACeE/KFzzf8tTEsM/s1600-h/image%5B3%5D.png 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/S-K1YVq59KI/AAAAAAAACeM/8aAsTpMvnpI/s1600-h/image%5B7%5D.png 4. http://lh4.ggpht.com/_qd3TDEvIh4Y/TCIA0_rezeI/AAAAAAAACyg/RkZvlvAwmzI/s1600-h/image%5B3%5D.png
[2] Next goto Tools > Create Report (or use CTRL-R): 419
[5] It s saved as a tab delimited le. you can do the same for dashboards: 420
[1] Kudos for the rst one who can tell where the developer should report rst thing tomorrow morning and especially why! I will post the answer in a couple of days if no one has given any comments until then. Till Next Time
1. http://lh3.ggpht.com/_qd3TDEvIh4Y/TCRRbmjwJ5I/AAAAAAAAC1Y/zxKzGojciQE/s1600-h/image%5B3%5D.png
421
[5] 422
or wait for 11g to do some real spatial stu& till next time
1. http://siebel-essentials.blogspot.com/2010/06/google-maps-encore-again-nochmal.html, 2. http://lh6.ggpht.com/_qd3TDEvIh4Y/TCNXprEUN4I/AAAAAAAACzg/kVZ2MU4m2I4/s1600-h/image%5B9%5D.png 3. http://lh6.ggpht.com/_qd3TDEvIh4Y/TCNXrkRQ9zI/AAAAAAAACzo/zTgrUm-8hyI/s1600-h/image%5B5%5D.png 4. http://lh5.ggpht.com/_qd3TDEvIh4Y/TCNXscpkL1I/AAAAAAAACzw/nOI5noI6JIQ/s1600-h/image%5B8%5D.png 5. http://lh3.ggpht.com/_qd3TDEvIh4Y/TCNXtaHayPI/AAAAAAAACz4/pwxavPj1w5o/s1600-h/image%5B13%5D.png
[4]
you can make it dynamic by chancing the hard-coded row or column names to dynamic ones using the dollar sign $:
[5]
[6]
and [7]
Firefox:
[9]
IExplorer: 425
[10] Chrome:
[11]
1. http://obiee101.blogspot.com/2009/01/obiee-rowbased-calculations-in-pivot.html 2. http://lh5.ggpht.com/_qd3TDEvIh4Y/TCha3wT1i9I/AAAAAAAAC2A/1NiLkNt17Bk/s1600-h/image%5B18%5D.png 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/TCha4qbm_hI/AAAAAAAAC2I/9hFAkGa96Ok/s1600-h/image%5B19%5D.png 4. http://lh5.ggpht.com/_qd3TDEvIh4Y/TCha5RT_udI/AAAAAAAAC2Q/C-1Xr93JoJQ/s1600-h/image%5B20%5D.png
426
[2] Put a space in both your table heading and Column Heading, check the custom headings box. Press the format button for the column heading:
[4] like : [code] background-image:url(res/sk eight:30px; [/code] Check the results: 427 oracle10/answers/abbcompound.gif);background-repeat:no-repeat;h
4.7
July
It has to t a 1024 x 768 screen. All CSS / Javascript changes have to be from the dashboard page, not the webserver. 428
You cant use external graph engines (FI: Google Charts or Maps) Everything has to work under the repository Administrator account Its has to work in both IExplorer and Firefox. What are we looking for:
Only the catalog, since we all are using the Extended Sample Sales repository. Please give it a unique name : OBIEE COMP YOUR NAME Of course your real name and contact info. And a small description of what you have done. Where do I send it? Zip it up a mail it to: john dot minkjan at ciber dot nl What will be the prize? Of course the glory and the right to put it on your CV. We also will trough in a goodie bag. When does the competition close? August 30th 2010 00:00 GMT Who will be the judges? Of course the best of the best:
Mark Rittman - RittmanMead Emiel van Bockel - BiFacts / Centraal Boekhuis Daan Bakboord - Scamander Solutions Christian Berg - Independant Consultant John Minkjan - Ciber Can we have any correspondence on the result? Of course not! ;-) And yes, we do keep the right to change the rules along the way!
1. http://download.oracle.com/technology/products/bi/files/oracle_bi_sample_analysis_setup_files.zip
429
[4]
[1] Goto Tools > Options > General and check the show rowcount box:
[1] 431
When debugging a large physical schema it is sometimes handy to have the qualied names: Goto Tools > Options > General and check the Display qualied names box:
[1] Goto Tools > Options > General and check the .. box:
432
[1] Goto Tools > Options > General and check the Display Original name for Alias box:
[2]
[1]report_agreements [2]report_account_appl [3]report_activities [4]report_automotive2 [5] report_bad_progress [6]report_automotive1 [7]report_bankAccount [8]report_bottomN [9]report_bad_percentage [10]report_bankBalances [11] report_call [12]report_bad_value [13]report_callcenter [14] report_cautionary_progress [15]report_cautionary_percentage [16]report_cautionary_value [17]report_comm2 [18]report_comm1 [19]report_cust_sat [20]report_expiration [21]report_email [22]report_forecasting [23]report_geographical [24]report_good_progress [25]report_generic [26]report_good_percentage [27]report_household [28]report_good_value [29] report_insurance_Policy [30]report_insuranceClaim [31]report_investigative [32]report_invoices [33]report_location [34]report_medicalResearch [35]report_mktShare [36]report_order [37]report_phone [38]report_pillcount [39]report_pipeline [40]report_reportsCatalog [41]report_retailAudit [42]report_salesrep [43]report_salesVolume [44]report_service_profitibility [45]report_scorecard 433
[46]report_serviceRequest [47]report_targetActual [48]report_topN [49]report_tradepromo [50]report_tradefund [51]report_universal_queue [52]report_trends [53] report_win_lossDeals [54]report_medicalResearch
\portal\ [55]actuateroilarge [56]actuateroxlarge [57]add2bb [58]add2bb [59]bgviewbarsep [60]blank [61]btn_max [62]btn_min [63]dash_refresh [64]dashboardwarning [65]download [66]idashed_addcolumn [67] idashed_bb [68]hdgportals
Visible links 1.
agreements5.jpg
http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdNwsNMHI/AAAAAAAACoI/5chTEsehUNk/s1600-h/report_
2. http://lh6.ggpht.com/_qd3TDEvIh4Y/S_hdO-dmTLI/AAAAAAAACoQ/68y6KA5e_Zo/s1600-h/report_account_appl5.jpg 3. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdPpiuVAI/AAAAAAAACoY/1nmEmgu_4Ac/s1600-h/report_activities2.jpg 4. http://lh6.ggpht.com/_qd3TDEvIh4Y/S_hdQZpAfkI/AAAAAAAACog/yYlJW8aLMAg/s1600-h/report_automotive22.jpg 5. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdR4ohaQI/AAAAAAAACoo/GnNM4Z_OFjQ/s1600-h/report_bad_progress2.jpg 6. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdSoMFfWI/AAAAAAAACow/d9wc629BMkA/s1600-h/report_automotive12.jpg 7. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdTaI6P4I/AAAAAAAACo4/wLdlY9BbiFg/s1600-h/report_bankAccount2.jpg 8. http://lh6.ggpht.com/_qd3TDEvIh4Y/S_hdUAIRFAI/AAAAAAAACpA/RcWY1pqo_vQ/s1600-h/report_bottomN2.jpg 9. jpg 10. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hdVjDMu9I/AAAAAAAACpQ/lh4VSIPIvws/s1600-h/report_bankBalances2.jpg 11. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdWLAoQ_I/AAAAAAAACpY/fhCYU8VEkis/s1600-h/report_call2.jpg 12. http://lh6.ggpht.com/_qd3TDEvIh4Y/S_hdW8LOQRI/AAAAAAAACpg/33sRaLA8hes/s1600-h/report_bad_value2.jpg 13. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hdX4vXvbI/AAAAAAAACpo/4NPRq1Ae7os/s1600-h/report_callcenter2.jpg 14. 15. 16. 17. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdalghyQI/AAAAAAAACqI/uhLSbN60rVU/s1600-h/report_comm22.jpg 18. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdbFonjQI/AAAAAAAACqQ/LiCB5v-f1Tc/s1600-h/report_comm12.jpg 19. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdcifhyzI/AAAAAAAACqY/Bfdgo0IUWcA/s1600-h/report_cust_sat2.jpg 20. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hddcA2fzI/AAAAAAAACqg/MuTNpdcacd8/s1600-h/report_expiration2.jpg http: http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hdZOB2EtI/AAAAAAAACp4/9ZacQuGf50E/s1600-h/report_cautionary_ http: //lh6.ggpht.com/_qd3TDEvIh4Y/S_hdYezwv8I/AAAAAAAACpw/eXEt8rz1EHM/s1600-h/report_cautionary_progress2.jpg percentage2.jpg //lh3.ggpht.com/_qd3TDEvIh4Y/S_hdZ9LjhYI/AAAAAAAACqA/EknTzALrbNQ/s1600-h/report_cautionary_value2.jpg http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hdU9Bv_eI/AAAAAAAACpI/IKD2hq6v6Xw/s1600-h/report_bad_percentage2.
434
21. http://lh6.ggpht.com/_qd3TDEvIh4Y/S_hdd4taYpI/AAAAAAAACqo/DIZqGkgy1gI/s1600-h/report_email2.jpg 22. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdeuSd94I/AAAAAAAACqw/VoFT-U3qzx4/s1600-h/report_forecasting2.jpg 23. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hdfz2LKZI/AAAAAAAACq4/zBgTLHTVUc4/s1600-h/report_geographical2.jpg 24. jpg 25. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdg3thL6I/AAAAAAAACrI/SMXWZiY1TRo/s1600-h/report_generic2.jpg 26. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdht_paFI/AAAAAAAACrQ/1aEU6I3C040/s1600-h/report_good_percentage2. jpg 27. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdiXZuMsI/AAAAAAAACrY/UJzq7hDKUGM/s1600-h/report_household2.jpg 28. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdjDnckvI/AAAAAAAACrg/Ir-GvY8ZcjA/s1600-h/report_good_value2.jpg 29. 30. jpg 31. jpg 32. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hdljDAYnI/AAAAAAAACsA/4Cq37cY7cPU/s1600-h/report_invoices2.jpg 33. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdmJiHBBI/AAAAAAAACsI/9WezFV2UbjQ/s1600-h/report_location2.jpg 34. http://lh6.ggpht.com/_qd3TDEvIh4Y/S_hdmyWmI1I/AAAAAAAACsQ/7k0G0Yh456o/s1600-h/report_medicalResearch2. jpg 35. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdnfT3dTI/AAAAAAAACsY/ZDHy8lfhbmc/s1600-h/report_mktShare2.jpg 36. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hdoPC-VbI/AAAAAAAACsg/k_b4tqb362c/s1600-h/report_order2.jpg 37. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdozfcS-I/AAAAAAAACso/osZGGMXAMpQ/s1600-h/report_phone2.jpg 38. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hdpcIBxpI/AAAAAAAACsw/sOOU1TLK3GY/s1600-h/report_pillcount2.jpg 39. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdp1AgmWI/AAAAAAAACs4/rpeGcMksnPk/s1600-h/report_pipeline2.jpg 40. jpg 41. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdrc3u5yI/AAAAAAAACtI/i1RW3RoW9e8/s1600-h/report_retailAudit2.jpg 42. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hdr2zvfmI/AAAAAAAACtQ/n6fogycaOUo/s1600-h/report_salesrep2.jpg 43. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hdsjSg9fI/AAAAAAAACtY/B91tbuyhsL8/s1600-h/report_salesVolume2.jpg 44. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdtpuZeTI/AAAAAAAACtg/IIplQNjp5aQ/s1600-h/report_service_ profitibility2.jpg 45. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hdufoV1eI/AAAAAAAACto/4TUe_H-CdTM/s1600-h/report_scorecard2.jpg 46. jpg 47. http://lh6.ggpht.com/_qd3TDEvIh4Y/S_hdvjVP7aI/AAAAAAAACt4/5w4JIIrkxvs/s1600-h/report_targetActual2.jpg 48. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdwdRrhBI/AAAAAAAACuA/V7_4vuhTQnY/s1600-h/report_topN2.jpg 49. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdxeD_PRI/AAAAAAAACuI/DGpANAQib90/s1600-h/report_tradepromo2.jpg 50. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdx_Z4Q7I/AAAAAAAACuQ/5yI0MWXtBQM/s1600-h/report_tradefund2.jpg 51. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdygaKGII/AAAAAAAACuY/UI7SqLJZ5Qk/s1600-h/report_universal_queue2. jpg 52. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdza3z_CI/AAAAAAAACug/q2o4HF0MLdQ/s1600-h/report_trends2.jpg 53. jpg 54. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hd0kLYqsI/AAAAAAAACuw/lbQNPAJRxN4/s1600-h/report_medicalResearch5. jpg 55. gif 56. gif 57. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hd2tC6j2I/AAAAAAAACvI/MLiG44zRPy0/s1600-h/add2bb%5B2%5D.gif 58. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hd3VY9jPI/AAAAAAAACvQ/8t5Xp96y_hs/s1600-h/add2bb%5B5%5D.gif 59. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hd32dLc-I/AAAAAAAACvY/OruWosFi7sk/s1600-h/bgviewbarsep%5B2%5D.gif http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hd2EiwrhI/AAAAAAAACvA/KhX9b-hPJNI/s1600-h/actuateroxlarge%5B2%5D. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hd1blJCtI/AAAAAAAACu4/ALdMW1O6mlI/s1600-h/actuateroilarge%5B2%5D. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hd0MwkSYI/AAAAAAAACuo/isCa2p1LLws/s1600-h/report_win_lossDeals2. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdvOuI8PI/AAAAAAAACtw/ZgVZwCCE5cw/s1600-h/report_serviceRequest2. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hdqoRe3JI/AAAAAAAACtA/Ztxb3I67h1Y/s1600-h/report_reportsCatalog2. http://lh6.ggpht.com/_qd3TDEvIh4Y/S_hdk8wa8uI/AAAAAAAACr4/MbgOX5mfE8s/s1600-h/report_investigative2. http: http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdkcC2CMI/AAAAAAAACrw/GozwDK6kSWc/s1600-h/report_insuranceClaim2. //lh3.ggpht.com/_qd3TDEvIh4Y/S_hdjhyE3kI/AAAAAAAACro/SDwkLf_idb4/s1600-h/report_insurance_Policy2.jpg http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hdgdjiEDI/AAAAAAAACrA/OrxMJuPvbPY/s1600-h/report_good_progress2.
435
60. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hd4hLkqjI/AAAAAAAACvg/1swYXiXHD8g/s1600-h/blank%5B2%5D.gif 61. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hd5dPzKWI/AAAAAAAACvo/6L2wpR67PwU/s1600-h/btn_max%5B2%5D.gif 62. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hd536rKRI/AAAAAAAACvw/H2XUtVZXJQo/s1600-h/btn_min%5B2%5D.gif 63. http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hd6g6tZGI/AAAAAAAACv4/EFWSB-IrOg4/s1600-h/dash_refresh%5B2%5D.gif 64. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hd7Nt2xOI/AAAAAAAACwA/nIeR1wprjxc/s1600-h/dashboardwarning%5B2%5D. gif 65. http://lh6.ggpht.com/_qd3TDEvIh4Y/S_hd78g-vmI/AAAAAAAACwI/KH2FhsKIvqg/s1600-h/download%5B2%5D.gif 66. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hd8ihAhgI/AAAAAAAACwQ/2OBDS2l6Yyo/s1600-h/idashed_addcolumn%5B2% 5D.gif 67. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hd9PMaIDI/AAAAAAAACwY/V6L69D5AFxk/s1600-h/idashed_bb%5B2%5D.gif 68. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hd9oH-kvI/AAAAAAAACwg/iTCx7K3gnw4/s1600-h/hdgportals%5B2%5D.gif 69. 70. 71. jpg 72. http://lh3.ggpht.com/_qd3TDEvIh4Y/S_heAuvMGaI/AAAAAAAACxA/0FPrxaGZwqU/s1600-h/usa_map_1color_noLabels% 5B3%5D.jpg 73. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_heBZJzsXI/AAAAAAAACxI/3o_rcM1dFm0/s1600-h/usa_map_4color_noLabels% 5B3%5D.jpg 74. http://lh5.ggpht.com/_qd3TDEvIh4Y/S_heCJ6g-KI/AAAAAAAACxQ/OBI4hZuZVs0/s1600-h/world_map_1color%5B3%5D. jpg 75. http://lh6.ggpht.com/_qd3TDEvIh4Y/S_heC126MII/AAAAAAAACxY/e5S8bVliORg/s1600-h/world_map_4color%5B3%5D. jpg http://lh3.ggpht.com/_qd3TDEvIh4Y/S_hd-Z_hweI/AAAAAAAACwo/VEq598qm0jA/s1600-h/europe_map_1color%5B3% http://lh5.ggpht.com/_qd3TDEvIh4Y/S_hd_A2og6I/AAAAAAAACww/JGlrvWibweM/s1600-h/europe_map_4color%5B3% http://lh4.ggpht.com/_qd3TDEvIh4Y/S_hd_-Bw5JI/AAAAAAAACw4/n10Lg5VEito/s1600-h/usa_map_1color%5B3%5D. 5D.jpg 5D.jpg
[2] Add the following code: [code] <script type=text/javascript> var tds = document.getElementsByTagName(table); for (var td = 0; td < tds.length; td++) { if (tds[td].className != PortalBanner & & tds[td].className != PortalBottomTable ) { continue; } if (tds[td].className == PortalBanner) { //alert (tds[td].className); var x = tds[td].parentNode; //alert (x.className); x.removeChild(tds[td]); } if (tds[td].className == PortalBottomTable) { //alert (tds[td].className); 436
var x = tds[td].parentNode; //alert (x.className); x.removeChild(tds[td]); } } </script> [/code] [3] Till Next Time
1. http://lh3.ggpht.com/_qd3TDEvIh4Y/TC2wLWN8SHI/AAAAAAAAC34/-r_dF5VYHps/s1600-h/image%5B2%5D.png 2. http://lh3.ggpht.com/_qd3TDEvIh4Y/TC2wNe-onCI/AAAAAAAAC4A/lOT_cwwQalI/s1600-h/image%5B5%5D.png 3. http://lh6.ggpht.com/_qd3TDEvIh4Y/TC2wNxahpZI/AAAAAAAAC4I/oi3sBSuOpsM/s1600-h/image%5B8%5D.png
437