<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1821553060466545035</id><updated>2012-01-23T13:25:20.352-08:00</updated><category term='Aggregation Rules'/><category term='Treemap'/><category term='BI Answers'/><category term='Graph'/><category term='Fusions Middleware Control'/><category term='OLAP'/><category term='Architecture'/><category term='Troubleshoot'/><category term='Visualization'/><category term='Cache'/><category term='Aggregate Navigation'/><category term='Sections'/><category term='Calendar'/><category term='BI Server'/><category term='OBIEE11g'/><category term='Errors'/><category term='Visio'/><category term='Dashoard'/><category term='Modeling'/><category term='Design'/><category term='OBIEE'/><category term='Client'/><category term='OPMN'/><category term='Configuration'/><category term='Administration'/><category term='C#'/><category term='iPhone'/><category term='Prompts'/><category term='Narrative View'/><category term='Purge'/><category term='CommandLine'/><category term='ODBC'/><category term='Services'/><category term='Style'/><title type='text'>Hitesh's BI Blog</title><subtitle type='html'>Everything About Oracle Business Intelligence</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-3312387369504931705</id><published>2010-11-25T02:40:00.000-08:00</published><updated>2010-11-25T21:48:01.956-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='OPMN'/><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE11g'/><category scheme='http://www.blogger.com/atom/ns#' term='CommandLine'/><category scheme='http://www.blogger.com/atom/ns#' term='Services'/><title type='text'>OBIEE11g - Stopping and Starting Services from Command Line</title><content type='html'>In the previous post I showed how to stop/start OBIEE 11g services using Fusion Middleware Control. This post shows how to achieve same using command line.&lt;br /&gt;&lt;br /&gt;OBIEE 11g installer creates opmnctl.bat file for each instance. To manage services start command prompt and go to the bin folder of the instance  \{MWH}\instances\instance1\bin &lt;br /&gt;&lt;br /&gt;Run following command to check the status of all the services running under the instance.&lt;br /&gt;&lt;br /&gt;&lt;PRE&gt;&lt;DIV style="padding:3px;background-color:#c0c0c0;border:2px dashed #999999"&gt;opmnctl status&lt;/DIV&gt;&lt;/PRE&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dNBGTOwrvxw/TO4xsBJaKrI/AAAAAAAAAKU/HbQd4ssPL9o/s1600/fig4.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 119px;" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/TO4xsBJaKrI/AAAAAAAAAKU/HbQd4ssPL9o/s400/fig4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5543422823631563442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can use &lt;i&gt;ias-component&lt;/i&gt; name in the output to stop/start individual service.&lt;br /&gt;&lt;br /&gt;For example, following command stops presentation service.&lt;br /&gt;&lt;br /&gt;&lt;PRE&gt;&lt;DIV style="padding:3px;background-color:#c0c0c0;border:2px dashed #999999"&gt;opmnctl stopproc ias-component=coreapplication_obips1&lt;/DIV&gt;&lt;/PRE&gt;&lt;br /&gt;&lt;br /&gt;And following command starts presentation service&lt;br /&gt;&lt;br /&gt;&lt;PRE&gt;&lt;DIV style="padding:3px;background-color:#c0c0c0;border:2px dashed #999999"&gt;opmnctl startproc ias-component=coreapplication_obips1&lt;/DIV&gt;&lt;/PRE&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dNBGTOwrvxw/TO4xrwSwrxI/AAAAAAAAAKM/pzosRRKxMoU/s1600/fig5.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://4.bp.blogspot.com/_dNBGTOwrvxw/TO4xrwSwrxI/AAAAAAAAAKM/pzosRRKxMoU/s400/fig5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5543422819107385106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Following commands can be used to stop/start all services in the instance.&lt;br /&gt;&lt;br /&gt;&lt;PRE&gt;&lt;DIV style="padding:3px;background-color:#c0c0c0;border:2px dashed #999999"&gt;opmnctl stopall&lt;br&gt;&amp;nbsp;&lt;BR&gt;opmnctl startall&lt;/DIV&gt;&lt;/PRE&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dNBGTOwrvxw/TO4xrmlWl8I/AAAAAAAAAKE/ylUePRJBISE/s1600/fig6.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 112px;" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/TO4xrmlWl8I/AAAAAAAAAKE/ylUePRJBISE/s400/fig6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5543422816501012418" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-3312387369504931705?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/3312387369504931705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/11/obiee11g-stopping-and-starting-services_25.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/3312387369504931705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/3312387369504931705'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/11/obiee11g-stopping-and-starting-services_25.html' title='OBIEE11g - Stopping and Starting Services from Command Line'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dNBGTOwrvxw/TO4xsBJaKrI/AAAAAAAAAKU/HbQd4ssPL9o/s72-c/fig4.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-9010873134311218544</id><published>2010-11-25T01:47:00.000-08:00</published><updated>2010-11-25T21:48:24.961-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='OPMN'/><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE11g'/><category scheme='http://www.blogger.com/atom/ns#' term='Fusions Middleware Control'/><category scheme='http://www.blogger.com/atom/ns#' term='Services'/><title type='text'>OBIEE11g - Stopping and Starting Services using Fusion Middleware Control</title><content type='html'>In OBIEE 10g all five services could be stopped and started from the windows services management console. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/TO4x_wEifTI/AAAAAAAAAKs/-YX0QFxEvHI/s1600/fig1.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 255px;" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/TO4x_wEifTI/AAAAAAAAAKs/-YX0QFxEvHI/s400/fig1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5543423162645118258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, things have changed with OBIEE 11g because of the change in the architecture, specifically related to scalability. All the services are maintained through Oracle Process Manager and Notification (OPMN) server. Stopping/Starting this service will stop/start all BI services for that instance.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dNBGTOwrvxw/TO5cCg_5amI/AAAAAAAAALE/dC0LpQwhqa0/s1600/fig1a.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 245px;" src="http://4.bp.blogspot.com/_dNBGTOwrvxw/TO5cCg_5amI/AAAAAAAAALE/dC0LpQwhqa0/s400/fig1a.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5543469389627091554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Most of the administration activities are performed using Fusion Middleware (FMW) &lt;br /&gt;Control in OBIEE 11g. You can stop and start services from FMW Control too.&lt;br /&gt;&lt;br /&gt;Logon to FMW Control using URL http://hostname:7001/em&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/TO4xtBjlxSI/AAAAAAAAAKk/3nQ9WpHLBUs/s1600/fig2.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 231px;" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/TO4xtBjlxSI/AAAAAAAAAKk/3nQ9WpHLBUs/s400/fig2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5543422840921244962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Select coreapplication under Business Intelligence in the left tree in FMW Control. The "Overview" tab on the right will show number of services running (Generally 5, but may be different based on your scalability settings). You can Stop, Start or Restart all services using buttons provided.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dNBGTOwrvxw/TO4xsj7a_uI/AAAAAAAAAKc/hFpuoM2DtZY/s1600/fig3.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 243px;" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/TO4xsj7a_uI/AAAAAAAAAKc/hFpuoM2DtZY/s400/fig3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5543422832968138466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To stop and start individual services, navigate to "Availability" tab under "Capacity Management" tab. You can stop/start all or selective services here.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dNBGTOwrvxw/TO46PqYSWwI/AAAAAAAAAK8/vynIwIshJJ0/s1600/fig3a.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 182px;" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/TO46PqYSWwI/AAAAAAAAAK8/vynIwIshJJ0/s400/fig3a.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5543432232088263426" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-9010873134311218544?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/9010873134311218544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/11/obiee11g-stopping-and-starting-services.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/9010873134311218544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/9010873134311218544'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/11/obiee11g-stopping-and-starting-services.html' title='OBIEE11g - Stopping and Starting Services using Fusion Middleware Control'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dNBGTOwrvxw/TO4x_wEifTI/AAAAAAAAAKs/-YX0QFxEvHI/s72-c/fig1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-717824654158739407</id><published>2010-11-12T21:12:00.000-08:00</published><updated>2010-11-12T21:40:12.256-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Purge'/><category scheme='http://www.blogger.com/atom/ns#' term='Cache'/><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE'/><category scheme='http://www.blogger.com/atom/ns#' term='BI Server'/><title type='text'>OBIEE - Purge BI Server Cache from Analytic Web Manually</title><content type='html'>All of us knows how to purge BI Server cache manually from Analytic Administration Tool i.e. Go to Manage &gt; Cache. Select cache entries, right click and purge.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dNBGTOwrvxw/TN4gpyvpLqI/AAAAAAAAAJ8/8ApmoWGtaJI/s1600/fig1.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5538900494080618146" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 336px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/TN4gpyvpLqI/AAAAAAAAAJ8/8ApmoWGtaJI/s400/fig1.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But what if you are working on reports remotely using Analytic Web and need to clear the BI Server cache? Here's the trick.&lt;br /&gt;&lt;br /&gt;Go to Settings &gt; Administration &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dNBGTOwrvxw/TN4gpktuONI/AAAAAAAAAJ0/eR5lOB2NNbk/s1600/fig2.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5538900490314463442" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 45px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/TN4gpktuONI/AAAAAAAAAJ0/eR5lOB2NNbk/s400/fig2.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the Administration dialog select "Issue SQL"&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dNBGTOwrvxw/TN4gpbRfAPI/AAAAAAAAAJs/v2iTuUuPD5s/s1600/fig3.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5538900487780106482" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 187px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/TN4gpbRfAPI/AAAAAAAAAJs/v2iTuUuPD5s/s400/fig3.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the SQL Statement textbox in the "Issue SQL Directly" dialog, enter the following statement and click "Issue SQL" button.&lt;br /&gt;&lt;br /&gt;&lt;PRE&gt;Call SAPurgeAllCache();&lt;/PRE&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/TN4gpEoJOkI/AAAAAAAAAJk/Fl5ECf5ROLs/s1600/fig4.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5538900481701132866" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 265px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/TN4gpEoJOkI/AAAAAAAAAJk/Fl5ECf5ROLs/s400/fig4.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Allow some time for BI server to clear the cache. The page will refresh with results message at the bottom saying operation is successful.&lt;br /&gt;&lt;br /&gt;You can also use other &lt;a href="http://download.oracle.com/docs/cd/E12103_01/books/admintool/admintool_QueryCaching6.html" target="_blank"&gt;cache purge functions&lt;/a&gt; based on your need.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-717824654158739407?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/717824654158739407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/11/obiee-purge-bi-server-cache-from.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/717824654158739407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/717824654158739407'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/11/obiee-purge-bi-server-cache-from.html' title='OBIEE - Purge BI Server Cache from Analytic Web Manually'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dNBGTOwrvxw/TN4gpyvpLqI/AAAAAAAAAJ8/8ApmoWGtaJI/s72-c/fig1.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-2845194655429579671</id><published>2010-11-04T21:17:00.000-07:00</published><updated>2010-11-04T21:43:03.631-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prompts'/><category scheme='http://www.blogger.com/atom/ns#' term='BI Answers'/><category scheme='http://www.blogger.com/atom/ns#' term='Sections'/><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE11g'/><title type='text'>OBIEE11g - Table Prompts and Sections</title><content type='html'>&lt;div&gt;Table/Pivot Table Prompts and Sections are very nice and handy features in the OBIEE11g. This post shows different ways to create it.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Here's a simple pivot table with Company, Year, Brand and few measures.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dNBGTOwrvxw/TNOGVsoP2SI/AAAAAAAAAIc/4V3mLiU4Aqs/s1600/fig1.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5535916074283817250" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 236px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/TNOGVsoP2SI/AAAAAAAAAIc/4V3mLiU4Aqs/s400/fig1.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Edit pivot table view and drag the columns to the Prompt and Section area as shown below.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dNBGTOwrvxw/TNOGwEMv7xI/AAAAAAAAAIk/kfBs1NpErBI/s1600/fig2.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5535916527287529234" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 163px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/TNOGwEMv7xI/AAAAAAAAAIk/kfBs1NpErBI/s400/fig2.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dNBGTOwrvxw/TNOGwzyqwYI/AAAAAAAAAIs/1om2t572gis/s1600/fig3.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5535916540063039874" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 191px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/TNOGwzyqwYI/AAAAAAAAAIs/1om2t572gis/s400/fig3.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Back to result view. Company is now a dropdown prompt and Brand is section header&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/TNOGxBLohmI/AAAAAAAAAI0/_ibHKeZbnbQ/s1600/fig4.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5535916543657412194" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 277px; CURSOR: hand; HEIGHT: 400px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/TNOGxBLohmI/AAAAAAAAAI0/_ibHKeZbnbQ/s400/fig4.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Alternate way: Right click column in result view. Select "Move" menu. Select either "To prompts" or "To sections".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/TNOGxWCzEAI/AAAAAAAAAI8/nT1QC516hMM/s1600/fig5.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5535916549257498626" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 168px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/TNOGxWCzEAI/AAAAAAAAAI8/nT1QC516hMM/s400/fig5.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Another alternate way: Hover the column and drag the small tab that appears over it to the empty area above the table.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dNBGTOwrvxw/TNOGxTNoniI/AAAAAAAAAJE/gURsdbTmmw0/s1600/fig6.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5535916548497645090" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 108px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/TNOGxTNoniI/AAAAAAAAAJE/gURsdbTmmw0/s400/fig6.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pivot Table Prompt area will appear automatically. Drop the column there.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dNBGTOwrvxw/TNOG6JLioEI/AAAAAAAAAJM/Px8mHIqe9NU/s1600/fig7.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5535916700423331906" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 127px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_dNBGTOwrvxw/TNOG6JLioEI/AAAAAAAAAJM/Px8mHIqe9NU/s400/fig7.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Similarly drag and drop columns to Sections area.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dNBGTOwrvxw/TNOG6T2sivI/AAAAAAAAAJU/Afi-N1bgv54/s1600/fig8.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5535916703288691442" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 146px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/TNOG6T2sivI/AAAAAAAAAJU/Afi-N1bgv54/s400/fig8.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To bring back columns to table, hover the Prompt or Section header. Small tab will appear on left. Drag and drop it to the table back.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/TNOG6Z_TbFI/AAAAAAAAAJc/nTeJ2p5m73k/s1600/fig9.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5535916704935406674" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 151px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/TNOG6Z_TbFI/AAAAAAAAAJc/nTeJ2p5m73k/s400/fig9.JPG" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-2845194655429579671?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/2845194655429579671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/11/obiee11g-table-prompts-and-sections.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/2845194655429579671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/2845194655429579671'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/11/obiee11g-table-prompts-and-sections.html' title='OBIEE11g - Table Prompts and Sections'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dNBGTOwrvxw/TNOGVsoP2SI/AAAAAAAAAIc/4V3mLiU4Aqs/s72-c/fig1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-4564396343351967703</id><published>2010-09-28T22:41:00.000-07:00</published><updated>2010-10-12T08:11:09.479-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Aggregation Rules'/><category scheme='http://www.blogger.com/atom/ns#' term='Modeling'/><title type='text'>OBIEE - Aggregation Rules</title><content type='html'>Talking of aggregation rules in OBIEE, people uses Sum, Average and Count most commonly. Some of them are not even aware in what scenario the other aggregation rules can be used. In this post I am going to show a real-life business scenario for use of some of the other aggregation rules.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Take a look at following accounting data. There's a fact holding Opening Balance, Debit Amount, Credit Amount and Closing balance for accounts on daily basis. We have a Time dimension with hierarchy Year-Month-Week-Day.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dNBGTOwrvxw/TLL9t_ehojI/AAAAAAAAAH0/UdYfmHAcpws/s1600/agg01.JPG" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5526758659312427570" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 351px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/TLL9t_ehojI/AAAAAAAAAH0/UdYfmHAcpws/s400/agg01.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What aggregation rule will apply to "Opening Balance" measure? Ideally if I look at "Wk2", it should give me value $2,359 i.e. opening balance of first day of "Wk2". Similary, if I look at Jan 2010, it should give me value $1,000 i.e opening balance of the month. This cannot be achieved with commonly used Sum or Average aggregation rules.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some people suggests, we can create Year, Month and Week level aggregate tables and design aggregate navigation. Technically this is right, but what if a new level (Quarter) gets introduce at later point. You will require changes at many places.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now let see how we can solve this scenario using aggregation rules. On the aggregation tab select "Based on dimnsions" checkbox.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dNBGTOwrvxw/TLL-DuCwIpI/AAAAAAAAAH8/ghLj0JCWSo0/s1600/agg02.JPG" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5526759032589656722" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 376px; CURSOR: hand; HEIGHT: 202px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/TLL-DuCwIpI/AAAAAAAAAH8/ghLj0JCWSo0/s400/agg02.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;A list will show up with "Other" dimension with "Sum" aggregation for it. Leave this as is. Cilck on "New" button at the bottom of the dailog.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dNBGTOwrvxw/TLL-DlUQbwI/AAAAAAAAAIE/hOw1WTLbGTU/s1600/agg03.JPG" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5526759030247157506" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 314px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/TLL-DlUQbwI/AAAAAAAAAIE/hOw1WTLbGTU/s400/agg03.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the dimension list select Time dimension.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dNBGTOwrvxw/TLL-D7xROGI/AAAAAAAAAIM/yuqMLh7C8xQ/s1600/agg04.JPG" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5526759036274423906" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 326px; CURSOR: hand; HEIGHT: 253px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/TLL-D7xROGI/AAAAAAAAAIM/yuqMLh7C8xQ/s400/agg04.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the formula dropdown select formula with aggregation rule of "FIRST".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dNBGTOwrvxw/TLL-EJKIo0I/AAAAAAAAAIU/8t9SeAWa5Ps/s1600/agg05.JPG" target="_blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5526759039868379970" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 314px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/TLL-EJKIo0I/AAAAAAAAAIU/8t9SeAWa5Ps/s400/agg05.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Defining "FIRST" aggregation formula on Time dimension ensures that, for the non-granular members (such as Year, Month, Week), value of its first granular member is returned.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Why "Sum" aggregation needed for "Other" dimension? The example data above just shows information of one account, but ideally we will have more such accounts and we want to sum up value of opening balance of all account to know the total opening balance at a particular time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finally, we can handle closing balance too in similar way by choosing "LAST" aggregation formula.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-4564396343351967703?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/4564396343351967703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/09/obiee-aggregation-rules.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/4564396343351967703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/4564396343351967703'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/09/obiee-aggregation-rules.html' title='OBIEE - Aggregation Rules'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dNBGTOwrvxw/TLL9t_ehojI/AAAAAAAAAH0/UdYfmHAcpws/s72-c/agg01.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-129183074462731482</id><published>2010-08-25T23:18:00.000-07:00</published><updated>2010-08-26T01:14:05.409-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cache'/><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='BI Server'/><title type='text'>OBIEE - Schedule Purge and Re-build of cache programmatically</title><content type='html'>&lt;p&gt;In a standard OBIEE implementation, we generally want to purge and re-build the cache after every ETL run. This post deals with how to programmatically purge and re-build cache and also schedule it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#3333ff;"&gt;Purging Cache &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;OBIEE provides ODBC-extension functions that can be used to purge cache programmatically. These functions can be called using NQCMD commandline tool. There are four different functions that can be used to purge cache. &lt;ul&gt;&lt;li&gt;SAPurgeAllCache - Purges all cache&lt;/li&gt;&lt;li&gt;SAPurgeCacheByDatabase - Purges all cache for a specific physical database&lt;/li&gt;&lt;li&gt;SAPurgeCacheByTable - Purges cache for a specific physical table&lt;/li&gt;&lt;li&gt;SAPurgeCacheByQuery - Purges cache for a specific query&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;p&gt;Here's how to use the command in windows environment. &lt;/p&gt;&lt;p&gt;Create a text file using notepad with name "PurgeCache.txt" and add following line to it. Save the file to local disk (Let's assume to drive C:\)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;strong&gt;Call SAPurgeAllCache();&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Start command prompt and run following command. Note, there are four parameters in the command. You must replace this with values relavent to your implementation.&lt;br /&gt;&lt;br /&gt;-d = ODBC datasource name&lt;br /&gt;-u = Admin user name&lt;br /&gt;-p = Admin Password&lt;br /&gt;-s = sql file&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;strong&gt;NQCMD -d AnalyticsWeb -u Administrator -p Administrator -s C:\PurgeCache.txt&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;Since we used SAPurgeAllCache function, it will clear all cache on the data source . Refer this &lt;a href="http://download.oracle.com/docs/cd/E12103_01/books/admintool/admintool_QueryCaching6.html" target="_blank"&gt;link&lt;/a&gt; for syntax of other functions.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#3333ff;"&gt;Re-building Cache&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;Once the cache is purged, you may want to re-build cache for some of the frequently used reports to avoid delay in response to the users. Re-Building cache requires executing the "logical" SQL query against the data source. We can use NQCMD same way we used for purging cache. Instead of purge function, we have to include logical SQL statements in the text file.&lt;br /&gt;&lt;br /&gt;Create a text file using notepad with name "BuildCache.txt" and add logical SQL commands to it. You can include more than one command separated by semicolon(;). Save the file to local disk (Let's assume to drive C:\). Below is example of the text file content.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;strong&gt;SELECT Product."Department" saw_0, Product."Style" saw_1, Sales."SalesAmt" saw_2 FROM MYCATALOG ORDER BY saw_0, saw_1;&lt;br /&gt;&lt;br /&gt;SELECT Product."Department" saw_0, Product."Style" saw_1, Sales."CostAmt" saw_2 FROM MYCATALOG ORDER BY saw_0, saw_1;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;Start command prompt and execute the command same way we did for purging the cache.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;strong&gt;NQCMD -d AnalyticsWeb -u Administrator -p Administrator -s C:\BuildCache.txt&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;strong&gt;Scheduling Purge and Re-build &lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;You may not want to run purge/rebuild cache manually after each ETL run, so you can create a batch file using notepad, "Caching.bat" and add the two command that we ran manually to it. Save the file.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;strong&gt;NQCMD -d AnalyticsWeb -u Administrator -p Administrator -s C:\PurgeCache.txt&lt;br /&gt;NQCMD -d AnalyticsWeb -u Administrator -p Administrator -s C:\BuildCache.txt&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;We can schedule this file to run automatically using windows scheduling using following steps.&lt;br /&gt;&lt;br /&gt;Go to Control Panel and double click "Schduled Tasks"&lt;br /&gt;&lt;br /&gt;In the Schduled Tasks window, double click "Add Scheduled Task".&lt;br /&gt;&lt;br /&gt;The Scheduled Task Wizard screen appears.&lt;br /&gt;Click Next to continue.&lt;br /&gt;&lt;br /&gt;Click Browse button on next screen. Navigate to the C:\Caching.bat and click Open button.&lt;br /&gt;Next, you give the task a name and choose when to run the task.&lt;br /&gt;&lt;br /&gt;Name the scheduled task.&lt;br /&gt;Pick a name that will make sense to you later when you want to check the list or make any changes.&lt;br /&gt;&lt;br /&gt;Choose when to run the scheduled task.&lt;br /&gt;There are a number of choices as to when you would like to run the task:&lt;br /&gt;&lt;br /&gt;Daily – once a day&lt;br /&gt;Weekly – once a week&lt;br /&gt;Monthly – once a month&lt;br /&gt;One time only&lt;br /&gt;When computer starts&lt;br /&gt;When I log in&lt;br /&gt;&lt;br /&gt;Click "Next" to continue.&lt;br /&gt;Specify the day and time to run the scheduled task.&lt;br /&gt;&lt;br /&gt;Click "Next" to continue once you have made your time selections.&lt;br /&gt;Enter the name and password of the user who is authorized to run the task. Generally Administrator.&lt;br /&gt;&lt;br /&gt;Click Next to continue.&lt;br /&gt;&lt;br /&gt;Click Finish to complete scheduling the task. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-129183074462731482?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/129183074462731482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/08/obiee-schedule-purge-and-re-build-of.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/129183074462731482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/129183074462731482'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/08/obiee-schedule-purge-and-re-build-of.html' title='OBIEE - Schedule Purge and Re-build of cache programmatically'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-7043441945390526407</id><published>2010-06-13T00:02:00.000-07:00</published><updated>2010-06-18T09:45:52.034-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BI Answers'/><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Narrative View'/><category scheme='http://www.blogger.com/atom/ns#' term='Visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='Treemap'/><category scheme='http://www.blogger.com/atom/ns#' term='Dashoard'/><title type='text'>Squarified Treemap for OBIEE Dashboard</title><content type='html'>In one of my earlier post (&lt;a href="http://hiteshbiblog.blogspot.com/2010/04/obiee-showing-data-on-calendar.html"&gt;here&lt;/a&gt;), I showed how to show OBIEE data on calendar. In this post I am going to show yet another way to use power of OBBIE Narrative Views to visualize OBIEE data - Squarified Treemap.&lt;br /&gt;&lt;br /&gt;Squarified treemap is one of the most effective way to visualize tree structured data, be it a finance or any other domain. I will be using javascript toolkit from &lt;a href="http://thejit.org/"&gt;http://thejit.org/&lt;/a&gt; to create the squarified treemap. I will suggest you download the toolkit and go over the example code that comes along.&lt;br /&gt;&lt;br /&gt;Here's tree structured report which shows the sales data of a store by Product Class, Product Subclass, Product Item. It has a "Rank" column which ranks product based on its sales value and % Share show its share in the total sales value. We will be using Rank to determine color and % Share to determine size of the rectangle in the squarified treemap.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://1.bp.blogspot.com/_dNBGTOwrvxw/TBSf49VPUkI/AAAAAAAAAGE/xq7xkzW00U4/s1600/report.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5482182447301874242" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 349px; CURSOR: hand; HEIGHT: 400px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/TBSf49VPUkI/AAAAAAAAAGE/xq7xkzW00U4/s400/report.JPG" border="0" /&gt;&lt;/a&gt; Create a folder name "jit" on OBIEE server under Drive:\OracleBI\oc4j_bi\j2ee\home\applications\analytics\analytics\res\ folder and copy &lt;strong&gt;&lt;em&gt;jit.js&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;Treemap.css&lt;/em&gt;&lt;/strong&gt; from the toolkit to this folder.&lt;/p&gt;&lt;p&gt;Next we create narrative view and write javascript to use treemap control and pass the report data do it. Note: When I was designing it, preview under narrative was showing a black rectangle. However, I could save the report and view treemap in the result / dashboard view.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/_dNBGTOwrvxw/TBW0fbpqAJI/AAAAAAAAAGM/WmVyNKf9BKI/s1600/tm0.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5482486573484867730" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 353px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/TBW0fbpqAJI/AAAAAAAAAGM/WmVyNKf9BKI/s400/tm0.JPG" border="0" /&gt;&lt;/a&gt;Here's the script from the narrative view.&lt;br /&gt;&lt;strong&gt;Prefix:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- JIT Library File --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script language="javascript" type="text/javascript" src="./res/jit/jit.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- JIT Stylesheet File --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;link type="text/css" href="./res/jit/Treemap.css" rel="stylesheet" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script language="javascript" type="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;      function init() {&lt;br /&gt;            function itemdata() { this.rank = ""; this.share = ""; }&lt;br /&gt;            var rdata = [];&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;In Prefix section we include jit.js and Treemap.css files. Note the path for the files is ./res/jit. The &lt;strong&gt;&lt;em&gt;init&lt;/em&gt;&lt;/strong&gt; function will be called on load event of document body. It will build treemap using report data. The multidimensional object &lt;strong&gt;&lt;em&gt;rdata&lt;/em&gt;&lt;/strong&gt; will be used to capture report data. We will use instance of &lt;strong&gt;&lt;em&gt;itemdata&lt;/em&gt;&lt;/strong&gt; to store Rank and % Shares . &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Narrative:&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;            if(typeof(rdata["@1"]) == "undefined")&lt;br /&gt;&lt;br /&gt;            rdata["@1"]=[];&lt;br /&gt;&lt;br /&gt;            if(typeof(rdata["@1"]["@2"]) == "undefined")&lt;br /&gt;            rdata["@1"]["@2"]=[];&lt;br /&gt;&lt;br /&gt;            if(typeof(rdata["@1"]["@2"]["@3"]) == "undefined")&lt;br /&gt;            rdata["@1"]["@2"]["@3"]=new itemdata();&lt;br /&gt;&lt;br /&gt;            rdata["@1"]["@2"]["@3"].rank=@4;&lt;br /&gt;            rdata["@1"]["@2"]["@3"].share=@5;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Here we store report data to &lt;strong&gt;&lt;em&gt;rdata&lt;/em&gt;&lt;/strong&gt;. Being tree structure, there could be multiple rows for the same Product Class or Sub Class, so we first do a check if the element with the name is defined or not and then add it. At Product item level we use instance of &lt;strong&gt;&lt;em&gt;itemdata&lt;/em&gt;&lt;/strong&gt; and store Rank and % Share of product.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Postfix:&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;            function nonleafclass() {&lt;br /&gt;                this.children = new Array();&lt;br /&gt;                this.data = new function() { this.$area = "" };&lt;br /&gt;                this.id = "";&lt;br /&gt;                this.name = "";&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            function leafclass() {&lt;br /&gt;                this.children = new Array();&lt;br /&gt;                this.data = new function() { this.$area = ""; this.$color = ""; };&lt;br /&gt;                this.id = "";&lt;br /&gt;                this.name = "";&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            json = new nonleafclass();&lt;br /&gt;            json.name = "Product Performance";&lt;br /&gt;            json.id = "Product Performance";&lt;br /&gt;            json.data.$area = 100;&lt;br /&gt;            var i = 0;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            for (var cls in rdata) {&lt;br /&gt;                json.children[i] = new nonleafclass();&lt;br /&gt;                json.children[i].name = cls;&lt;br /&gt;                json.children[i].id = cls;&lt;br /&gt;                var j = 0;&lt;br /&gt;                var iarea = 0;&lt;br /&gt;&lt;br /&gt;                for (var subcls in rdata[cls]) {&lt;br /&gt;                    json.children[i].children[j] = new nonleafclass();&lt;br /&gt;                    json.children[i].children[j].name = subcls;&lt;br /&gt;                    json.children[i].children[j].id = subcls;&lt;br /&gt;                    var k = 0;&lt;br /&gt;                    var jarea = 0;&lt;br /&gt;&lt;br /&gt;                    for (var item in rdata[cls][subcls]) {&lt;br /&gt;                        json.children[i].children[j].children[k] = new leafclass();&lt;br /&gt;                        json.children[i].children[j].children[k].name = item;&lt;br /&gt;                        json.children[i].children[j].children[k].id = item;&lt;br /&gt;                        json.children[i].children[j].children[k].data.$area = rdata[cls][subcls][item].share;&lt;br /&gt;                        json.children[i].children[j].children[k].data.$color = rdata[cls][subcls][item].rank;&lt;br /&gt;                        jarea = jarea + rdata[cls][subcls][item].share;&lt;br /&gt;                        k++&lt;br /&gt;                    }&lt;br /&gt;&lt;br /&gt;                    json.children[i].children[j].data.$area = jarea;&lt;br /&gt;                    iarea = iarea + jarea;&lt;br /&gt;                    j++&lt;br /&gt;&lt;br /&gt;                }&lt;br /&gt;                json.children[i].data.$area = iarea;&lt;br /&gt;                i++;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            var infovis = document.getElementById('infovis');&lt;br /&gt;            var w = infovis.offsetWidth, h = infovis.offsetHeight;&lt;br /&gt;            infovis.style.width = w + 'px';&lt;br /&gt;            infovis.style.height = h + 'px';&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The jit toolkit requires the data in a specific object format. In their example code they have used json syntax to define the data. In postfix section we create same object in bit different way. Note use of Rank and % Share for $color and $area properties. For nonleaf level we calculate area by summing up area of children (i.e. item).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Postfix Continue..&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre style="BORDER-RIGHT: #999999 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: #999999 1px dashed; WIDTH: 100%; COLOR: #000000; LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dashed; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; BACKGROUND-COLOR: #eee"&gt;&lt;code&gt;            //init tm&lt;br /&gt;&lt;br /&gt;                var tm = new TM.Squarified({&lt;br /&gt;                //Where to inject the treemap.&lt;br /&gt;                rootId: 'infovis',&lt;br /&gt;&lt;br /&gt;                //Add click handlers for&lt;br /&gt;                //zooming the Treemap in and out&lt;br /&gt;                addLeftClickHandler: true,&lt;br /&gt;                addRightClickHandler: true,&lt;br /&gt;&lt;br /&gt;                //When hovering a node highlight the nodes&lt;br /&gt;                //between the root node and the hovered node. This&lt;br /&gt;                //is done by adding the 'in-path' CSS class to each node.&lt;br /&gt;                selectPathOnHover: true,&lt;br /&gt;&lt;br /&gt;                Color: {&lt;br /&gt;                    //Allow coloring&lt;br /&gt;                    allow: true,&lt;br /&gt;                    //Set min value and max value constraints&lt;br /&gt;                    //for the *$color* property value.&lt;br /&gt;                    //Default's to -100 and 100.&lt;br /&gt;                    minValue: 1,&lt;br /&gt;                    maxValue: 29,&lt;br /&gt;                    //Set color range. Default's to reddish and greenish.&lt;br /&gt;                    //It takes an array of three&lt;br /&gt;                    //integers as R, G and B values.&lt;br /&gt;                    minColorValue: [0, 255, 50],&lt;br /&gt;                    maxColorValue: [255, 0, 50]&lt;br /&gt;                },&lt;br /&gt;&lt;br /&gt;                //Allow tips&lt;br /&gt;                Tips: {&lt;br /&gt;                    allow: true,&lt;br /&gt;                    //add positioning offsets&lt;br /&gt;                    offsetX: 20,&lt;br /&gt;                    offsetY: 20,&lt;br /&gt;                    //implement the onShow method to&lt;br /&gt;                    //add content to the tooltip when a node&lt;br /&gt;                    //is hovered&lt;br /&gt;                    onShow: function(tip, node, isLeaf, domElement) {&lt;br /&gt;                        tip.innerHTML = "&amp;lt;div class=\"tip-title\"&amp;gt;" + node.name + "&amp;lt;/div&amp;gt;" +&lt;br /&gt;                "&amp;lt;div class=\"tip-text\"&amp;gt;" + this.makeHTMLFromData(node.data) + "&amp;lt;/div&amp;gt;";&lt;br /&gt;                    },&lt;br /&gt;&lt;br /&gt;                    //Build the tooltip inner html by taking each node data property&lt;br /&gt;                    makeHTMLFromData: function(data) {&lt;br /&gt;                        var html = '';&lt;br /&gt;                        html += "Share in Sales" + ': ' + data.$area + '%&amp;lt;br /&amp;gt;';&lt;br /&gt;                        if ("$color" in data)&lt;br /&gt;                            html += "Rank" + ': ' + data.$color + '&amp;lt;br /&amp;gt;';&lt;br /&gt;                        return html;&lt;br /&gt;                    }&lt;br /&gt;                },&lt;br /&gt;&lt;br /&gt;                //Remove all element events before destroying it.&lt;br /&gt;                onDestroyElement: function(content, tree, isLeaf, leaf) {&lt;br /&gt;                    if (leaf.clearAttributes) leaf.clearAttributes();&lt;br /&gt;                }&lt;br /&gt;            });&lt;br /&gt;            //load JSON and plot&lt;br /&gt;            tm.loadJSON(json);&lt;br /&gt;            //end &lt;br /&gt;        }    //init&lt;br /&gt;&lt;br /&gt;        document.body.onload=function() { init() };&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;      &lt;br /&gt;&amp;lt;div id="center-container" style="width:700px;background-color:#1a1a1a;color:#ccc;height:500px;"&amp;gt;&lt;br /&gt;     &amp;lt;div id="infovis" style="width:700px;height:500px;margin:auto;overflow:hidden;position:relative;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div id="log"&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The above code is picked from the example. It initializes the squrified treemap from the toolkit and setup necessary property. The name of DIV tag where treemap will be rendered is infovis. I changed maxvalue property of color to 29, since I have 29 rows on my report. You can even calculate this value dynamically if required. Also, I modified makeHTMLFromData to use information from the report. This will be shown as tooltip on the treemap. The line &lt;strong&gt;&lt;em&gt;tm.loadJSON(json)&lt;/em&gt;&lt;/strong&gt; passes the data we prepared to treemap control. As mentioned earlier we bind call to &lt;em&gt;&lt;strong&gt;init&lt;/strong&gt;&lt;/em&gt; function on load event of the page. Finally, we create required DIV tags.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Don't miss-out to select "Contains HTML Markup" checkbox. Here is how report looks once saved and placed on the dashboard. When you hover treemap, it show tooltip for specific item. Note the color change based on rank from bright green (1) to bright red (29). Also, note the size of rectangle is according to % Share in sales value.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/TBdLwSm3-VI/AAAAAAAAAGU/M6Nt0qyo09Q/s1600/tm.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5482934364347562322" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 311px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/TBdLwSm3-VI/AAAAAAAAAGU/M6Nt0qyo09Q/s400/tm.JPG" border="0" /&gt;&lt;/a&gt;You can drilldown to any level in the treemap to analyze specific area using left mouse click. For example, I drilled-down here to leaf level member that has rank of 26.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/TBdQCFk43iI/AAAAAAAAAHE/yEj9X0sat04/s1600/tm1.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5482939068133727778" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 307px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/TBdQCFk43iI/AAAAAAAAAHE/yEj9X0sat04/s400/tm1.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Right mouse click will drill one level up. When I, right clicked above I get following.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dNBGTOwrvxw/TBdQSnF3ZNI/AAAAAAAAAHM/DA0AeX3i1PQ/s1600/tm2.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5482939352008320210" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 307px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/TBdQSnF3ZNI/AAAAAAAAAHM/DA0AeX3i1PQ/s400/tm2.JPG" border="0" /&gt;&lt;/a&gt; And then one more level up.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/TBdS4q5WDvI/AAAAAAAAAHU/mgm8EqlESIQ/s1600/tm3.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5482942204887830258" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 308px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/TBdS4q5WDvI/AAAAAAAAAHU/mgm8EqlESIQ/s400/tm3.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;You can also jump to any specific level in the tree. For example, below I can click on Product Class - Cereal and it will present the data under it.&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_dNBGTOwrvxw/TBdTEmgxaRI/AAAAAAAAAHc/sX5-3bbJQYg/s1600/tm4.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5482942409869453586" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 313px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/TBdTEmgxaRI/AAAAAAAAAHc/sX5-3bbJQYg/s400/tm4.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dNBGTOwrvxw/TBdTFLnKN6I/AAAAAAAAAHk/ue8XrOV0cYM/s1600/tm5.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5482942419828357026" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 310px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_dNBGTOwrvxw/TBdTFLnKN6I/AAAAAAAAAHk/ue8XrOV0cYM/s400/tm5.JPG" border="0" /&gt;&lt;/a&gt; I hope this post will be helpful for those who are looking to implement squarified treemap visualization over OBIEE dashboard.&lt;/p&gt;&lt;p&gt;The jit toolkit has many other visualization controls. I will try to cover them in my future post.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-7043441945390526407?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/7043441945390526407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/06/squarified-treemap-for-obiee-dashboard.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/7043441945390526407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/7043441945390526407'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/06/squarified-treemap-for-obiee-dashboard.html' title='Squarified Treemap for OBIEE Dashboard'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dNBGTOwrvxw/TBSf49VPUkI/AAAAAAAAAGE/xq7xkzW00U4/s72-c/report.JPG' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-8984656852510179049</id><published>2010-05-20T05:55:00.000-07:00</published><updated>2010-05-21T21:50:11.774-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Client'/><category scheme='http://www.blogger.com/atom/ns#' term='ODBC'/><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Accessing OBIEE Analytical Data from Windows C# Forms Application</title><content type='html'>OBIEE analytic repositories are accessible to the third party applications through the ODBC connectivity. In this post I am going to show a sample C#.NET windows application that connects to OBIEE server using ODBC to fetch analytical data and display it on a grid.&lt;br /&gt;&lt;br /&gt;First of all, we will need to install the ODBC driver for Oracle BI Server on the machine from where we are trying to access it. Refer the guide &lt;a href="http://download.oracle.com/docs/cd/E12096_01/books/AnyInConfig/AnyInConfigInst211.html"&gt;Installing Oracle BI Open Intelligence Interface&lt;/a&gt; to do this. Next we need to create ODBC DSN. I explained the steps to do this in one of my earlier post &lt;a href="http://hiteshbiblog.blogspot.com/2010/04/switch-obiee-repository-and-catalog.html"&gt;Switch OBIEE Repository and Catalog&lt;/a&gt;. Now you are ready to code your windows application.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Launch the Microsoft Visual Studio and create new C# Windows Forms Application.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S_dbfYpwEkI/AAAAAAAAAFk/yaCR7pR17Z8/s1600/newproj.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5473944466843767362" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 287px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S_dbfYpwEkI/AAAAAAAAAFk/yaCR7pR17Z8/s400/newproj.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;From the tools pane drag-n-drop DataGridView control over the Form and align it as needed. Visual Studio will name it &lt;em&gt;&lt;span style="color:#000099;"&gt;dataGridView1&lt;/span&gt;&lt;/em&gt; by default.&lt;/p&gt;&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/S_dcBg3mSrI/AAAAAAAAAFs/byZBTgYWdek/s1600/datagridview.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5473945053164882610" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 228px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/S_dcBg3mSrI/AAAAAAAAAFs/byZBTgYWdek/s400/datagridview.JPG" border="0" /&gt;&lt;/a&gt; In the code-behind of the form, add &lt;em&gt;&lt;span style="color:#000099;"&gt;using&lt;/span&gt;&lt;/em&gt; directive for &lt;em&gt;&lt;span style="color:#000099;"&gt;System.Data.Odbc&lt;/span&gt;&lt;/em&gt; namespace. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dNBGTOwrvxw/S_dc8sCMEsI/AAAAAAAAAF0/ZrvFYbTiNI8/s1600/usingodbc.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5473946069774373570" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 263px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_dNBGTOwrvxw/S_dc8sCMEsI/AAAAAAAAAF0/ZrvFYbTiNI8/s400/usingodbc.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now lets add code to execute query over BI Server and get the output. In the form's load event include following code.&lt;/p&gt;&lt;p&gt;In the connection string, DSN name should match the name of ODBC DSN you created. Provide appropriate user id and password.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;color:#000099;"&gt;string constring = "DSN=AnalyticServer;UID=Administrator;Pwd=Administrator";&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Create ODBC connection using connection string.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;span style="font-family:courier new;"&gt;OdbcConnection con = new OdbcConnection(constring);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The query should contain select statment that you intend to execute against BI Server. &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;color:#000099;"&gt;string query = "SELECT statement";&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Create OdbcDataAdapter using query and connection. Create a DataSet to hold results. Execute query using Fill method.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;color:#000099;"&gt;OdbcDataAdapter da = new OdbcDataAdapter(query, con);&lt;br /&gt;DataSet ds = new DataSet();&lt;br /&gt;da.Fill(ds);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The dataset returned will contain a Table with results. Bind this table to the &lt;span style="color:#000099;"&gt;&lt;em&gt;dataGridView1&lt;/em&gt;&lt;/span&gt;.&lt;br /&gt;&lt;span style="font-family:courier new;color:#000099;"&gt;dataGridView1.DataSource = ds.Tables[0];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Now build and run the project and you should see output of the query in the grid.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S_dh9bUc5CI/AAAAAAAAAF8/hdXXO15x7zs/s1600/output.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5473951580025578530" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 159px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S_dh9bUc5CI/AAAAAAAAAF8/hdXXO15x7zs/s400/output.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Oracle BI ODBC Client executes queries in the similar way. However, it is not a .NET application. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-8984656852510179049?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/8984656852510179049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/05/accessing-obiee-analytical-data-from.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/8984656852510179049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/8984656852510179049'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/05/accessing-obiee-analytical-data-from.html' title='Accessing OBIEE Analytical Data from Windows C# Forms Application'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dNBGTOwrvxw/S_dbfYpwEkI/AAAAAAAAAFk/yaCR7pR17Z8/s72-c/newproj.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-274093655732266860</id><published>2010-05-17T04:01:00.000-07:00</published><updated>2010-05-19T06:08:18.272-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE'/><title type='text'>Realtime access to OBIEE analysis over iPhone</title><content type='html'>Oracle Business Indicator is a business application designed to provide mobile business users realtime access to pre-defined OBIEE analytics from the iPhone device.&lt;br /&gt;&lt;br /&gt;Business user can browse folders on OBIEE server and view any pre-created reports stored under it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dNBGTOwrvxw/S_Pdu-vRcII/AAAAAAAAAFU/opyQRdwZ-O0/s1600/shfolder.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 279px; height: 400px;" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/S_Pdu-vRcII/AAAAAAAAAFU/opyQRdwZ-O0/s400/shfolder.JPG" alt="" id="BLOGGER_PHOTO_ID_5472961771370279042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S_PdvdPEAVI/AAAAAAAAAFc/PU-a_W7vkDw/s1600/report.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 278px; height: 400px;" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S_PdvdPEAVI/AAAAAAAAAFc/PU-a_W7vkDw/s400/report.JPG" alt="" id="BLOGGER_PHOTO_ID_5472961779556680018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The client  for iPhone device is available for download from &lt;a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284793704&amp;amp;mt=8"&gt;http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284793704&amp;amp;mt=8&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There's only one configuration change needed on server side. Since the iPhone device does not support Flash components, we need to  configure the BI Server to render charts in the PNG format. To make this change just add following configuration under &lt;serverinstance&gt; section of the instanceconfig.xml file:&lt;br /&gt;&lt;br /&gt;&amp;lt;charts&amp;gt;&lt;br /&gt;&amp;lt;defaultimagetype&amp;gt;PNG&amp;lt;/defaultimagetype&amp;gt;&lt;br /&gt;&amp;lt;/charts&amp;gt;&lt;br /&gt;&lt;br /&gt;iPhone Client will require setting server URL, user and password etc. For more details about configuring Oralce Business Indicator client, refer &lt;a href="http://www.oracle.com/technology/products/bi/pdf/oracle-business-indicators-config-user-guide.pdf"&gt;configuration guide&lt;/a&gt;.&lt;/serverinstance&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-274093655732266860?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/274093655732266860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/05/realtime-access-to-obiee-analysis-over.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/274093655732266860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/274093655732266860'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/05/realtime-access-to-obiee-analysis-over.html' title='Realtime access to OBIEE analysis over iPhone'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dNBGTOwrvxw/S_Pdu-vRcII/AAAAAAAAAFU/opyQRdwZ-O0/s72-c/shfolder.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-1607185549304762114</id><published>2010-05-10T07:17:00.000-07:00</published><updated>2010-05-10T09:50:08.007-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Style'/><category scheme='http://www.blogger.com/atom/ns#' term='Dashoard'/><title type='text'>Creating custom styles for OBIEE Dashboard</title><content type='html'>The default look and feel of OBIEE dashboard can be modified by creating custom style. To create custom style, one should know Casecading Style Sheets (CSS) and have basic knowledge of graphic design.&lt;br /&gt;&lt;br /&gt;Here are steps to apply custom style to OBIEE dashboard.&lt;br /&gt;&lt;br /&gt;1. Stop OC4J&lt;br /&gt;&lt;br /&gt;2. Go to folder &lt;strong&gt;Drive:\OracleBI\oc4j_bi\j2ee\home\applications\analytics\analytics\res&lt;/strong&gt; and make copy of folder &lt;strong&gt;s_oracle10&lt;/strong&gt; with some different name. For instance, &lt;strong&gt;s_mycompany&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;3. Modify CSS and images in the subfolder &lt;strong&gt;b_mozilla_4&lt;/strong&gt; under s_mycompany, as per the requirement.&lt;br /&gt;&lt;br /&gt;4. Copy s_mycompany folder to Drive:\OracleBI\web\app\res&lt;br /&gt;&lt;br /&gt;5. Start OC4j and Log on to analytics web application.&lt;br /&gt;&lt;br /&gt;6. Go to dashboard properties and select newly created style "mycompany" in the style dropdown.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S-gysUEHwII/AAAAAAAAAE0/0YZclfS4ao0/s1600/dprop.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5469677484323094658" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 237px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S-gysUEHwII/AAAAAAAAAE0/0YZclfS4ao0/s400/dprop.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The screen below shows default OBIEE banner area.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dNBGTOwrvxw/S-gz3RqwtZI/AAAAAAAAAFM/SVOzHNqPdZ4/s1600/sk_before.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5469678772170044818" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 47px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_dNBGTOwrvxw/S-gz3RqwtZI/AAAAAAAAAFM/SVOzHNqPdZ4/s400/sk_before.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here I made changes to banner images and styles to change the looks.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/S-gzvNgrJ9I/AAAAAAAAAFE/8cuw1C5PTtQ/s1600/sk_after.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5469678633615042514" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 47px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/S-gzvNgrJ9I/AAAAAAAAAFE/8cuw1C5PTtQ/s400/sk_after.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;You can write to me if you want files for above style.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-1607185549304762114?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/1607185549304762114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/05/creating-custom-styles-for-obiee.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/1607185549304762114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/1607185549304762114'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/05/creating-custom-styles-for-obiee.html' title='Creating custom styles for OBIEE Dashboard'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dNBGTOwrvxw/S-gysUEHwII/AAAAAAAAAE0/0YZclfS4ao0/s72-c/dprop.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-1317460009910854462</id><published>2010-04-23T02:24:00.000-07:00</published><updated>2010-06-29T01:20:31.673-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Aggregate Navigation'/><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='BI Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Modeling'/><title type='text'>OBIEE Aggregate Navigation (not hitting?)</title><content type='html'>Often you will find people complaining that they have setup aggregate navigation, but when they run report, OBIEE is not hitting the right fact table.&lt;br /&gt;&lt;br /&gt;Common suggestions you will find to resolve this are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Go to Content tab of the Logical Table Source and check if Logical Level are set correctly set.&lt;/li&gt;&lt;li&gt;Go to General tab of Dimension Level and check the value in textbox "Number of elements at this level"&lt;/li&gt;&lt;/ul&gt;In this post, I am just going to show that even after following above, the query may not hit aggregate table if you are not following modeling practice right.&lt;br /&gt;&lt;br /&gt;Let's take following data as example. There are two sales fact tables and a time dimension. DAILY_SALES has day level sales data. WEEKLY_SALES has sales data pre-aggregated at week level.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S9FziqARCrI/AAAAAAAAADs/VLlXCJyaNLE/s1600/physicaldata.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5463274862205274802" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 439px; CURSOR: pointer; HEIGHT: 228px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S9FziqARCrI/AAAAAAAAADs/VLlXCJyaNLE/s400/physicaldata.JPG" border="0" /&gt;&lt;/a&gt;Here's repository created on top of above physical data. The Logical Level is set correctly for WEEKLY_SALES.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dNBGTOwrvxw/S9FxGSjLx1I/AAAAAAAAAC8/pmzYpYbAQdY/s1600/repository.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5463272175849686866" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 505px; CURSOR: pointer; HEIGHT: 296px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_dNBGTOwrvxw/S9FxGSjLx1I/AAAAAAAAAC8/pmzYpYbAQdY/s400/repository.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Even the number of elements are set correctly for Week and Day level of Time dimension.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S9FxG2lAWzI/AAAAAAAAADE/u9kWj0iRj9A/s1600/timeweek.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5463272185521003314" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 266px; CURSOR: pointer; HEIGHT: 351px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S9FxG2lAWzI/AAAAAAAAADE/u9kWj0iRj9A/s400/timeweek.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S9FxHDqXZ3I/AAAAAAAAADM/PigvrpyDdu0/s1600/timeday.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5463272189033146226" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 266px; CURSOR: pointer; HEIGHT: 351px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S9FxHDqXZ3I/AAAAAAAAADM/PigvrpyDdu0/s400/timeday.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let's execute following query which fetches sales by week. Since we have setup aggregate navigation, it is expected that the query should fetch data from WEEKLY_SALES table.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;SELECT "Time"."WEEK_DESC", "Sales"."SALES_AMT" FROM SALESCATALOG&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now have a look at NQQuery.log. The query didn't hit WEEKLY_SALES table, in fact it is grouping data form DAILY_SALES table instead.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dNBGTOwrvxw/S9FxHa4ReTI/AAAAAAAAADU/lmAbDmCRpLs/s1600/nqquerylog1.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5463272195265493298" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 229px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/S9FxHa4ReTI/AAAAAAAAADU/lmAbDmCRpLs/s400/nqquerylog1.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So what went wrong?&lt;br /&gt;Our query has two columns WEEK_DESC and SALES_AMT. If you see the earlier repository screen carefully, you will see that WEEK_DESC attribute is not associated with any level of the Time dimension, so OBIEE assumes it to be most granular level attribute i.e. day level. When we query data by WEEK_DESC, OBIEE goes to fact table with day level granularity (i.e. DAILY_SALES) and fetches the data.&lt;br /&gt;&lt;br /&gt;Let's add WEEK_DESC to Week level of the time dimension as shown below and execute the query again.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dNBGTOwrvxw/S9FyecfVaeI/AAAAAAAAADc/P-FVnTHCSrk/s1600/repository1.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5463273690346383842" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 242px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/S9FyecfVaeI/AAAAAAAAADc/P-FVnTHCSrk/s400/repository1.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now let's see NQQuery.log again. Bingo! it just hit the table we wanted it to.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dNBGTOwrvxw/S9FyeugGCoI/AAAAAAAAADk/EjyodZPpZsI/s1600/nqquerylog2.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5463273695181408898" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 229px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_dNBGTOwrvxw/S9FyeugGCoI/AAAAAAAAADk/EjyodZPpZsI/s400/nqquerylog2.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Alternative approach with Snow-flake:&lt;/strong&gt;&lt;br /&gt;In the example I have given, the Time dimension is snow-flake, so it is also possible to set the logical level for invidual source table to make aggregate navigation work. Setting  logical level "Time Week" for source table TIME_WEEK and "Time Detail" for source table TIME_DAY will do the work.&lt;br /&gt;&lt;br /&gt;I hope this post will give a different perspective to your troubleshooting effort when you face that aggregate navigation problem again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-1317460009910854462?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/1317460009910854462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/04/obiee-aggregate-navigation-not-hitting.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/1317460009910854462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/1317460009910854462'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/04/obiee-aggregate-navigation-not-hitting.html' title='OBIEE Aggregate Navigation (not hitting?)'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dNBGTOwrvxw/S9FziqARCrI/AAAAAAAAADs/VLlXCJyaNLE/s72-c/physicaldata.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-9100644331517499298</id><published>2010-04-18T23:27:00.000-07:00</published><updated>2010-04-19T00:07:29.217-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='BI Server'/><title type='text'>Switch OBIEE Repository and Catalog</title><content type='html'>At times, for development  you may need to setup another OBIEE Repository and Catalog. In this post I will show how to do this.&lt;br /&gt;&lt;br /&gt;First, stop Oracle BI and Presentation Services from Control Panel &gt; Administrative Tools &gt; Services. Also stop OC4J.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;Configure Repository&lt;/span&gt;&lt;br /&gt;Copy new repository to Drive:\OrabeBI\Server\Repository folder.&lt;br /&gt;&lt;br /&gt;Open NQSConfig.INI file from Drive:\OrabeBI\Server\Repository  folder. Under [ Repository ] section, add new repository alias. See the screen below. I added Star2 = MyProject.rpd.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S8v_-zfq5PI/AAAAAAAAACE/tdu7jvyRumY/s1600/nqsconfig.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 288px;" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S8v_-zfq5PI/AAAAAAAAACE/tdu7jvyRumY/s400/nqsconfig.JPG" alt="" id="BLOGGER_PHOTO_ID_5461740427556873458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;Create ODBC DSN for Repository&lt;/span&gt;&lt;br /&gt;Goto Control Panel &gt; Administrative Tools and open Data Source (ODBC). Under System DSN tab click Add. Follow the steps in the wizard as shown below:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step1&lt;/span&gt;&lt;br /&gt;Select "Oracle BI Server" from the drivers list.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S8v__NvFyaI/AAAAAAAAACM/gPEhp3CvsAM/s1600/odbc1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 301px;" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S8v__NvFyaI/AAAAAAAAACM/gPEhp3CvsAM/s400/odbc1.JPG" alt="" id="BLOGGER_PHOTO_ID_5461740434600872354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step2&lt;/span&gt;&lt;br /&gt;Provide a name for the ODBC DSN. I used "AnalyticServer"&lt;br /&gt;Specify BI Server name.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S8v__jQffNI/AAAAAAAAACU/nVubIjndU8k/s1600/odbc2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 306px;" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S8v__jQffNI/AAAAAAAAACU/nVubIjndU8k/s400/odbc2.JPG" alt="" id="BLOGGER_PHOTO_ID_5461740440378113234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step3&lt;/span&gt;&lt;br /&gt;Specify alias of the repository you want to connect to. We added alias in NQSConfig.INI.&lt;br /&gt;Not needed if you want to connect to default repository.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S8v__3N2MkI/AAAAAAAAACc/Ep7Qd0GyfmM/s1600/odbc3.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 306px;" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S8v__3N2MkI/AAAAAAAAACc/Ep7Qd0GyfmM/s400/odbc3.JPG" alt="" id="BLOGGER_PHOTO_ID_5461740445735727682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step4&lt;/span&gt;&lt;br /&gt;Click Finish.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S8wAAT-33BI/AAAAAAAAACk/ToIyxZ8j-iU/s1600/odbc4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 306px;" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S8wAAT-33BI/AAAAAAAAACk/ToIyxZ8j-iU/s400/odbc4.jpg" alt="" id="BLOGGER_PHOTO_ID_5461740453457550354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;Configure Presentation Service&lt;/span&gt;&lt;br /&gt;Copy new catalog under Drive:\OracleBIData\web\catalog\ folder. In case you want to create new catalog just add an empty folder under it.&lt;br /&gt;&lt;br /&gt;Open instanceconfig.xml from Drive:\OracleBIData\web\config folder. Change the DSN name to the one we just created (AnalyticServer). Change the CatalogPath to point to path for the new catalog.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dNBGTOwrvxw/S8wAdOsyduI/AAAAAAAAACs/rxwXNCtvzF0/s1600/instanceconfig.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 128px;" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/S8wAdOsyduI/AAAAAAAAACs/rxwXNCtvzF0/s400/instanceconfig.JPG" alt="" id="BLOGGER_PHOTO_ID_5461740950255728354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Finally, start OC4J, Oracle BI and Presentation Services.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;Falling Back &lt;/span&gt;&lt;br /&gt;To fall back to original repository and catalog&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Stop OC4J, Oracle BI and Presentation Services.&lt;/li&gt;&lt;li&gt;Revert the DSN and CatalogPath in the instanceconfig.xml&lt;/li&gt;&lt;li&gt;Start OC4J, Oracle BI and Presentation Services.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-9100644331517499298?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/9100644331517499298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/04/switch-obiee-repository-and-catalog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/9100644331517499298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/9100644331517499298'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/04/switch-obiee-repository-and-catalog.html' title='Switch OBIEE Repository and Catalog'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dNBGTOwrvxw/S8v_-zfq5PI/AAAAAAAAACE/tdu7jvyRumY/s72-c/nqsconfig.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-3323618898857515606</id><published>2010-04-13T04:33:00.000-07:00</published><updated>2010-04-13T05:33:24.172-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BI Answers'/><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='Narrative View'/><category scheme='http://www.blogger.com/atom/ns#' term='Visualization'/><title type='text'>OBIEE Showing Data on a Calendar</title><content type='html'>Sometimes there's need for the business data related to promotional events, holidays etc. to be presented on a calendar to improve readability. In this post I will explain how to achieve this in OBIEE using mooTools and javscript calendar (&lt;a href="http://dansnetwork.com/mootools/events-calendar" target="_blank"&gt;http://dansnetwork.com/mootools/events-calendar&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Here's Sales report of an ogranization by day. Wouldn't it be great if we can plot this on a calendar and higlight the day when it's holiday.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S8RfTeenjCI/AAAAAAAAABs/M0iPgvyF_CQ/s1600/tabular_view.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 233px; height: 400px;" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S8RfTeenjCI/AAAAAAAAABs/M0iPgvyF_CQ/s400/tabular_view.JPG" alt="" id="BLOGGER_PHOTO_ID_5459593436483521570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;Prerequisites:&lt;/span&gt;&lt;br /&gt;To render the calendar we will need mooTools Core, mooTools More and mooTools events calendar. Here are URLs for download: (I used No Compression for all downloads)&lt;br /&gt;&lt;br /&gt;MooTools Core:&lt;a href="http://mootools.net/download" target="_blank"&gt; http://mootools.net/download&lt;/a&gt;&lt;br /&gt;MooTools More: &lt;a href="http://mootools.net/more" target="_blank"&gt;http://mootools.net/more&lt;/a&gt;&lt;br /&gt;Select Date, Scroller, Tips while downloading mooTools More.&lt;br /&gt;Events Calendar: &lt;a href="http://dansnetwork.com/mootools/events-calendar/download/" target="_blank"&gt;http://dansnetwork.com/mootools/events-calendar/download/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here's the list of all files you should have after download:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;mooECal.css&lt;/li&gt;&lt;li&gt;mooECal.js&lt;/li&gt;&lt;li&gt;mooECalLarge.css&lt;/li&gt;&lt;li&gt;mooECalSmall.css&lt;/li&gt;&lt;li&gt;mootools-1.2.4-core-nc.js&lt;/li&gt;&lt;li&gt;mootools-1.2.4.4-more.js&lt;/li&gt;&lt;/ul&gt;Create a folder name &lt;span style="font-weight: bold; font-style: italic;"&gt;mooTools&lt;/span&gt; on OBIEE server under Drive:\OracleBI\oc4j_bi\j2ee\home\applications\analytics\analytics\res\ folder and copy all the files to it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;Narrative View to render Calendar&lt;/span&gt;&lt;br /&gt;I added Narrative View to the report I showed earlier.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dNBGTOwrvxw/S8RfTzX_LCI/AAAAAAAAAB0/fV8pkocLyOs/s1600/narrative_view.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 223px;" src="http://1.bp.blogspot.com/_dNBGTOwrvxw/S8RfTzX_LCI/AAAAAAAAAB0/fV8pkocLyOs/s400/narrative_view.JPG" alt="" id="BLOGGER_PHOTO_ID_5459593442092854306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Added following information to each textbox and selected "Contains HTML Markup" checkbox.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Prefix:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;link rel="stylesheet" type"text/css" href="./res/mooTools/mooECal.css"&amp;gt;&lt;br /&gt;&amp;lt;script language="javascript" src="./res/mooTools/mootools-1.2.4-core-nc.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script language="javascript" src="./res/mooTools/mootools-1.2.4.4-more.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script language="javascript" src="./res/mooTools/mooECal.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;div id="calBody"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;script language="javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;function getDiv(holFlag)&lt;br /&gt;{&lt;br /&gt; if(holFlag=='Y')&lt;br /&gt; {&lt;br /&gt;  return '&amp;lt;div style="background-color:#990000;color:#ffffff;"&amp;gt;';&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;  return '&amp;lt;div&amp;gt;';&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;new Calendar({calContainer:'calBody', newDate:'1/21/2010',&lt;br /&gt;cEvents:new Array(&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Narrative:&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;title: getDiv('@3') +  '@4&amp;lt;/div&amp;gt;',&lt;br /&gt;start: '@2',&lt;br /&gt;end: '@2',&lt;br /&gt;location: ''&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Row Separator:&lt;/span&gt;&lt;br /&gt;,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Postfix&lt;/span&gt;:&lt;br /&gt;)&lt;br /&gt;}); &amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;Please note:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The path to .js and .css files is ./res/mooTools.&lt;/li&gt;&lt;li&gt;getDiv function returns div tag with red background when it's holiday. You can do other event specific handling if required.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Calendar instance is passed an array of events. In our case this is sales information.&lt;br /&gt;Sales value is passed in the title. Start and End date are sale date.&lt;/li&gt;&lt;li&gt;The comma (,) in Row separator will separate event array element.&lt;/li&gt;&lt;li&gt;You can change mooECal.css in prefix section to mooECalSmall.css or mooECalLarge.css if  you want smaller or bigger calendar.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Here's  data rendered on calendar. Note, background color for holidays.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dNBGTOwrvxw/S8RfUHdX0mI/AAAAAAAAAB8/tIEMUCIYhCw/s1600/dashboard.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 310px;" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/S8RfUHdX0mI/AAAAAAAAAB8/tIEMUCIYhCw/s400/dashboard.JPG" alt="" id="BLOGGER_PHOTO_ID_5459593447484150370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please read licensing terms of mooTools and event calendar before making commercial use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-3323618898857515606?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/3323618898857515606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/04/obiee-showing-data-on-calendar.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/3323618898857515606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/3323618898857515606'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/04/obiee-showing-data-on-calendar.html' title='OBIEE Showing Data on a Calendar'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dNBGTOwrvxw/S8RfTeenjCI/AAAAAAAAABs/M0iPgvyF_CQ/s72-c/tabular_view.JPG' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-3342049144187493227</id><published>2010-04-08T03:30:00.000-07:00</published><updated>2010-04-10T07:30:50.750-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Errors'/><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Troubleshoot'/><title type='text'>Common OBIEE Errors and Resolutions</title><content type='html'>In this post I am going to cover some common errors faced during OBIEE implementation and its resolution, in the windows environment. I am hoping this will be handy to anyone who is new to OBIEE.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: rgb(51,51,255)"&gt;Unable to Log In &lt;/span&gt;&lt;br /&gt;Error connecting to the Oracle BI Server: Could not connect to the Oracle BI Server because it is not running or is inaccessible. Please contact your system administrator.&lt;br /&gt;&lt;span style="COLOR: rgb(51,0,51)"&gt;Error Codes: WH4KCFW6:OPR4ONWY:U9IM8TAC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Common cause(s):&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"Oracle BI Server" windows service is not running. Starting the service could resolve the issue.&lt;/li&gt;&lt;li&gt;In case the BI Server service is running and still the error occurrs, check the port the service is listening to is matching with the port specified in the ODBC DSN for the analytic repository. In NQSConfig.ini file look for RPC_SERVICE_OR_PORT. The default value is 9703. The ODBC DSN name can be found in instanceconfig.xml&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: rgb(51,102,255)"&gt;"Oracle BI Server" windows service is not starting.&lt;/span&gt;&lt;br /&gt;Common cause(s):&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The RPD file specfied in the NQSConfig.ini doesn't exist in the repository folder.&lt;/li&gt;&lt;li&gt;RPD file may be inconsistent. Open it using Admin tool in offline mode and fix the consistency errors.&lt;/li&gt;&lt;/ul&gt;&lt;span style="FONT-WEIGHT: bold; COLOR: rgb(51,102,255)"&gt;Error Generating Chart&lt;/span&gt;&lt;br /&gt;Error Codes: ETI2U8FA&lt;br /&gt;&lt;br /&gt;Common cause(s):&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"Oracle BI Java Host" windows service is not running. Starting the service could resolve the issue.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="color:#3333ff;"&gt;&lt;strong&gt;Access denied for user to path /users/username/_portal.&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;Error Codes: O9XNZMXB&lt;/p&gt;&lt;p&gt;Common cause(s): &lt;/p&gt;&lt;ul&gt;&lt;li&gt;The specified user doesn't have permission to read/write to the his/her catalog folder. To resolve the issue, login as Administrator and grant permission to the user to his/her catalog folder using catalog manager.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-3342049144187493227?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/3342049144187493227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/04/common-obiee-errors-and-resolutions.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/3342049144187493227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/3342049144187493227'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/04/common-obiee-errors-and-resolutions.html' title='Common OBIEE Errors and Resolutions'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-2055753321263731692</id><published>2010-03-27T03:51:00.000-07:00</published><updated>2010-03-27T08:00:58.969-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BI Answers'/><category scheme='http://www.blogger.com/atom/ns#' term='OBIEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Narrative View'/><category scheme='http://www.blogger.com/atom/ns#' term='Graph'/><category scheme='http://www.blogger.com/atom/ns#' term='Visualization'/><title type='text'>OBI EE Data Visualization Trick</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Visualization plays very vital role in the data analysis by communicating information clearly and effectively through graphical means. &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The below chart from Google finance website very effectively tells which sectors are performing well. It shows % of companies trading &lt;strong&gt;below&lt;/strong&gt; -2% of its previous close using &lt;span style="color:#990000;"&gt;&lt;strong&gt;dark red&lt;/strong&gt;&lt;/span&gt; bar, % of companies trading &lt;strong&gt;within&lt;/strong&gt; -2% of its previous close using &lt;span style="color:#ff6666;"&gt;pink&lt;/span&gt; bar, % of companies trading &lt;strong&gt;within&lt;/strong&gt; 2% of its previous close using &lt;span style="color:#33cc00;"&gt;light green&lt;/span&gt; bar, % of companies trading &lt;strong&gt;above&lt;/strong&gt; 2% of its previous close using &lt;span style="color:#006600;"&gt;&lt;strong&gt;dark green&lt;/strong&gt;&lt;/span&gt; bar. &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_dNBGTOwrvxw/S63-FN3MQhI/AAAAAAAAABE/Zjd-Rmdv63w/s1600/google_finance.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5453294089389490706" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 166px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_dNBGTOwrvxw/S63-FN3MQhI/AAAAAAAAABE/Zjd-Rmdv63w/s400/google_finance.JPG" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;OBIEE - BI Answers has limited set of data visualization capabilities. We may see some radical improvements in this area in the coming releases of OBI EE. However, there's a feature in BI Answers which is seldom used - "Narrative View". The power of Narrative View comes from it's capability to render output as HTML (and javascript). This opens up ample of opportunities to create custom visualization of data.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://4.bp.blogspot.com/_dNBGTOwrvxw/S64GN49c06I/AAAAAAAAABM/9H-Yfregqxk/s1600/report.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5453303034490442658" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 354px; CURSOR: hand; HEIGHT: 122px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_dNBGTOwrvxw/S64GN49c06I/AAAAAAAAABM/9H-Yfregqxk/s400/report.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;Above we created a report using BI Answers which tells the % of companies trading below -2% of its previous close and so on so forth. There's no built in capability in BI Answers to visualize the data like the Goolge Finance chart. However, using Narrative View we can create the same very easily with little HTML code. Note: Narraive view denotes columns using numbers. E.g. @1 for first column.&lt;br /&gt;&lt;br /&gt;In the BI Answers result tab, navigate to Other View &gt; Narrative as shown below.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_dNBGTOwrvxw/S64HtsqltKI/AAAAAAAAABU/nubO_jYvwmo/s1600/narrmenu.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5453304680457548962" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 362px; CURSOR: hand; HEIGHT: 261px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_dNBGTOwrvxw/S64HtsqltKI/AAAAAAAAABU/nubO_jYvwmo/s400/narrmenu.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Narrative View UI has four main textboxes. The text/HTML inside prefix textbox is rendered first (only once). the text/HTML inside Narrative textbox is rendered for each row. The text/HTML inside Postfix textbox is rendered in the end (only once).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/S64IwOvx8LI/AAAAAAAAABc/njgbEahIQ8I/s1600/narrview.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5453305823477493938" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 234px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/S64IwOvx8LI/AAAAAAAAABc/njgbEahIQ8I/s400/narrview.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the Prefix textbox add following HTML. This will create title for our chart. We also open a table tag for our chart HTML&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="FONT-SIZE: 10px; FONT-FAMILY: courier"&gt;&lt;br /&gt;&amp;lt;table cellspacing=0 cellpadding=20 style="border:1px solid #999999"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td style="font-family:Tahoma,Arial; font-size:14px;" valign="middle" align="left"&amp;gt;&lt;strong&gt;Sectoral Performance&lt;/strong&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;&amp;lt;table cellspacing=0 cellpadding=0&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In the Narrative textbox add following HTML. This HTML will be rendered for each row in the report. Note: Use of % values in report for the width property and background color of the DIV tag.&lt;/p&gt;&lt;br /&gt;&lt;p style="FONT-SIZE: 10px; FONT-FAMILY: courier"&gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td style="width:100px;font-family:Tahoma,Arial; font-size:12px;"&amp;gt;&lt;strong&gt;@1&lt;/strong&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td style="border-right:1px solid #999999; width:300px; height:30px"&amp;gt;&lt;br /&gt;&amp;lt;div style="float:right;&lt;strong&gt;background-color:#F69788;width:@4;&lt;/strong&gt;height:12px;font-size:10px;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div style="float:right;&lt;strong&gt;background-color:#ED1A3B;width:@5;&lt;/strong&gt;height:12px;font-size:10px;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td style="width:300px;height:30px"&amp;gt;&lt;br /&gt;&amp;lt;div style="float:left;&lt;strong&gt;background-color:#C5DE89;width:@2;&lt;/strong&gt;height:12px;font-size:10px;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div style="float:left;&lt;strong&gt;background-color:#A6CE39;width:@3&lt;/strong&gt;;height:12px;font-size:10px;"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In the Postfix textbox we will close the table tag for chart. It also has additional markup to show chart legends.&lt;/p&gt;&lt;br /&gt;&lt;p style="FONT-SIZE: 10px; FONT-FAMILY: courier"&gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td align="left"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;table border=0 cellspacing="0" cellpadding="5"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td style="font-family:Tahoma,Arial; font-size:12px;" valign="middle"&amp;gt;&lt;br /&gt;&amp;lt;div style="background-color:#ED1A3B;width:8px;height:8px;font-size:1px;"&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td style="font-family:Tahoma,Arial; font-size:12px;" valign="middle"&amp;gt;Less than -2%&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td style="font-family:Tahoma,Arial; font-size:12px;" valign="middle"&amp;gt;&lt;br /&gt;&amp;lt;div style="background-color:#C5DE89;width:8px;height:8px;font-size:1px;"&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td style="font-family:Tahoma,Arial; font-size:12px;" valign="middle"&amp;gt;Between 0% and 2%&amp;lt;/td&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td style="font-family:Tahoma,Arial; font-size:12px;" valign="middle"&amp;gt;&lt;br /&gt;&amp;lt;div style="background-color:#F69788;width:8px;height:8px;font-size:1px;"&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td style="font-family:Tahoma,Arial; font-size:12px;" valign="middle"&amp;gt;Between 0% and -2%&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td style="font-family:Tahoma,Arial; font-size:12px;" valign="middle"&amp;gt;&lt;br /&gt;&amp;lt;div style="background-color:#A6CE39;width:8px;height:8px;font-size:1px;"&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td style="font-family:Tahoma,Arial; font-size:12px;" valign="middle"&amp;gt;More than 2%&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Finally, don't forget to select the checkbox "&lt;strong&gt;Contains HTML Markup&lt;/strong&gt;". Save the report and place it on the dashboard. This is how it should look. Tabular view can be removed if not needed.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_dNBGTOwrvxw/S64bwQt8T7I/AAAAAAAAABk/AJ9gBJ9dDJI/s1600/dashboard.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5453326714727583666" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 480px; CURSOR: hand; HEIGHT: 330px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_dNBGTOwrvxw/S64bwQt8T7I/AAAAAAAAABk/AJ9gBJ9dDJI/s400/dashboard.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-2055753321263731692?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/2055753321263731692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/03/obi-ee-data-visualization-trick.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/2055753321263731692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/2055753321263731692'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/03/obi-ee-data-visualization-trick.html' title='OBI EE Data Visualization Trick'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dNBGTOwrvxw/S63-FN3MQhI/AAAAAAAAABE/Zjd-Rmdv63w/s72-c/google_finance.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1821553060466545035.post-1308744345982473774</id><published>2010-03-24T23:04:00.000-07:00</published><updated>2010-03-27T08:06:32.354-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Visio'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Modeling'/><category scheme='http://www.blogger.com/atom/ns#' term='OLAP'/><title type='text'>OLAP desiging using ADAPT</title><content type='html'>I recently came across this wonderful designing technology for OLAP databases named ADAPT by Symmetry Corporation (&lt;a target="_blank" href="http://www.symcorp.com/"&gt;www.symcorp.com&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;I am sure most of us limit the OLAP modeling aspect to star/snowflake schema using the traditional design methodologies such as entity-relationship (ER) diagramming.&lt;br /&gt;&lt;br /&gt;Using ADAPT designing, you can create visual representation of almost all objects in the OLAP database (even relationships).  See the sample Visio diagram below:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dNBGTOwrvxw/S6r_VmNAsuI/AAAAAAAAAA8/so_YU1JoqyI/s1600/adapt.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 617px; height: 698px;" src="http://3.bp.blogspot.com/_dNBGTOwrvxw/S6r_VmNAsuI/AAAAAAAAAA8/so_YU1JoqyI/s1600/adapt.JPG" alt="" id="BLOGGER_PHOTO_ID_5452451045382861538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It helps in creating blue-print of OLAP model and validate it against the business requirements before actually jumping on to implementation, hence saves time on implementation iterations.&lt;br /&gt;&lt;br /&gt;Definitely worth giving a try if you are not using it already.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="font-family: Arial; font-size: 7px;"&gt;&lt;br /&gt;DISCLAIMER:&lt;br&gt;&lt;br /&gt;A NONEXCLUSIVE COPYRIGHT LICENSE IS GRANTED TO USE ALL PROGRAMMING CODE EXAMPLES IN THIS SAMPLE FROM WHICH YOU CAN GENERATE SIMILAR FUNCTION TAILORED TO YOUR OWN SPECIFIC NEEDS. THE SAMPLE CODE PROVIDED IS FOR ILLUSTRATIVE PURPOSES ONLY. THESE EXAMPLES HAVE NOT BEEN THOROUGHLY TESTED UNDER ALL CONDITIONS. I, THEREFORE, CANNOT GUARANTEE OR IMPLY RELIABILITY, SERVICEABILITY, OR FUNCTION OF THESE PROGRAMS.ALL PROGRAMS AND INFORMATION CONTAINED HEREIN ARE PROVIDED TO YOU "AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OF ANY KIND. THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY DISCLAIMED. I SHALL NOT BE LIABLE FOR ANY COST OR DAMAGE ARISING EITHER DIRECTLY OR INDIRECTLY FROM THE INFORMATION IN THE ARTICLE OR USE OF THE SAMPLE CODE. IT IS SOLELY YOUR RESPONSIBILITY TO EVALUATE THE ACCURACY, COMPLETENESS AND USEFULNESS OF ALL OPINIONS, ADVICE, SAMPLE CODE AND OTHER INFORMATION PROVIDED HERE. I DO NOT WARRANT THAT ANY INFORMATION OR SAMPLE CODE IS ERROR-FREE. ANY TRADEMARK OR LOGO USED IN THE ARTICLE ARE PROPERTY OF THEIR RESPECTIVE OWNER.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1821553060466545035-1308744345982473774?l=hiteshbiblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiteshbiblog.blogspot.com/feeds/1308744345982473774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/03/olap-desiging-using-adapt.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/1308744345982473774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1821553060466545035/posts/default/1308744345982473774'/><link rel='alternate' type='text/html' href='http://hiteshbiblog.blogspot.com/2010/03/olap-desiging-using-adapt.html' title='OLAP desiging using ADAPT'/><author><name>hitesh</name><uri>http://www.blogger.com/profile/11554269219255963336</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dNBGTOwrvxw/S6r_VmNAsuI/AAAAAAAAAA8/so_YU1JoqyI/s72-c/adapt.JPG' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
