<?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>Thu, 02 Sep 2010 14:14:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</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>Configuring Ms SQL databases for Cognos Enterprise Planning</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/0yGF_VChUAQ/configuring-ms-sql-databases-for-cognos-enterprise-planning</link>
		<comments>http://ykud.com/blog/ep/configuring-ms-sql-databases-for-cognos-enterprise-planning#comments</comments>
		<pubDate>Thu, 02 Sep 2010 14:14:12 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=389</guid>
		<description><![CDATA[Just a quick side note -- I usually use simple recovery mode in Ms SQL installations because: application databases become inconsistent during administration tasks so having a backup of database in a middle of GTP crash doesn't give you anything, you'll have to roll back to GTP start time. So backing up before and after [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick side note -- I usually use simple recovery mode in Ms SQL installations because:</p>
<ul>
<li>application databases become inconsistent during administration tasks so having a backup of database in a middle of GTP crash doesn't give you anything, you'll have to roll back to GTP start time. So backing up before and after administrative task is better.</li>
<li>publish databases are created via bulk load, which gets rather slow with full logging as log files grow very fast.</li>
</ul>
<p>In ideal situations, application databases should be in Full Recovery Mode not to lose contributor input and publish databases should be in Simple Recovery mode. But in most cases Simple Recovery Mode and daily backups suffice.</p>
<p>Because otherwise -- and it's oh so common situations -- I arrive at the sites with planning databases occupying hundreds of Gb (no, really, I've seen another such case just yesterday).</p>
<p>Here's a simple script that turns all planning databases (selected by cognos_ep prefix) into Simple Recovery Mode and then shrinks them.</p>
<pre class="tsql">&nbsp;
<span style="color: #0000FF;">USE</span> master;
&nbsp;
<span style="color: #0000FF;">DECLARE</span>
    DBNames <span style="color: #0000FF;">CURSOR</span>
<span style="color: #0000FF;">FOR</span>
    <span style="color: #0000FF;">SELECT</span>
	  NAME
    <span style="color: #0000FF;">FROM</span> sysdatabases
<span style="color: #0000FF;">WHERE</span> name like <span style="color: #FF0000;">'cognos_ep%'</span>
&nbsp;
<span style="color: #0000FF;">OPEN</span> DBNames
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Name <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">50</span><span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">FETCH</span> <span style="color: #0000FF;">NEXT</span> <span style="color: #0000FF;">FROM</span> DBNames
<span style="color: #0000FF;">INTO</span> @Name
&nbsp;
<span style="color: #0000FF;">WHILE</span> <span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">@@FETCH_STATUS</span> &lt;&gt; <span style="color: #000;">-1</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">BEGIN</span>
	<span style="color: #0000FF;">PRINT</span> @Name
	<span style="color: #0000FF;">EXEC</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'ALTER DATABASE '</span>+ @Name + <span style="color: #FF0000;">' SET AUTO_SHRINK ON WITH NO_WAIT'</span><span style="color: #808080;">&#41;</span>
&nbsp;
	<span style="color: #0000FF;">EXEC</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'ALTER DATABASE '</span> +  @Name + <span style="color: #FF0000;">' SET RECOVERY SIMPLE WITH NO_WAIT'</span><span style="color: #808080;">&#41;</span>
	<span style="color: #0000FF;">EXEC</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'ALTER DATABASE '</span> + @Name + <span style="color: #FF0000;">' SET AUTO_SHRINK ON'</span><span style="color: #808080;">&#41;</span>
	<span style="color: #0000FF;">EXEC</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'ALTER DATABASE '</span> + @Name +<span style="color: #FF0000;">' SET RECOVERY SIMPLE'</span><span style="color: #808080;">&#41;</span> 
&nbsp;
    <span style="color: #0000FF;">DBCC</span> SHRINKDATABASE<span style="color: #808080;">&#40;</span> @Name , <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
&nbsp;
    <span style="color: #0000FF;">FETCH</span> <span style="color: #0000FF;">NEXT</span> <span style="color: #0000FF;">FROM</span> DBNames
    <span style="color: #0000FF;">INTO</span> @Name
&nbsp;
<span style="color: #0000FF;">END</span>
&nbsp;
<span style="color: #0000FF;">CLOSE</span> DBNames
<span style="color: #0000FF;">DEALLOCATE</span> DBNames
&nbsp;</pre>
<p><strong>And a bottom line: Worry about backups! Hire a DBA (setting up backups is a one day job -- pay part-time)</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/ep/configuring-ms-sql-databases-for-cognos-enterprise-planning/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/ep/configuring-ms-sql-databases-for-cognos-enterprise-planning</feedburner:origLink></item>
		<item>
		<title>Pivot Tables and temp files in Oracle BI EE</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/rSltBLiNUuM/pivot-tables-and-temp-files-in-oracle-bi-ee</link>
		<comments>http://ykud.com/blog/bicpm/oracle/pivot-tables-and-temp-files-in-oracle-bi-ee#comments</comments>
		<pubDate>Fri, 27 Aug 2010 13:32:39 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=382</guid>
		<description><![CDATA[Pivot tables Pivot tables are by far most used data view in Oracle BI Answers, since they provide 'multidimensional' analysis capabilities, aka dimension drag&#38;drop, filtering and some basic calculations. From server-side view -- this component provides worst performance, since all future 'cube' data has to loaded into BI server, aggregations and formulas calculated and transformed [...]]]></description>
			<content:encoded><![CDATA[<h2>Pivot tables</h2>
<p>Pivot tables are by far most used data view in Oracle BI Answers, since they provide 'multidimensional' analysis capabilities, aka dimension drag&amp;drop, filtering and some basic calculations.</p>
<div>From server-side view -- this component provides worst performance, since all future 'cube' data has to loaded into BI server, aggregations and formulas calculated and transformed to internal format.</div>
<div>So what happens when user clicks a pivot for 200,000 cells cube?</div>
<div>1) SQL-query is fired into database</div>
<div>2) All resulting rows are loaded into temporary directory of BI server</div>
<div>3) If there are calculations to be performed -- initial temp file is read, calculated and new temp written out</div>
<div></div>
<div>There are two important <a href="http://download.oracle.com/docs/cd/E12096_01/books/AnyInConfig/AnyInConfigSAS13.html">instanceconfig.xml</a> parameters for Pivot tables:</div>
<blockquote>
<div>- CubeMaxPopulatedCells -- The maximum number of populated cells in the Pivot Table. If this maximum is exceeded, the user receives an error when rendering the pivot table.</div>
</blockquote>
<div>and</div>
<blockquote>
<div>- CubeMaxRecords  -- The maximum number of records returned by a query for the Pivot Table engine to process. This roughly governs the maximum number of cells that can be populated in a pivot table (unpopulated cells in a sparse pivot table do not count). If this maximum is exceeded, the user receives an error when rendering the pivot table.</div>
<div></div>
</blockquote>
<div>All instanceconfig.xml options can be <a href="http://oraclebizint.files.wordpress.com/2007/11/ultimate-analytics-resource-saw-instanceconfig-setting.doc">found here</a>.</div>
<h2>Temp files.</h2>
<div>Temp files can be rather huge, I'm currently seeing files about 1gb size for medium sized reports. That, surely, because we're using MS SQL server and BI Server cannot "push" some calculations in database, but it's nice to keep in mind the fact that temp files can occupy some 20-30 Gb.</div>
<div>Temp files are cleaned out when session logs out, so some of them stay there for whole day.</div>
<div>Location of temporary files is set up by WORK_DIRECTORY_PATHS variable in NQSConfig.ini and by SATEMP enviroment variable. See <a href="http://oraclebi.blog.com/tip-of-the-day-changing-the-path-of-temp-directory-and-cache-storage">this post</a> for instructions on how to move tmp folder.</div>
<h2>Speeding things up.</h2>
<div>Rather huge files are written to temporary directory, so the IO performance becomes an obvious bottleneck for process.</div>
<div>What can be done:</div>
<div>1) Use multiple tmp\ directories on different disks to balance the load</div>
<div>2) Use <a href="http://en.wikipedia.org/wiki/RAM_disk">Ramdisks</a> for tmp\ -- I've tried this way and got a some fantastic <strong><span style="color: #ff0000;">5x speedup</span></strong> on most IO bound reports. But it's pretty hard to find free 30 Gb of RAM, so we're using multiple disks for now</div>
<div>3) Use <a href="http://en.wikipedia.org/wiki/Solid-state_drive">SSD </a>for tmp -- that's what I plan to try next. I bought an SSD for my laptop about a year ago and my life has never been the same, so stay tuned )</div>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/oracle/pivot-tables-and-temp-files-in-oracle-bi-ee/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/bicpm/oracle/pivot-tables-and-temp-files-in-oracle-bi-ee</feedburner:origLink></item>
		<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>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.390 seconds -->
