<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BI-Quotient</title>
	<atom:link href="http://www.business-intelligence-quotient.com/Index.php?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.business-intelligence-quotient.com</link>
	<description>Intelligent BI.</description>
	<lastBuildDate>Thu, 09 Sep 2010 19:45:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Subselect, derived tables, and subqueries in ODI 11G</title>
		<link>http://www.business-intelligence-quotient.com/?p=1045</link>
		<comments>http://www.business-intelligence-quotient.com/?p=1045#comments</comments>
		<pubDate>Thu, 09 Sep 2010 19:43:02 +0000</pubDate>
		<dc:creator>Uli Bethke</dc:creator>
				<category><![CDATA[Oracle Data Integrator (ODI)]]></category>
		<category><![CDATA[odi]]></category>
		<category><![CDATA[ODI 11G]]></category>
		<category><![CDATA[odi derived table]]></category>
		<category><![CDATA[oracle data integrator]]></category>
		<category><![CDATA[subquery]]></category>
		<category><![CDATA[subselect]]></category>

		<guid isPermaLink="false">http://www.business-intelligence-quotient.com/?p=1045</guid>
		<description><![CDATA[I think one of the best new features in ODI 11G is the subselect/subquery feature. In ODI 10 this could only be achieved by a workaround as outlined in a previous post Using subqueries in Oracle Data Integrator.
What is the advantage of a subquery?
In previous versions of ODI we had to physically set down the [...]]]></description>
			<content:encoded><![CDATA[<p>I think one of the best new features in ODI 11G is the subselect/subquery feature. In ODI 10 this could only be achieved by a workaround as outlined in a previous post <a href="http://www.business-intelligence-quotient.com/?p=621">Using subqueries in Oracle Data Integrator</a>.</p>
<p><strong>What is the advantage of a subquery?</strong></p>
<p>In previous versions of ODI we had to physically set down the data for each indiviudal query, e.g. if we wanted to rank a dataset and then select the top ten out of that dataset we had to create an interface for the ranking operation and an interface for the top ten operation. At each point we had to set down the data thereby increasing I/O and decreasing overall performance. In ODI 11 this has changed. While we still need to create two temp interfaces for the operation as a whole we can now tell ODI to treat the first temp interface as a derived table. ODI 11G will then use this to generate a subquery. </p>
<p><strong>How does the subquery work in ODI 11?</strong></p>
<p>The way this works is fairly simple. For each subquery/derived table in your query you create a temp interface. You embed your various subqueries by simply telling ODI that you want to use the temp interface as a subquery.</p>
<p><strong>A step by step guide</strong></p>
<p>We will look at an example from the SH schema. The task at hand is to load a table with the top ten customers based on sales amount.</p>
<p>To accomplish this task we need three temp interfaces. </p>
<p>The first temp interface (INT_SALES_CUST) will aggregate the sales amount from the sales table by cust_id</p>
<p><img src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/09/odi11_subquery11.gif" alt="odi11_subquery1" title="odi11_subquery1" width="604" height="220"  /></p>
<p>The second temp interface (INT_SALES_RANK) will take the resultset from the interface in the previous step and dense rank the customers’ sales data. </p>
<p><img src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/09/odi11_subquery2.gif" alt="odi11_subquery2" title="odi11_subquery2" width="590" height="155"  /></p>
<p>The third interface (INT_TOP_TEN) will then select the top ten customers, join to the customers table, and physically set down the data.</p>
<p><img src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/09/odi11_subquery3.gif" alt="odi11_subquery3" title="odi11_subquery3" width="603" height="476"  /></p>
<p>So far so good. These are the same steps we took in ODI 10.</p>
<p>In a next step we need to subquery enable the interfaces. We open interface INT_SALES_RANK and click on the INT_SALES_CUST data store. In the Source Properties section you will find a checkbox Use Temporary Interface as Derived Table. Select this checkbox.</p>
<p><img src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/09/odi11_subquery4.gif" alt="odi11_subquery4" title="odi11_subquery4" width="586" height="456" /></p>
<p>We also need to perform the same step for our third interface INT_TOP_TEN.</p>
<p>Once this has been done we can execute interface INT_TOP_TEN in Simulation mode. </p>
<p><img src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/09/odi11_subquery5.gif" alt="odi11_subquery5" title="odi11_subquery5" width="283" height="187"  /></p>
<p>This will generate the required query with the embedded subqueries from the temp interfaces. What a great feature.</p>
<pre class="brush: sql;">
INSERT INTO sh.cust_top_ten
            (sales_rank,
             cust_first_name,
             cust_id,
             sales_amt,
             cust_last_name)
SELECT sales_rank,
       cust_first_name,
       cust_id,
       sales_amt,
       cust_last_name
FROM   (SELECT sales_rank.sales_rank     sales_rank,
               customers.cust_first_name cust_first_name,
               customers.cust_id         cust_id,
               sales_rank.sales_amt      sales_amt,
               customers.cust_last_name  cust_last_name
        FROM   (SELECT sales_cust.cust_id
                       cust_id,
                       sales_cust.sales_amt
                       sales_amt
                       ,
                       Dense_rank() over (ORDER BY
                       sales_cust.sales_amt DESC) sales_rank
                FROM   (SELECT sales.cust_id           cust_id,
                               SUM (sales.amount_sold) sales_amt
                        FROM   sh.sales sales
                        WHERE  ( 1 = 1 )
                        GROUP  BY sales.cust_id) sales_cust
                WHERE  ( 1 = 1 )) sales_rank,
               sh.customers customers
        WHERE  ( 1 = 1 )
               AND ( sales_rank.cust_id = customers.cust_id )
               AND ( sales_rank.sales_rank <= 10 )) odi_get_from
</pre>
<img src="http://www.business-intelligence-quotient.com/?ak_action=api_record_view&id=1045&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.business-intelligence-quotient.com/?feed=rss2&amp;p=1045</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data Modelling books for the Enterprise Data Warehouse (EDW)</title>
		<link>http://www.business-intelligence-quotient.com/?p=1037</link>
		<comments>http://www.business-intelligence-quotient.com/?p=1037#comments</comments>
		<pubDate>Wed, 01 Sep 2010 18:53:12 +0000</pubDate>
		<dc:creator>Uli Bethke</dc:creator>
				<category><![CDATA[Data Warehousing Books]]></category>

		<guid isPermaLink="false">http://www.business-intelligence-quotient.com/?p=1037</guid>
		<description><![CDATA[In other parts of this series we have had a look at data warehousing books that cover the design and architecture of a business intelligence solution. I have also covered data warehousing books in the world of Oracle and data warehousing and business intelligence books for project management and business analysis. Today we&#8217;ll discuss data [...]]]></description>
			<content:encoded><![CDATA[<p>In other parts of this series we have had a look at <a href="http://www.business-intelligence-quotient.com/?p=393" target="_blank">data warehousing books</a> that cover the design and architecture of a business intelligence solution. I have also covered <a href="http://www.business-intelligence-quotient.com/?p=556" target="_blank">data warehousing books in the world of Oracle</a> and <a href="http://www.business-intelligence-quotient.com/?p=829">data warehousing and business intelligence books</a> for project management and business analysis. Today we&#8217;ll discuss data modeling books for building an Enterprise Data Warehouse</p>
<p>If you are involved in an enterprise data warehouse program (and by that I don&#8217;t mean Kimball&#8217;s conformed dimension stuff) you need to be familiar with all aspects of data modelling. This includes</p>
<p>- Requirements gathering<br />
- Enterprise data modeling<br />
- Conceptual/subject area modelling<br />
- Logical modelling<br />
- Physical modelling<br />
- Dimensional modelling<br />
- Normalization and denormalization<br />
- Subtypes &amp; supertypes<br />
- Universal data modelling patterns<br />
- Generic data modelling<br />
- ER data modelling<br />
- UML data modelling<br />
- The collaboration process (bridging the business &#8211; IT divide)<br />
- Selecting a data modeling tool</p>
<p>A well thought out enterprise data model is the foundation for a successful enterprise data warehouse.</p>
<p>I have put together a list of the most important data modelling books. These will teach you the tools and techniques of the best data modelers out there.</p>
<p><strong><a target="_blank" href="http://www.amazon.com/gp/product/0471111759?ie=UTF8&#038;tag=busineintellq-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0471111759">Data Modeler&#8217;s Workbench</a></strong></p>
<p><a target="_blank" href="http://www.amazon.com/gp/product/0471111759?ie=UTF8&#038;tag=busineintellq-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0471111759"><img border="0" src="http://ecx.images-amazon.com/images/I/51k2jyJhdBL._SL160_.jpg"></a><img src="http://www.assoc-amazon.com/e/ir?t=busineintellq-20&#038;l=as2&#038;o=1&#038;a=0471111759" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p><strong><a target="_blank" href="http://www.amazon.com/gp/product/0977140067?ie=UTF8&#038;tag=busineintellq-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0977140067">Data Modeling Made Simple</a></strong></p>
<p><a target="_blank" href="http://www.amazon.com/gp/product/0977140067?ie=UTF8&#038;tag=busineintellq-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0977140067"><img border="0" src="http://ecx.images-amazon.com/images/I/41yNuoAV7TL._SL160_.jpg"></a><img src="http://www.assoc-amazon.com/e/ir?t=busineintellq-20&#038;l=as2&#038;o=1&#038;a=0977140067" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p><strong><a target="_blank" href="http://www.amazon.com/gp/product/0126445516?ie=UTF8&#038;tag=busineintellq-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0126445516">Data Modelling Essentials</a></strong></p>
<p><a target="_blank" href="http://www.amazon.com/gp/product/0126445516?ie=UTF8&#038;tag=busineintellq-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0126445516"><img border="0" src="http://ecx.images-amazon.com/images/I/51JvUTwgkyL._SL160_.jpg"></a><img src="http://www.assoc-amazon.com/e/ir?t=busineintellq-20&#038;l=as2&#038;o=1&#038;a=0126445516" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p><strong><a target="_blank" href="http://www.amazon.com/gp/product/0470178450?ie=UTF8&#038;tag=busineintellq-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0470178450">The Data Model Resource Book, Vol. 3</a></strong></p>
<p><a target="_blank" href="http://www.amazon.com/gp/product/0470178450?ie=UTF8&#038;tag=busineintellq-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0470178450"><img border="0" src="http://ecx.images-amazon.com/images/I/51l37czAX-L._SL160_.jpg"></a><img src="http://www.assoc-amazon.com/e/ir?t=busineintellq-20&#038;l=as2&#038;o=1&#038;a=0470178450" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p><strong><br />
<a target="_blank" href="http://www.amazon.com/gp/product/0471324213?ie=UTF8&#038;tag=busineintellq-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0471324213">Mastering Data Warehouse Design: Relational and Dimensional Techniques</a></strong></p>
<p><a target="_blank" href="http://www.amazon.com/gp/product/0471324213?ie=UTF8&#038;tag=busineintellq-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0471324213"><img border="0" src="http://ecx.images-amazon.com/images/I/51Y1Mi6yXHL._SL160_.jpg"></a><img src="http://www.assoc-amazon.com/e/ir?t=busineintellq-20&#038;l=as2&#038;o=1&#038;a=0471324213" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<img src="http://www.business-intelligence-quotient.com/?ak_action=api_record_view&id=1037&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.business-intelligence-quotient.com/?feed=rss2&amp;p=1037</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comparing Exadata and Netezza TwinFin</title>
		<link>http://www.business-intelligence-quotient.com/?p=1030</link>
		<comments>http://www.business-intelligence-quotient.com/?p=1030#comments</comments>
		<pubDate>Fri, 13 Aug 2010 14:36:02 +0000</pubDate>
		<dc:creator>Uli Bethke</dc:creator>
				<category><![CDATA[Data Warehouse]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[exadata]]></category>

		<guid isPermaLink="false">http://www.business-intelligence-quotient.com/?p=1030</guid>
		<description><![CDATA[Comparison between Exadata and Netezza Twin Fin. Ok, it comes from Netezza and as such is biased, but still an interesting read. 
It is worthwhile to remember though that Exadata is designed for mixed workloads (OLTP and Analytics), which is a key differentiator to any of the other DW appliance vendors.
Interesting posts by Curt Monash [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://www.netezza.com/eBooks/exadata-twinfin-compared.pdf">Comparison between Exadata and Netezza Twin Fin</a>. Ok, it comes from Netezza and as such is biased, but still an interesting read. </p>
<p>It is worthwhile to remember though that Exadata is designed for mixed workloads (OLTP and Analytics), which is a key differentiator to any of the other DW appliance vendors.</p>
<p>Interesting posts by Curt Monash on this</p>
<p>http://www.dbms2.com/2009/09/29/integration-oltp-data-warehousing-exadata-2/<br />
http://www.dbms2.com/2010/01/22/oracle-database-hardware-strategy/</p>
<p>Where is the response from Oracle?</p>
<p></p>
<img src="http://www.business-intelligence-quotient.com/?ak_action=api_record_view&id=1030&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.business-intelligence-quotient.com/?feed=rss2&amp;p=1030</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OBIEE 11G: 9 September</title>
		<link>http://www.business-intelligence-quotient.com/?p=1026</link>
		<comments>http://www.business-intelligence-quotient.com/?p=1026#comments</comments>
		<pubDate>Fri, 13 Aug 2010 07:05:10 +0000</pubDate>
		<dc:creator>Uli Bethke</dc:creator>
				<category><![CDATA[Irish BI SIG]]></category>

		<guid isPermaLink="false">http://www.business-intelligence-quotient.com/?p=1026</guid>
		<description><![CDATA[No it&#8217;s not the fecking release date  . It&#8217;s just the next date for the Irish BI SIG to meet.
This time round the focus will be on OBIEE and in particular on OBIEE 11G.
Matt Harte from Peak Indicators will give a presentation on OBIEE best practice.
Chris Hathaway from Oracle will give a presentation on [...]]]></description>
			<content:encoded><![CDATA[<p>No it&#8217;s not the fecking release date <img src='http://www.business-intelligence-quotient.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . It&#8217;s just the next date for the <a target="_blank" href="http://www.ukoug.org/calendar/show_event.jsp?id=4613">Irish BI SIG</a> to meet.</p>
<p>This time round the focus will be on OBIEE and in particular on OBIEE 11G.</p>
<p>Matt Harte from Peak Indicators will give a presentation on OBIEE best practice.</p>
<p>Chris Hathaway from Oracle will give a presentation on the new features of OBIEE 11G.</p>
<p>I&#8217;ve finally managed to download and install ODI 11G but so far have had no time to play around with it. If I get around to do this I will give a brief demo on ODI 11G.</p>
<p>See you out at East Point</p>
<img src="http://www.business-intelligence-quotient.com/?ak_action=api_record_view&id=1026&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.business-intelligence-quotient.com/?feed=rss2&amp;p=1026</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizing Help Files in OBIEE</title>
		<link>http://www.business-intelligence-quotient.com/?p=1019</link>
		<comments>http://www.business-intelligence-quotient.com/?p=1019#comments</comments>
		<pubDate>Wed, 11 Aug 2010 13:54:46 +0000</pubDate>
		<dc:creator>Helena</dc:creator>
				<category><![CDATA[OBIEE]]></category>

		<guid isPermaLink="false">http://www.business-intelligence-quotient.com/?p=1019</guid>
		<description><![CDATA[Creating Help Files in OBIEE]]></description>
			<content:encoded><![CDATA[<p>Hi all, my name is Helena Bennett and I am currently working in the BI space as a Business Analyst, I came across help files recently and thought I would put together a &#8220;how to&#8221;&#8230;.</p>
<p><strong>What are They?</strong><br />
In OBIEE help files are .htm files which are used to help users to better understand report content. They can assist with user training of new reports as they can describe any logic contained in the report for example filters which isn&#8217;t obvious from looking at the report. They can also describe the attributes and measures displayed on the report and any other report specific information.</p>
<p><strong>How do you create them?</strong><br />
To create a help file you need to do the following:<br />
1. Create a .htm file which contains the content of your help file<br />
2. Save it to the following location: &#8230;\app\res<br />
3. Point to the help file location from the report<br />
Click on the edit button in the Title section of the report</p>
<p><img src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/08/HelpFilesImage12-300x17.png" alt="Edit Title" width="300" height="17" /></p>
<p>Then enter the path and name of your help file:</p>
<p><img src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/08/HelpFilesImage22-300x162.png" alt="Help URL" width="300" height="162" /></p>
<p><strong>How to you access them?</strong><br />
When the report is displayed there will be a &#8216;?&#8217; in the title as shown below<br />
<img src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/08/HelpFilesImage32-300x42.png" alt="Help Icon" width="300" height="42" /></p>
<p>Clicking on this will display the help file for that report</p>
<p><img src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/08/HelpFilesImage42-196x300.png" alt="Sample Help File" width="196" height="300" /></p>
<p>Give them a go &#8211; users will love them!</p>
<img src="http://www.business-intelligence-quotient.com/?ak_action=api_record_view&id=1019&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.business-intelligence-quotient.com/?feed=rss2&amp;p=1019</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle Data Integrator (ODI) web services (SOAP client via ODIInvokewebservice) and the OBIEE web services API.</title>
		<link>http://www.business-intelligence-quotient.com/?p=979</link>
		<comments>http://www.business-intelligence-quotient.com/?p=979#comments</comments>
		<pubDate>Sat, 31 Jul 2010 08:39:23 +0000</pubDate>
		<dc:creator>Uli Bethke</dc:creator>
				<category><![CDATA[OBIEE]]></category>
		<category><![CDATA[Oracle Data Integrator (ODI)]]></category>
		<category><![CDATA[obiee web services api]]></category>
		<category><![CDATA[odi soap client]]></category>
		<category><![CDATA[odi soap single sign on (sso)]]></category>
		<category><![CDATA[odi web services]]></category>
		<category><![CDATA[odiinvokewebservice]]></category>

		<guid isPermaLink="false">http://www.business-intelligence-quotient.com/?p=979</guid>
		<description><![CDATA[As outlined in a previous post ODI has a built in SOAP client via the ODIInvokewebservice tool. One of its limitations is that it doesn’t run on Java 6.
Another limitation is that it doesn’t like SOAP headers. So if you are used to SOAP headers you find in tools such as soapUI  you are [...]]]></description>
			<content:encoded><![CDATA[<p>As outlined in a <a href="http://www.business-intelligence-quotient.com/?p=963">previous post</a> ODI has a built in SOAP client via the ODIInvokewebservice tool. One of its limitations is that it doesn’t run on Java 6.</p>
<p>Another limitation is that it doesn’t like SOAP headers. So if you are used to SOAP headers you find in tools such as <a href="www.soapui.org/" target="_blank">soapUI </a> you are out of luck for the moment. Note 1143755.1 explains that an enhancement request has been logged to include this in a later release, but as of release 10GR3 it is not supported.</p>
<p>So what use is the ODIInvokewebservice? You could, e.g. query the Amazon product advertising API or the ebay equivalent. In this post I’ll show you how you can query the OBIEE web services API. I am currently working on a project to extract the group, user, privilege etc. information from the OBIEE presentation catalog. This is useful to automate the documentation of group hierarchies, inherited privileges etc. I’ll keep you posted on the progress.</p>
<p>The OBIEE web services API does not like Single Sign On (SSO). If you are using IIS as your application server you need to create a second virtual directory and disable integrated security.</p>
<p><img class="alignnone size-full wp-image-980" title="obiee_web_services_api1" src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/07/obiee_web_services_api1.gif" alt="obiee_web_services_api1" width="330" height="321" /></p>
<p><img class="alignnone size-full wp-image-981" title="obiee_web_services_api2" src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/07/obiee_web_services_api2.gif" alt="obiee_web_services_api2" width="297" height="355" /></p>
<p>Once this is done we are ready to go. Create a new package in ODI and add an ODIInvokewebservice tool. On the General tab click on the Advanced… button. This will bring up the ODI SOAP client.</p>
<p><img class="alignnone size-full wp-image-982" title="obiee_web_services_api3" src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/07/obiee_web_services_api3.gif" alt="obiee_web_services_api3" width="375" height="301" /></p>
<p>In the URL field type in the path to the OBIEE WSDL file: http://&#8221;server_name&#8221;/analyticsSOAP/saw.dll?wsdl. This should point to the new virtual directory in the step above. Next click the connect to WSDL icon.</p>
<p><img class="alignnone size-full wp-image-983" title="obiee_web_services_api4" src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/07/obiee_web_services_api4.gif" alt="obiee_web_services_api4" width="296" height="140" /></p>
<p>This will return all of the services and methods that are available from the OBIEE web service API. The web service we are interested in is the SAWSessionServiceSOAP and in particular the logon method. Each request to the OBIEE web services API needs to be authenticated and the logon method returns a sessionID for us.</p>
<p>Populate name and password with username and password of an OBIEE account with SOAP privileges and click the Invoke web service icon</p>
<p><img class="alignnone size-medium wp-image-985" title="obiee_web_services_api5" src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/07/obiee_web_services_api5-300x102.gif" alt="obiee_web_services_api5" width="300" height="102" /></p>
<p>This will return the sessionID that we can use in other requests to the OBIEE API later on.</p>
<p>Click on OK to return to the previous screen. On the General tab you can then define a response file that ODI writes the returned XML to from your web service call.</p>
<p>This will produce an XML file in the specified location similar to the one below:</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;ns1:logonResult xmlns:ns1=&#8221;com.siebel.analytics.web/soap/v5&#8243;&gt;<br />
&lt;ns1:sessionID xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221; xsi:type=&#8221;xsd:string&#8221;&gt;5lll90nu19bbhi49u57h8vdott63gcs5j19g9vazOr07UFe9W00&lt;/ns1:sessionID&gt;<br />
&lt;/ns1:logonResult&gt;</p>
<p>We can then extract and load the sessionID via an ODI Interface into a database or temporarily store in the hsqldb odi memory engine.</p>
<p>There is one issue with this, however. The ODI XML parser doesn’t like xsi attributes such as xsi:type. So before we can reverse engineer the logon.xml from above we need to get rid of any occurrence of xsi:type in the logon.xml file. I have written an ODI procedure in Jython that does exactly that. As a parameter it takes the file path to the logon.xml and replaces any occurrence of xsi:. Of course, if you are on Linux you should use sed  &amp; awk to do this as performance is better.</p>
<p>s = open(&#8221;&lt;%=odiRef.getOption(&#8221;FILE_PATH&#8221;)%&gt;&#8221;).read()<br />
s = s.replace(&#8217;xsi:&#8217;, &#8221;)<br />
f = open(&#8221;&lt;%=odiRef.getOption(&#8221;FILE_PATH&#8221;)%&gt;&#8221;, &#8216;w&#8217;)<br />
f.write(s)<br />
f.close()</p>
<p>Now we are ready to reverse engineer the XML and load the sessionID into a relational database. These steps are well documented so I refer you to the &#8220;<a href="http://www.oracle.com/technology/obe/fusion_middleware/odi/index.html" target="_blank">Oracle by Example Series: Oracle Data Integrator</a>&#8221; site or to <a href="http://www.business-intelligence-quotient.com/?p=933">Craig Stewart&#8217;s ODI video tutorials</a>.</p>
<p>If you want to master scripting in ODI get the following books.</p>
<p><strong>Java BeanShell</strong></p>
<p><a href="http://www.amazon.com/gp/product/0321321936?ie=UTF8&amp;tag=busineintellq-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321321936" target="_blank">Scripting in Java: Languages, Frameworks, and Patterns</a></p>
<p><strong>Jython</strong></p>
<p><a href="http://www.amazon.com/gp/product/1430225270?ie=UTF8&amp;tag=busineintellq-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430225270" target="_blank">The Definitive Guide to Jython: Python for the Java Platform.</a></p>
<p><a href="http://www.amazon.com/gp/product/0596002475?ie=UTF8&amp;tag=busineintellq-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596002475" target="_blank">Jython Essentials (O&#8217;Reilly Scripting)</a></p>
<img src="http://www.business-intelligence-quotient.com/?ak_action=api_record_view&id=979&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.business-intelligence-quotient.com/?feed=rss2&amp;p=979</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle Data Integrator: ODIInvokeWebService and Java 6</title>
		<link>http://www.business-intelligence-quotient.com/?p=963</link>
		<comments>http://www.business-intelligence-quotient.com/?p=963#comments</comments>
		<pubDate>Fri, 16 Jul 2010 20:39:00 +0000</pubDate>
		<dc:creator>Uli Bethke</dc:creator>
				<category><![CDATA[Oracle Data Integrator (ODI)]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[java 6]]></category>
		<category><![CDATA[odi]]></category>
		<category><![CDATA[odiinvokewebservice]]></category>
		<category><![CDATA[oracle data integrator]]></category>
		<category><![CDATA[soap client]]></category>

		<guid isPermaLink="false">http://www.business-intelligence-quotient.com/?p=963</guid>
		<description><![CDATA[ODI has a built in SOAP client, the ODIInvokeWebService tool. However, there is one caveat when you try using this with Java 6/JDK 6. It simply doesn’t work and you will get the following error:
org.apache.xerces.dom.DocumentImpl.getXmlStandalone()Z
This is documented in note 1085594.1 and the suggested workaround is to fall back to an earlier version of Java. Another [...]]]></description>
			<content:encoded><![CDATA[<p>ODI has a built in SOAP client, the ODIInvokeWebService tool. However, there is one caveat when you try using this with Java 6/JDK 6. It simply doesn’t work and you will get the following error:</p>
<p>org.apache.xerces.dom.DocumentImpl.getXmlStandalone()Z</p>
<p>This is documented in note 1085594.1 and the suggested workaround is to fall back to an earlier version of Java. Another option of course is to install another agent that uses Java 5 alongside your Java 6 agent.</p>
<p>The first step we need to take is to install JDK 5. You can <a href="http://java.sun.com/products/archive/ ">download JDK 5</a> from the Oracle website.</p>
<p>If repositories are running on Oracle we also need to <a href="http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html" target="_blank">download the compatible Oracle JDBC 5 driver</a>. If you are running your repositories on another RDBMS get the equivalent JDBC driver.</p>
<p>Next, inside the oracledi folder we create a new folder and name it bin_jdk5.</p>
<p>We then copy the content of the bin folder into bin_jdk5.</p>
<p>The next step will be to create a new environment variable and name it ODI_JAVA_HOME2. The variable needs to be pointed to the JDK 5.</p>
<p><img class="alignnone size-full wp-image-965" title="odi_obiee0" src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/07/odi_obiee0.gif" alt="odi_obiee0" width="425" height="490" /></p>
<p>As a next step we need to edit the odiparams.bat file in the bin_jdk5 folder. Open the file in Notepad and replace ODI_JAVA_HOME with ODI_JAVA_HOME2</p>
<p><img class="alignnone size-full wp-image-966" title="odi_obiee1" src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/07/odi_obiee1.gif" alt="odi_obiee1" width="512" height="499" /></p>
<p>In the same file we also need to replace any occurrence of the word drivers with drivers2</p>
<p><img class="alignnone size-full wp-image-967" title="odi_obiee2" src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/07/odi_obiee2.gif" alt="odi_obiee2" width="663" height="492" /></p>
<p>Next we create a new folder drivers2 inside the oracledi folder and copy and paste the downloaded Oracle JDBC 5 driver into it. Alos copy any other drivers from the drivers folder into the drivers folder that you may want to use with this agent</p>
<p><img class="alignnone size-full wp-image-968" title="odi_obiee3" src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/07/odi_obiee3.gif" alt="odi_obiee3" width="458" height="456" /></p>
<p>Finally we create a new agent that uses the JDK 5 as a Windows service.</p>
<p>First edit file agentservice.bat and replace bin\odiparams.bat with bin_jdk5\odiparams.bat as per figure below</p>
<p><img class="alignnone size-full wp-image-969" title="odi_obiee4" src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/07/odi_obiee4.gif" alt="odi_obiee4" width="420" height="278" /></p>
<p>Then we create a copy of file snpsagent.conf in folder oracldi\tools\wrapper\conf. Replace any occurrence of drivers with drivers2.</p>
<p>We also replace wrapper.working.dir=../../../bin/ with wrapper.working.dir=../../../bin_jdk5/</p>
<p>Next we create the physical and logical agent in Topology Manager.</p>
<p>Finally we install the agent as a listener or scheduler agent.</p>
<p><img class="alignnone size-full wp-image-970" title="odi_obiee5" src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/07/odi_obiee5.gif" alt="odi_obiee5" width="666" height="330" /></p>
<p>In one of the next posts I will show how we can make good use of ODIInvokeWebService to query the OBIEE web services API.</p>
<img src="http://www.business-intelligence-quotient.com/?ak_action=api_record_view&id=963&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.business-intelligence-quotient.com/?feed=rss2&amp;p=963</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nesting ODI Substitution Methods. Part II.</title>
		<link>http://www.business-intelligence-quotient.com/?p=954</link>
		<comments>http://www.business-intelligence-quotient.com/?p=954#comments</comments>
		<pubDate>Thu, 24 Jun 2010 08:15:38 +0000</pubDate>
		<dc:creator>Uli Bethke</dc:creator>
				<category><![CDATA[Oracle Data Integrator (ODI)]]></category>
		<category><![CDATA[odi]]></category>
		<category><![CDATA[odi api]]></category>
		<category><![CDATA[oracle data integrator substitution methods]]></category>
		<category><![CDATA[\u0022]]></category>

		<guid isPermaLink="false">http://www.business-intelligence-quotient.com/?p=954</guid>
		<description><![CDATA[Today we look at how we can escape quotes when nesting ODI substitution method calls at different levels of the multi pass parser.
As an example we will store the columns of the C$_ datastore and the columns of a target datastore in a two dimensional java array.



As you can see, we are nesting a call [...]]]></description>
			<content:encoded><![CDATA[<p>Today we look at how we can escape quotes when nesting ODI substitution method calls at different levels of the multi pass parser.</p>
<p>As an example we will store the columns of the C$_ datastore and the columns of a target datastore in a two dimensional java array.</p>
<pre class="brush: sql;">
<?
   String[][] ColList = {<%=snpRef.getColList("{", "\u0022[EXPRESSION]\u0022", ",", "}", "INS")%>,<%=snpRef.getColList("{", "\u0022[COL_NAME]\u0022", ",", "}", "INS")%>};
int k =0;
int l =1;
for (int i = 0; i < ColList.length; i++) {
   for (int j = 0; j < ColList[i].length; j++) {
      out.println(ColList[j][i]);
   }
}
?>
</pre>
<p>As you can see, we are nesting a call to the ODI substitution API inside a <? ?> parse block. Normally in Java we escape a quote with \&#8221;. In ODI this would throw an error. What we do instead is to use the Unicode representation of the quote character: \u0022 </p>
<p>If you want to master scripting in ODI get the following books.</p>
<p><strong>Java BeanShell</strong></p>
<p><a href="http://www.amazon.com/gp/product/0321321936?ie=UTF8&amp;tag=busineintellq-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321321936" target="_blank">Scripting in Java: Languages, Frameworks, and Patterns</a></p>
<p><strong>Jython</strong></p>
<p><a href="http://www.amazon.com/gp/product/1430225270?ie=UTF8&amp;tag=busineintellq-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430225270" target="_blank">The Definitive Guide to Jython: Python for the Java Platform.</a></p>
<p><a href="http://www.amazon.com/gp/product/0596002475?ie=UTF8&amp;tag=busineintellq-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596002475" target="_blank">Jython Essentials (O&#8217;Reilly Scripting)</a></p>
<img src="http://www.business-intelligence-quotient.com/?ak_action=api_record_view&id=954&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.business-intelligence-quotient.com/?feed=rss2&amp;p=954</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calling custom Java classes and JAR files in ODI via Jython or Java BeanShell</title>
		<link>http://www.business-intelligence-quotient.com/?p=941</link>
		<comments>http://www.business-intelligence-quotient.com/?p=941#comments</comments>
		<pubDate>Wed, 09 Jun 2010 16:39:13 +0000</pubDate>
		<dc:creator>Uli Bethke</dc:creator>
				<category><![CDATA[Oracle Data Integrator (ODI)]]></category>
		<category><![CDATA[jar]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[java class]]></category>
		<category><![CDATA[odi]]></category>

		<guid isPermaLink="false">http://www.business-intelligence-quotient.com/?p=941</guid>
		<description><![CDATA[First we create a simple Java class that creates and writes to a text file and save it as FileWrite.java

import java.io.*;

public class FileWrite
{

  public void writeFile()
  {
    FileOutputStream fos;
    DataOutputStream dos;

    try {

      File file= new File("C:\\MyFile.txt");
   [...]]]></description>
			<content:encoded><![CDATA[<p>First we create a simple Java class that creates and writes to a text file and save it as FileWrite.java</p>
<pre class="brush: sql;">
import java.io.*;

public class FileWrite
{

  public void writeFile()
  {
    FileOutputStream fos;
    DataOutputStream dos;

    try {

      File file= new File("C:\\MyFile.txt");
      fos = new FileOutputStream(file);
      dos=new DataOutputStream(fos);
      dos.writeInt(2333);
      dos.writeChars("Hello World");

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
</pre>
<p>Next we compile the .java class from the command line</p>
<pre class="brush: sql;">
c:\javac FileWrite.java
</pre>
<p>Next we create a .jar file from the class</p>
<pre class="brush: sql;">
c:\jar cf FileWrite.jar FileWrite.class
</pre>
<p>We then copy and paste the .jar archive to the ODI drivers folder</p>
<p>Next we restart the ODI agent.</p>
<p>We can now call methods in this class from either Jython</p>
<pre class="brush: sql;">
import FileWrite

fw=FileWrite()
fw.writeFile()
</pre>
<p><img src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/06/java_odi_jython.gif" alt="java_odi_jython" title="java_odi_jython" width="433" height="315" class="alignnone size-full wp-image-949" /></p>
<p>or we can call it from the Java BeanShell</p>
<pre class="brush: sql;">
import FileWrite;

FileWrite fw = new FileWrite();
fw.writeFile();
</pre>
<p><img src="http://www.business-intelligence-quotient.com/wp-content/uploads/2010/06/java_odi_jbs.gif" alt="java_odi_jbs" title="java_odi_jbs" width="445" height="325" class="alignnone size-full wp-image-950" /></p>
<p>If you want to master scripting in ODI get the following books.</p>
<p><strong>Java BeanShell</strong></p>
<p><a href="http://www.amazon.com/gp/product/0321321936?ie=UTF8&amp;tag=busineintellq-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321321936" target="_blank">Scripting in Java: Languages, Frameworks, and Patterns</a></p>
<p><strong>Jython</strong></p>
<p><a href="http://www.amazon.com/gp/product/1430225270?ie=UTF8&amp;tag=busineintellq-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430225270" target="_blank">The Definitive Guide to Jython: Python for the Java Platform.</a></p>
<p><a href="http://www.amazon.com/gp/product/0596002475?ie=UTF8&amp;tag=busineintellq-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596002475" target="_blank">Jython Essentials (O&#8217;Reilly Scripting)</a></p>
<img src="http://www.business-intelligence-quotient.com/?ak_action=api_record_view&id=941&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.business-intelligence-quotient.com/?feed=rss2&amp;p=941</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Craig Stewart&#8217;s Oracle Data Integrator (ODI) video tutorials</title>
		<link>http://www.business-intelligence-quotient.com/?p=933</link>
		<comments>http://www.business-intelligence-quotient.com/?p=933#comments</comments>
		<pubDate>Sat, 05 Jun 2010 09:43:53 +0000</pubDate>
		<dc:creator>Uli Bethke</dc:creator>
				<category><![CDATA[Oracle Data Integrator (ODI)]]></category>
		<category><![CDATA[odi best practice]]></category>
		<category><![CDATA[odi faq]]></category>
		<category><![CDATA[odi tutorials]]></category>
		<category><![CDATA[odi videos]]></category>

		<guid isPermaLink="false">http://www.business-intelligence-quotient.com/?p=933</guid>
		<description><![CDATA[Craig Stewart has put together a superb set of ODI video tutorials. This stuff is just brilliant. Thanks a lot Craig, for letting me publish these on the blog. You&#8217;ve really earned your new master of the universe title  
How to define a PostgreSQL in ODI &#8211; then reverse engineer in the Designer to [...]]]></description>
			<content:encoded><![CDATA[<p>Craig Stewart has put together a superb set of ODI video tutorials. This stuff is just brilliant. Thanks a lot Craig, for letting me publish these on the blog. You&#8217;ve really earned your new master of the universe title <img src='http://www.business-intelligence-quotient.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>How to define a PostgreSQL in ODI &#8211; then reverse engineer in the Designer to access the data<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/PostgreSQLDataServerVideo.swf">Defining a PostgreSQLserver in ODI</a></p>
<p>ODI has some automatic features which will generate the Group By Statement for you when you use any of the aggregation functions, this is a short demo of how to use it<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/ODIGroupBy.swf">How to use Aggregation Functions in ODI</a></p>
<p>What is the Common Format Designer (CDF), and what can we do with it?  Short demo of the features, generating schemas and generating interfaces automatically.<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/ODICommonFormatDesigner.swf">ODI&#8217;s Common Format Designer</a></p>
<p>Short demo on the Metadata Navigator of ODI<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/ODI-MetadataNavigator.swf">ODI&#8217;s Metadata Navigator</a></p>
<p>OdiZip is a useful tool and this short screencam illustrates its use<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/OdiZipDemo.swf">OdiZip How to use</a> </p>
<p>Sybase ASE to IQ knowledge module<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/KM_ASE2IQ_LOCATION_syntax.swf">Sybase ASE to IQ KM demo</a></p>
<p>How to use custom Java classes in your ODI procedures<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/ODI-CustomJavaCode.swf">Using custom Java code in ODI</a></p>
<p>Using Excel in ODI, including getting round the problem with the limitation of fixed named ranges<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/Excel.swf">Using Excel in ODI</a></p>
<p>How to define and use Flexfields to extend ODI&#8217;s metadata<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/Flexfields.swf">Using FlexFields in ODI</a></p>
<p>Defining XML file in Topology and reverse engineering<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/XML_1_define_xml_in_topology.swf">XML 1 Defining</a></p>
<p>What does the XML structure look like in ODI?<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/XML_2_The_rendered_data_structure.swf">XML 2 The Rendered Data Structure</a></p>
<p>When the definition doesn&#8217;t work, how do you find out what has gone wrong?<br />
<a href="https://s3.amazonaws.com/Ora/XML_3__Defining_More_Complex.swf">XML 3 Topology</a></p>
<p>How to use ODI to populate a simple XML structure<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/XML_4_db_to_XML_Simple.swf">XML 4 Populating Simple XML</a></p>
<p>Populating a more complex XML structuire &#8211; requiring the use of multiple interfaces. Writes to a file with a dynamic name &#8211; in this case the session_id.xml<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/XML_5_db_to_Complex_XML.swf">XML 5 Populating Complex XML</a></p>
<p>How to configure external database storage for the JDBC Driver for XML- useful when dealing with large XML files<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/XML_6_Configuring_External_Database_Storage.swf">XML 6 External Database Storage</a></p>
<p>How to set up the file name for the XML file so that it accommodates the use of multiple different file names<br />
<a target="_blank" href="https://s3.amazonaws.com/Ora/XML_7_Reading_a_dynamic_named_xml_file.swf">XML 7 Reading a Dynamically named XML file</a></p>
<p>If you want to master scripting in ODI get the following books.</p>
<p><strong>Java BeanShell</strong></p>
<p><a href="http://www.amazon.com/gp/product/0321321936?ie=UTF8&amp;tag=busineintellq-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321321936" target="_blank">Scripting in Java: Languages, Frameworks, and Patterns</a></p>
<p><strong>Jython</strong></p>
<p><a href="http://www.amazon.com/gp/product/1430225270?ie=UTF8&amp;tag=busineintellq-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430225270" target="_blank">The Definitive Guide to Jython: Python for the Java Platform.</a></p>
<p><a href="http://www.amazon.com/gp/product/0596002475?ie=UTF8&amp;tag=busineintellq-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596002475" target="_blank">Jython Essentials (O&#8217;Reilly Scripting)</a></p>
<img src="http://www.business-intelligence-quotient.com/?ak_action=api_record_view&id=933&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.business-intelligence-quotient.com/?feed=rss2&amp;p=933</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
