<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Applied dimensionality</title>
	
	<link>http://ykud.com/blog</link>
	<description />
	<lastBuildDate>Mon, 19 Jul 2010 07:48:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AppliedDimensionality" /><feedburner:info uri="applieddimensionality" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Essbase ODBC configuration on Solaris</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/faBSod4tIuo/essbase-odbc-configuration-on-solaris</link>
		<comments>http://ykud.com/blog/hyperion_essbase/essbase-odbc-configuration-on-solaris#comments</comments>
		<pubDate>Mon, 19 Jul 2010 07:31:50 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[essbase]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=374</guid>
		<description><![CDATA[Using this blog as offline memory. Just ignore this post, if you're not up to Essbase ) If you're configuring DataDirect ODBC drivers on *nix system, be aware of following: There are 2 versions of odbc.ini file, one in 32bit driver folder, other in 64. 64 essbase uses 64 drivers. You should copy required odbc.ini [...]]]></description>
			<content:encoded><![CDATA[<p>Using this blog as offline memory. Just ignore this post, if you're not up to Essbase )</p>
<p>If you're configuring DataDirect ODBC drivers on *nix system, be aware of following:</p>
<ol>
<li><span style="font-size: 13.1944px;">There are 2 versions of odbc.ini file, one in 32bit driver folder, other in 64. 64 essbase uses 64 drivers.</span></li>
<li><span style="font-size: 13.1944px;">You should copy required odbc.ini file to essbasepath\bin. And you should create a symbolic link (ln -s) to odbc.ini file in essbase user home folder (/home/hyperion, for example)</span></li>
<li><span style="font-size: 13.1944px;">When creating a SQL data source rule file -- ServerName corresponds to database server name, not essbase server name (type TNS name for oracle database)</span></li>
</ol>
<p>Useful links:</p>
<p><a href="http://download.oracle.com/docs/cd/E17236_01/epm.1112/esb_sql_interface/launch.html">Essbase SQL Interface Documentation</a></p>
<p>Metalink on search keywords 'odbc.ini + essbase' )</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/hyperion_essbase/essbase-odbc-configuration-on-solaris/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/hyperion_essbase/essbase-odbc-configuration-on-solaris</feedburner:origLink></item>
		<item>
		<title>BI system metadata impact analysis and what BI system APIs are for</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/CobdH8B_eYE/bi-system-metadata-impact-analysis-and-what-bi-system-apis-are-for</link>
		<comments>http://ykud.com/blog/bicpm/oracle/bi-system-metadata-impact-analysis-and-what-bi-system-apis-are-for#comments</comments>
		<pubDate>Wed, 19 May 2010 10:52:23 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=356</guid>
		<description><![CDATA["Okay, this column in our BI metadata was supposed to be named Sales, not Sals. But when we change it, what will happen to the reports that were created, using this name? And how many reports use this column anyway? Maybe we shouldn't touch anything to keep things working..." Ever been in such situation? This [...]]]></description>
			<content:encoded><![CDATA[<div>"Okay, this column in our BI metadata was supposed to be named Sales, not Sals.</div>
<div>But when we change it, what will happen to the reports that were created, using this name? And how many reports use this column anyway? Maybe we shouldn't touch anything to keep things working..."</div>
<div>Ever been in such situation?</div>
<div>This question can be answered by opening each report and then looking at it's contents ) A horrible task indeed.</div>
<div>Actually, this is exactly what BI system API are made for. Using them you should be able to automagically look into each report and find whether this column is used in it.</div>
<div>And as usual in this 'BI system Needs and Means' series, let's look how it's done in IBM Cognos BI and Oracle BI.</div>
<h3>Cognos BI</h3>
<div>Cognos BI has had an SDK (Software Development Kit) since ReportNet (for more than 5 years already) and this 'long-time in market' allowed to develop a whole ecosystem of tools to breed on top of it.</div>
<div>Concerning the question at the start of the post -- there's:</div>
<div>Cognos Dynamic Report Updater -- a tool to replace change column in every report.</div>
<div><a href="http://www-01.ibm.com/support/docview.wss?uid=swg24021248">http://www-01.ibm.com/support/docview.wss?uid=swg24021248 </a></div>
<div>Moreover, look at whole bunch of tools, based on SDK:</div>
<div><a href="http://www-01.ibm.com/software/data/support/cognos_diagnostictools.html">http://www-01.ibm.com/software/data/support/cognos_diagnostictools.html</a></div>
<div>and tools, developed by third-party vendors:</div>
<div><a href="http://www.brightstarpartners.com/bspsoftware.php">http://www.brightstarpartners.com/bspsoftware.php</a></div>
<h3>Oracle BI</h3>
<div>In Oracle BI, finding such changes is somehow easier, since all reports are stored as xml files in presentation catalog folder. You just write a simple script that iterates on files, finds a string in file and reports back it's findings (or replaces this string with a new one). Sounds easy, but after spending a couple days at it, I'm not so sure anymore )</div>
<div>There are a few major point against this way</div>
<div>1) It's unsupported, there are no declared report modification API's, AFAIK, so you're scripting at your own sake. That would not be a big problem, if not:</div>
<div>2) Oracle BI presentation service adds a hash tag to report (and folder) names if they exceed 55 characters in length (see more on this topic here: <a href="http://obiee101.blogspot.com/2010/02/obiee-report-name-length.html">http://obiee101.blogspot.com/2010/02/obiee-report-name-length.html</a>).</div>
<div>2.1) If report's names are not in ASCII, they are converted to UTF-8 (but starting x symbol is replaced by #), so each non-ASCII symbol takes 5. So if you find file, containing desired string, you can only decode back first 9 letters of it's name -- report names are usually much longer than that. Therefore your searching capabilities are seriously limited.</div>
<div>2.2) Folder name hashing poses another problem if you're using Windows. It impossible to iterate through catalogcontaining hashes an # in it's name -- OS listing methods stop working. Hope that situation is better on Linux. An easy but entirely manual workaround is to rename catalog folders to numbers (1,2,3,4) before starting the script ant to rename it back after.</div>
<div>I totally wish that this situation will change in nearest future and there will be a simple Presentation Server API call that will bring report name from file name and vica versa.</div>
<div>As usual, if anyone is interested in scripts  I wrote for the task (python, as usual + vbs) -- ping me.</div>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/oracle/bi-system-metadata-impact-analysis-and-what-bi-system-apis-are-for/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/bicpm/oracle/bi-system-metadata-impact-analysis-and-what-bi-system-apis-are-for</feedburner:origLink></item>
		<item>
		<title>Freebase GridWorks — a data-driven approach to ETL</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/XG975S4PoA8/freebase-gridworks-a-data-driven-approach-to-etl</link>
		<comments>http://ykud.com/blog/etl/freebase-gridworks-a-data-driven-approach-to-etl#comments</comments>
		<pubDate>Tue, 11 May 2010 14:11:32 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[etl]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=341</guid>
		<description><![CDATA[Take 5 minutes to watch screencast for FreeBase Gridworks -- an interesting new approach to data transformation. Instead of 'transformation-based' approach of every tool on the market, this tool uses 'data-based' approach, which looks rather intriguing. Especially 'Undo-Redo' function ) I keep thinking when to use this tool. User driven data load in DWH? This [...]]]></description>
			<content:encoded><![CDATA[<p>Take 5 minutes to watch screencast for <a href="http://code.google.com/p/freebase-gridworks/">FreeBase Gridworks</a> -- an interesting new approach to data transformation. Instead of 'transformation-based' approach of every tool on the market, this tool uses 'data-based' approach, which looks rather intriguing. Especially 'Undo-Redo' function )</p>
<p>I keep thinking when to use this tool. User driven data load in DWH? This tool lacks MDM capabilities in such case. Manual cleaning of csv files?...</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/etl/freebase-gridworks-a-data-driven-approach-to-etl/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/etl/freebase-gridworks-a-data-driven-approach-to-etl</feedburner:origLink></item>
		<item>
		<title>TM1 hint – TurboIntegrator Local Variables</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/i1vSrnc4B14/tm1-hint-turbointegrator-local-variables</link>
		<comments>http://ykud.com/blog/cognos/tm1-cognos/tm1-hint-turbointegrator-local-variables#comments</comments>
		<pubDate>Tue, 27 Apr 2010 15:55:18 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[tm1]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=331</guid>
		<description><![CDATA[TM1 TurboIntegrator (TI) is truly a highly customizable tool I recently needed to be able to pass cube view names as a parameter for export process and it turned out to be really easy. Although DataSource is selected via menu during TI process creation and there are no TI functions to change it, it can [...]]]></description>
			<content:encoded><![CDATA[<p>TM1 TurboIntegrator (TI) is truly a highly customizable tool <img src='http://ykud.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I recently needed to be able to pass cube view names as a parameter for export process and it turned out to be really easy.<br />
Although DataSource is selected via menu during TI process creation and there are no TI functions to change it, it can be done easily via TurboIntegrator Local Variables. There are local variables in TI (namely, DatasourceType,DatasourceCubeview and some more) that are set during GUI datasource selection. But they can be set in procedure as well.<br />
So you just:<br />
1 Add a Parameter of type string<br />
<a href="http://ykud.com/blog/wp-content/uploads/2010/04/tm1_parameter_add.jpg"><img src="http://ykud.com/blog/wp-content/uploads/2010/04/tm1_parameter_add.jpg" alt="" title="tm1_parameter_add" width="473" height="118" class="alignleft size-full wp-image-333" /></a><br />
2 Update needed TI Local Variable using this Parameter<br />
<a href="http://ykud.com/blog/wp-content/uploads/2010/04/tm1_prolog_datasource_change.jpg"><img src="http://ykud.com/blog/wp-content/uploads/2010/04/tm1_prolog_datasource_change.jpg" alt="" title="tm1_prolog_datasource_change" width="296" height="157" class="alignleft size-full wp-image-334" /></a><br />
And then work with data as you like )</p>
<p>There are many interesting <a href="http://publib.boulder.ibm.com/infocenter/ctm1/v9r4m1/index.jsp?topic=/com.ibm.swg.im.cognos.tm1_turb.9.4.1.doc/tm1_turb_id1196ImportingfromaTM1VieworSubset_ND0007.html">Local Variables</a> in TI, especially those that define ASCII output (delimeters, quotes). </p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/tm1-cognos/tm1-hint-turbointegrator-local-variables/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/cognos/tm1-cognos/tm1-hint-turbointegrator-local-variables</feedburner:origLink></item>
		<item>
		<title>Multidimensional reporting functions in Cognos and Oracle</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/S1NlX0Cb1Jk/multidimensional-reporting-functions-in-cognos-and-oracle</link>
		<comments>http://ykud.com/blog/cognos/multidimensional-reporting-functions-in-cognos-and-oracle#comments</comments>
		<pubDate>Sun, 25 Apr 2010 17:47:32 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=305</guid>
		<description><![CDATA[As many of you already know I have a mixed attitude to Cognos BI DMRs (dimensionally modeled relational source) models: performance is allways a consideration, full-table scans are unpredictable there's always 'local processing' vs 'database only and some things not working' dilemma using multidimensional functions in reports is oh-so-hard to debug when they don't work in [...]]]></description>
			<content:encoded><![CDATA[<p>As many of you already know I have a mixed attitude to Cognos BI DMRs (dimensionally modeled relational source) models:</p>
<ul>
<li>performance is allways a consideration, full-table scans are unpredictable</li>
<li> there's always 'local processing' vs 'database only and some things not working' dilemma</li>
<li> using multidimensional functions in reports is oh-so-hard to debug when they don't work in complex situations.</li>
</ul>
<div>Even after 4 years working with Cognos BI I still have to start multidimensional reports with simple cases to prove that functions work as I expect them to  (sigh).</div>
<p><br></p>
<div>BUT -- at least Cognos has those functions!</div>
<p><br></p>
<div>We've just spent more than a week trying to replicate members() function in Oracle BI project. Function is as simple as can be, it just returns all dimension members from all levels in a single list (see <a href="http://publib.boulder.ibm.com/infocenter/c8bi/v8r4m0/topic/com.ibm.swg.im.cognos.ug_fm.8.4.1.doc/ug_fm_i_sql-99.html#sql-99">documentation </a>on IBM site). And if you add measure to report -- correct totals will be calculated. Oracle BI has the dimension with levels and aggregations concept, but no such function, so you have to<a href="http://www.rittmanmead.com/2009/08/14/oracle-bi-ee-10-1-3-4-1-sub-totals-during-drills-conforming-dimensions"> turn over your head</a> to achieve this. Replicating dimension table in logical model as many times as there are levels seems the easiest solution.</div>
<p><br></p>
<div><img  title="sad_owl_eyes" src="http://ykud.com/blog/wp-content/uploads/2010/04/sad_owl_eyes1.jpg" align="left" />I'm really frustrated by this.</div>
<div>Definitely not the problem I'd like to spend time trying to solve  :(</div>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/multidimensional-reporting-functions-in-cognos-and-oracle/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/cognos/multidimensional-reporting-functions-in-cognos-and-oracle</feedburner:origLink></item>
		<item>
		<title>Connecting BI system to Active Directory. Oracle BI vs IBM Cognos BI. Scripts to extract Active Directory information.</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/HnmjWuCy6js/connecting-bi-system-to-active-directory-oracle-bi-vs-ibm-cognos-bi-scripts-to-extract-active-directory-information</link>
		<comments>http://ykud.com/blog/cognos/connecting-bi-system-to-active-directory-oracle-bi-vs-ibm-cognos-bi-scripts-to-extract-active-directory-information#comments</comments>
		<pubDate>Tue, 13 Apr 2010 06:00:31 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=295</guid>
		<description><![CDATA[I consider Single Sign-On setup through Active Directory(AD) a key point in every system's life. Up to this point -- it's just a PoC, a prototype or a department (10-20 users) level application. AD integration step is usually prosponed, because it's documented somewhere and there are much more important things to do, like showing that [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste">I consider Single Sign-On setup through Active Directory(AD) a key point in every system's life.</div>
<div>Up to this point -- it's just a PoC, a prototype or a department (10-20 users) level application.</div>
<div id="_mcePaste">AD integration step is usually prosponed, because it's documented somewhere and there are much more important things to do, like showing that this system is of any value at all.</div>
<div id="_mcePaste">But adding an AD connection mean that system is rooted (even if lightly) in company's IT ecosystem.</div>
<div id="_mcePaste">There's always a dilemma on groups and rights storage:</div>
<div id="_mcePaste">1) You can use AD groups for BI level user rights. AD admins are usually against this, it means more work for them.</div>
<div id="_mcePaste">2) Just use AD as a user catalog and add all groups and rights information in BI system. This means introducing more work to BI administrators and adding potential security problems. Imagine if BI admin won't be notified of a person transfer from department to department or from sales to marketing. And why should BI administrator even care about that )</div>
<div id="_mcePaste">Pro's and cons of each way are easy to deduct and choice is always organization-dependent, so I won't stop on that and go right to complains section.</div>
<h2>Using Active Directory in Cognos and Oracle BI</h2>
<h3>Cognos</h3>
<div>About a year ago we had a PoC on Cognos, where the requirement was to not just common "users and groups", but also we had to use custom created AD properties for data filtering.</div>
<div id="_mcePaste">It's easy to do in Cognos 8 BI: you just add Framework Manager macro that returns this property. Piece of cake really. And it turned out to be hard for our competitors.</div>
<div id="_mcePaste"><a href="http://www-01.ibm.com/support/docview.wss?uid=swg21341035">Description on IBM portal</a>, historical number --  1027162</div>
<h3>Oracle</h3>
<div id="_mcePaste">Recently I've had to do the same with Oracle BI and it turned out that Oracle BI's current integration with Active Directory is pretty basic. The only way to communicate with AD is authentificate users through it, there's no way to access User groups or custom properties (there is a way, but it requieres changing ActiveDirectory, which isn't good at all). See Metalink note on this subject: 544828.1</div>
<div id="_mcePaste">So there's no built-in way in OraBI to get all those delicious groups and other properties. But there's always a way out called scripting )</div>
<h2>Extracting Active Directory information to csv</h2>
<div id="_mcePaste">You can write a script that will extract needed information from Active Directory to a csv file and then schedule it for nightly extracts, load it into a table and use this table in Oracle BI security variables. This is a reliable solution, but it introduces a time lag between AD modifications and your extracts, which can be important from security point of view. Same example --user is transfered and can still access BI data he's no longer authorized to see until Active Directory information is extracted again. Setting small extract lags can bring unwanted load on Active Directory, so it's once again a balanced choice to make.</div>
<p>Links for extracting Active Directory information to csv:</p>
<p><a href="http://social.technet.microsoft.com/wiki/contents/articles/step-by-step-guide-to-bulk-import-and-export-to-active-directory.aspx">Step by Step Active Directory Export Guide </a><br />
<a href="http://www.rlmueller.net/ADOSearchTips.htm">http://www.rlmueller.net/ADOSearchTips.htm</a><br />
<a href="http://www.computerperformance.co.uk/Logon/LDAP_attributes_active_directory.htm">http://www.computerperformance.co.uk/Logon/LDAP_attributes_active_directory.htm</a><br />
<a href="http://sourceforge.net/projects/jxplorer/">JXplorer -- a graphical tool to browse any LDAP server</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/connecting-bi-system-to-active-directory-oracle-bi-vs-ibm-cognos-bi-scripts-to-extract-active-directory-information/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/cognos/connecting-bi-system-to-active-directory-oracle-bi-vs-ibm-cognos-bi-scripts-to-extract-active-directory-information</feedburner:origLink></item>
		<item>
		<title>Setting up ODI file-CDC capabilities</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/sELuQOc7gfo/setting-up-odi-file-cdc-capabilities</link>
		<comments>http://ykud.com/blog/bicpm/oracle/setting-up-odi-file-cdc-capabilities#comments</comments>
		<pubDate>Tue, 06 Apr 2010 11:10:50 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[etl]]></category>
		<category><![CDATA[odi]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=291</guid>
		<description><![CDATA[How to set up a trick called 'put a file in a folder and it'll dissappear in DWH' with Oracle Data Integrator. Imagine that we need to upload a text file in DWH whenever it appears in some folder with no defined schedule. It really easy to do in ODI: 1) Create a package with [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste">
<div id="_mcePaste">How to set up a trick called 'put a file in a folder and it'll dissappear in DWH' with Oracle Data Integrator.</div>
<div></div>
<div id="_mcePaste">Imagine that we need to upload a text file in DWH whenever it appears in some folder with no defined schedule.</div>
<div>It really easy to do in ODI:</div>
<div id="_mcePaste">1) Create a package with ODIStep 'WaitForFile' which will scan the directory on predefined basis and will move found file in a folder where it'll be processed. I usually archive and timestamp file on the way -- this saves a lot of time in "where did this number come from" arguments.</div>
<div id="_mcePaste">2) Insert a scenario that will process the file</div>
<div id="_mcePaste">3) Steps 1-2 work only once, so we need to cycle things up, so that after processing a file, system starts waiting for a new one.  This is as easy as making a scenario of a package we're creating and inserting as step 3 )</div>
<div><a href="http://ykud.com/blog/wp-content/uploads/2010/04/odi_file_cdc.jpg"><img class="aligncenter size-full wp-image-293" title="odi_file_cdc" src="http://ykud.com/blog/wp-content/uploads/2010/04/odi_file_cdc.jpg" alt="" width="652" height="305" /></a></div>
<div id="_mcePaste">So we've got a scenario which grabs files from a folder and processes it. Just run it and it'll wait in background and process all the files you throw at it. But what happens if we reboot ODI agent server? To ensure that this task starts automatically -- just add a schedule for this scenario with 'Start on Startup' option.</div>
<div id="_mcePaste">Bingo: disaster-prone file vacuum cleaner )</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/oracle/setting-up-odi-file-cdc-capabilities/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/bicpm/oracle/setting-up-odi-file-cdc-capabilities</feedburner:origLink></item>
		<item>
		<title>Oracle Data Integrator, Oracle XE and JDBC NLS problems</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/W-Wf_yMz33Y/oracle-data-integrator-oracle-xe-and-jdbc-nls-problems</link>
		<comments>http://ykud.com/blog/bicpm/oracle/oracle-data-integrator-oracle-xe-and-jdbc-nls-problems#comments</comments>
		<pubDate>Fri, 26 Feb 2010 16:51:45 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[etl]]></category>
		<category><![CDATA[odi]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=284</guid>
		<description><![CDATA[Since I've spent a day breaking through this mess, I'd share my way of getting ODI to work with XE as a repository. ODI repository creation is sucessfull, but after that Topology Manager and all other ODI modules won't work, throwing "ORA-12705: invalid or unknown NLS parameter value specified" while connecting to XE. There are [...]]]></description>
			<content:encoded><![CDATA[<p>Since I've spent a day breaking through this mess, I'd share my way of getting ODI to work with XE as a repository.</p>
<p>ODI repository creation is sucessfull, but after that Topology Manager and all other ODI modules won't work, throwing "ORA-12705: invalid or unknown NLS parameter value specified" while connecting to XE.</p>
<p>There are 3 java connections to repository in ODI:<br />
<strong>1) For Oracle Data Integrator Modules</strong></p>
<p>Unfotunately, I couldn't get ODI to work with correct NLS by changing odiparams.bat as they recommend on Metalink, but downloading <a href="http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_112010.html">latest jdbc driver from Oracle</a> and removing old ones (physically deleting <img src='http://ykud.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) from \drivers folder helped with this part.</p>
<p><strong>2) For ODI Agent</strong></p>
<p>After trying in vain with adding "-Duser.language=en" "-Duser.region=US" to odiparams, I've created a new wrapper configuration file (stored in ODI_HOME\tools\wrapper\conf) by copying snpsagent.conf to  and adding this options to line</p>
<pre>wrapper.java.additional.1=-Djava.security.policy=server.policy</pre>
<p>so it read</p>
<pre>wrapper.java.additional.1=-Djava.security.policy=server.policy -Duser.language=en -Duser.region=US</pre>
<p>reinstalling agent with the new wrapper conf file (you explicitly run 'agentservice -i -s agent_name 20910 new_wrapper') worked.</p>
<p><strong>3) For Metadata Navigator</strong></p>
<p>I've used Apache Tomcat as a Metadata Navigator container. Setting additional java options (the very same '-Duser.language=en -Duser.region=US') for tomcat solved this one.</p>
<p>See related Metalink Note: 471749.1</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/oracle/oracle-data-integrator-oracle-xe-and-jdbc-nls-problems/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/bicpm/oracle/oracle-data-integrator-oracle-xe-and-jdbc-nls-problems</feedburner:origLink></item>
		<item>
		<title>Macro functions and prompts in Cognos BI reports</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/uaVb69fv8Dk/macro-functions-and-prompts-in-cognos-bi-reports</link>
		<comments>http://ykud.com/blog/cognos/macro-functions-and-prompts-in-cognos-bi-reports#comments</comments>
		<pubDate>Wed, 17 Feb 2010 18:43:49 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=229</guid>
		<description><![CDATA[This post spent a year in drafts -( But Macro functions are an interesting feature of Cognos BI and sometimes their usage is unavoidable. You can use macro functions in Report Studio to do some manipulations with prompt values before they are used for actual processing in filters, report functions, etc. As a general (and [...]]]></description>
			<content:encoded><![CDATA[<p>This post spent a year in drafts -(  But Macro functions are an interesting feature of Cognos BI and sometimes their usage is unavoidable.</p>
<p>You can use macro functions in Report Studio to do some manipulations with prompt values before they are used for actual processing in filters, report functions, etc.<br />
As a general (and very common) example, you can use macro functions to do datetime format transformations, to allow one various filters to be based on a single prompt (selecting 'Version X, year 2009' in prompt, which you can split up to two filters, for year and version) and do some other string conversion stuff.<br />
Usually such need arises, when you have drill-through reports with different source-target dimension member formats, such as OLAP (Transformer, TM1, Ms AS, Essbase)  -&gt; Relational or vice versa. For example (a very simple and not close to real-life), if you have a detailed transaction-level report based on relational database and a MOLAP-aggregated data on top of it.</p>
<h3>Fictional Example</h3>
<p>If, for example, your date MUNs in OLAP are like '2010-02-10' and relational database expects something like '2010.02.10', you can change string value of prompt by changing filter in detail report from</p>
<pre class="javascript">date = ?date_prompt?</pre>
<p>to</p>
<pre class="javascript">date = #subtitute<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'-'</span>,<span style="color: #3366CC;">'.'</span>,<span style="color: #000066;">prompt</span><span style="color: #66cc66;">&#40;</span>date_prompt,<span style="color: #3366CC;">'string'</span>,<span style="color: #3366CC;">'1'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>#</pre>
<p>prompt macro function returns prompt value and substitute subtitutes strings )</p>
<h3>Real-life example</h3>
<p>One of real-life examples, where I had to use macro functions extensivly was OLAP(Essbase) to Relational drillthrough setup.<br />
When using Essbase it's better to have unique member names for dimension elements since this speeds query time a bit. So usually some unique identifiers are added to common conformed dimensions. On this project we've constructed a cube with financial transactions, with a number of participants for each operation. The same company can be a client in some operation and a supplier in another. So unique postfixes were added to each of dimensions in Essbase cube. Relational model for Oracle, however, had a single "Party" dimension table, which contained all possible participants.<br />
This problem is easily solved with tecnique given above, I've just removed unique identifier.<br />
The other problem in the same case is that Essbase dimensions usually have hierarchies ) Since operation participants can be aggregated by industry or region I can receive industry (or region) label in dimension prompt (building special prompts for each level is just impossible).<br />
So I had to detect the level of member I've received (which was easier by having those unique level identifiers) and then to filter accoding column in relational table. So I can receive values like 'Pharmaceuticals SUPPLIER INDUSTRY' or '10241235 SUPPLIER ID' from Essbase. Creating such a filter turns into filter like:</p>
<pre class="javascript">when <span style="color: #66cc66;">&#40;</span>#sq<span style="color: #66cc66;">&#40;</span>sb<span style="color: #66cc66;">&#40;</span>csv <span style="color: #66cc66;">&#40;</span>grep<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">': SUPPLIER_INDUSTRY'</span>;array<span style="color: #66cc66;">&#40;</span><span style="color: #000066;">prompt</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'SUPPLIER_ID'</span>;<span style="color: #3366CC;">'string'</span>;<span style="color: #3366CC;">'1'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>#,<span style="color: #3366CC;">'[]'</span><span style="color: #66cc66;">&#41;</span> THEN
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span>Relational Souce<span style="color: #66cc66;">&#93;</span>.<span style="color: #66cc66;">&#91;</span>Supplier<span style="color: #66cc66;">&#93;</span>.<span style="color: #66cc66;">&#91;</span>SUPPLIER_INDUSTRY<span style="color: #66cc66;">&#93;</span> = #substitute<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">': SUPPLIER SUPPLIER_INDUSTRY'</span>;<span style="color: #3366CC;">''</span>;prompt<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'SUPPLIER_ID'</span>;<span style="color: #3366CC;">'string'</span>;<span style="color: #3366CC;">'1'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>#<span style="color: #66cc66;">&#41;</span>
when <span style="color: #66cc66;">&#40;</span>#sq<span style="color: #66cc66;">&#40;</span>sb<span style="color: #66cc66;">&#40;</span>csv <span style="color: #66cc66;">&#40;</span>grep<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">': SUPPLIER ID'</span>;array<span style="color: #66cc66;">&#40;</span><span style="color: #000066;">prompt</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'SUPPLIER_ID'</span>;<span style="color: #3366CC;">'string'</span>;<span style="color: #3366CC;">'1'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span># ,<span style="color: #3366CC;">'[]'</span><span style="color: #66cc66;">&#41;</span> THEN
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span>Relational Souce<span style="color: #66cc66;">&#93;</span>.<span style="color: #66cc66;">&#91;</span>Supplier<span style="color: #66cc66;">&#93;</span>.<span style="color: #66cc66;">&#91;</span>ID<span style="color: #66cc66;">&#93;</span>= #substitute<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">': SUPPLIER ID'</span>;<span style="color: #3366CC;">''</span>;prompt<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'SUPPLIER_ID'</span>;<span style="color: #3366CC;">'string'</span>;<span style="color: #3366CC;">'1'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>#<span style="color: #66cc66;">&#41;</span>
<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">1</span>=<span style="color: #CC0000;">1</span><span style="color: #66cc66;">&#41;</span></pre>
<p>This really looks awfull, but it's the only way I could find out to do 'search': that is to form an array from prompt values and do a 'grep' over it and compare it with empty string. But it does the trick nicely.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/macro-functions-and-prompts-in-cognos-bi-reports/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/cognos/macro-functions-and-prompts-in-cognos-bi-reports</feedburner:origLink></item>
		<item>
		<title>BI and CPM Gartner Quadrants ’10 are out</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/SIu7uvm1yho/bi-and-cpm-gartner-quadrants-10-are-out</link>
		<comments>http://ykud.com/blog/bicpm/bi-and-cpm-gartner-quadrants-10-are-out#comments</comments>
		<pubDate>Mon, 08 Feb 2010 11:57:37 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[BI&CPM]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=265</guid>
		<description><![CDATA[Rather interesting: BI CPM The CPM Big Three(aka leaders quadrant) is formed and I think they'll just waltz around the quadrant in next couple of years. PS: Just to notice, they say aggregate awareness for Cognos BI is in beta-testing. Just after I spent so much space promoting database-level aggregate navigation.]]></description>
			<content:encoded><![CDATA[<p>Rather interesting:</p>
<p><a href="http://www.gartner.com/technology/media-products/reprints/oracle/article121/article121.html">BI</a></p>
<p><a href="http://www.gartner.com/technology/media-products/reprints/oracle/article120/article120.html">CPM</a></p>
<p>The CPM Big Three(aka leaders quadrant) is formed and I think they'll just waltz around the quadrant in next couple of years.</p>
<p>PS: Just to notice, they say aggregate awareness for Cognos BI is in beta-testing. Just after I spent so much space<a href="http://ykud.com/blog/cognos/oracle-bi-enterprise-edition-vs-cognos-bi"> promoting database-level aggregate navigation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/bi-and-cpm-gartner-quadrants-10-are-out/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/bicpm/bi-and-cpm-gartner-quadrants-10-are-out</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.341 seconds --><!-- Cached page served by WP-Cache -->
