<?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>Fri, 26 Feb 2010 16:52:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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>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 3 java [...]]]></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>0</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 very [...]]]></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>0</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>
		<item>
		<title>Oracle BI Enterprise Edition vs Cognos BI</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/VLewAtLTKbo/oracle-bi-enterprise-edition-vs-cognos-bi</link>
		<comments>http://ykud.com/blog/cognos/oracle-bi-enterprise-edition-vs-cognos-bi#comments</comments>
		<pubDate>Mon, 01 Feb 2010 13:12:43 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[essbase]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=255</guid>
		<description><![CDATA[Since I've spent some time working with Oracle Business Intelligence last year, I think I'd write a simple comparison list of strengths\weaknesess of OraBI EE vs Cognos (see post on the same topic by  Venkatakrishnan). All of this is imho, of course.
Oracle BI EE Pro's:
1) Aggregate navigation
-- ability to set up aggregate tables in [...]]]></description>
			<content:encoded><![CDATA[<p>Since I've spent some time working with Oracle Business Intelligence last year, I think I'd write a simple comparison list of strengths\weaknesess of OraBI EE vs Cognos (see post on the same topic by  <a href="http://www.rittmanmead.com/2009/12/07/introduction-to-ibm-cognos-8-business-intelligence/">Venkatakrishnan</a>). All of this is imho, of course.</p>
<h2>Oracle BI EE Pro's:</h2>
<h3>1) Aggregate navigation</h3>
<p>-- ability to set up aggregate tables in BI EE itself, which gives it 'aggregate awareness' while generating SQL. So if you have monthly sales aggregate you just set up BI metadata accordingly and all reports will target this table for monthly data.<br />
There's no such feature in Cognos metadata setting.<br />
But using this feature arises some questions:<br />
a) whether aggregate definition should be BI-tool specific. A lot of practioners, including Kimball, insist that aggregate navigator should reside at database level so that every tool querying datawarehouse will benefit from aggregate avalaibility. This seems rather reasonable, since every datawarehouse is usually queried by more than one analytical application (BI, datamining, more BI) so you either direct all applications to BI EE, or agree to performance degradation.<br />
b) aggregate tables desynch. When you just update the base fact table, aggregate tables become "out of synch", providing <strong>incorrect query results</strong> untill they're recalculated. This means that you either can guarantee that nobody will access reports in this period, or you can have incorrect data. Since more&amp;more datawarehouses squezee load windows to reach real-time this problem gains priority.<br />
c) choosing which agregate to use for answering questions. That's what statistics is all about in dbms, knowing number of rows and value distribution (lol). Oracle BI EE has the "table row count" feature (although I haven't seen it affect SQL generation yet, need more examples). But there's no value distribution analysis in there, so it's just one side of the coin (not talking about I\O device speed and other characteristics).</p>
<p>In general, it's recommended to use database-specific aggregate table functionality (Oracle Materialized Views or DB2 MQT) since it solves all the 3 questions given above and usually simplifies ETL process (and sometimes even speeds it up, since databases use their own transaction logs to detect what data has changed and what aggregates should be rebuilt). Too bad indexed views in Ms SQL do not work with aggregate dimensions (there's no way to define dimension hierachies there).</p>
<h3>2) Cache management</h3>
<p>-- OraBI has really profound cache management facility. You can "cache" any database query to OraBI specific storage structure (cache file), wich will allow subsequent queries to the same table\query to run without actual database request being made. This can greatly speed things up. I especially like the Event Polling Table feature: you add a table, which records when dwh table was last updated. OraBI then reads at given intervals and automatically invalidates old cache entries, based on this table records.<br />
Moreover, if you have OraBI cluster this cache can be shared among servers.</p>
<p>There isn't anything even close in Cognos.</p>
<p>Although I greatly like this feature, I just want to warn about overusing it. It's easy to imagine BI developers boosting performance by adding more&amp;more cache untill OraBI becomes a fully blown aggregate system. And sometimes it's just about 1 aggregate table at the dwh level ) Or about introducing OLAP server in the enviroment )))</p>
<h3>3) SQL generation.</h3>
<p>It's tricky subject, but for now I like OraBI generated SQL more. But it's "apples to oranges" for sure, since I usually use DMR's in Cognos which encumbers SQL greatly and there's nothing identical in OraBI EE.</p>
<h2>Oracle BI EE Con's:</h2>
<h3>1) Multidimensionality</h3>
<p>Cognos has Analysis studio and the ability to navigate hierarchies in both directions (you won't believe it, but in OraBI there's no 'Drill-Up', only'Drill-Down'). And DMR's and analytical functions (but their usage is a bit annoying, as it seems now, hope to write about it later). Anyway, Cognos is way much more 'multidimensionally-ready' than OraBI.</p>
<p>OraBI + Essbase is a work in progress and has a huge number of caveats (some fixed by patches, some not, some introduced). And the only way to use all Essbase functionality is to write direct MDX via Evaluate functions. That's a big problem, since it's hard for us to suggest OraBI on top of Essbase for now (till 11g once again). The only alternative is Visual Explorer, which is a very good tool, but it for top-analysts only (thick client, costly).</p>
<h3>2) Metadata model development</h3>
<p>Instead of OraBI's 'only-star schema', '3 layers of model' Cognos FM Manager doesn't impose any design principles, which allows more mistakes, but it makes some things way more simple. One of the first things I wanted to do in OraBI was a report using just a single table.  Well that's a really funny exercise (see <a href="http://www.rittmanmead.com/2009/11/10/oracle-bi-ee-10-1-3-4-1-single-table-repository-design-part-1/">posts</a> over here) if a star schema is a must.</p>
<p>But the main problem is the lack of API for metadata changing and browsing. There's <a href="http://dylanwan.wordpress.com/2007/10/22/udml-in-oracle-bi-server/">udml</a>, but it's not supported officially. Therefore all current integration scripts (like adding users, merging repositories and working with hierarchy depth changes) are out of the law. Which doesn't stop anyone, but is pretty annoying.</p>
<h3>3) Pixel-perfect reports</h3>
<p>Oracle BI Publisher is a specific tool, aimed at generating a huge number of formatted reports, based on XML format definition files. It wasn't a part of Siebel BI, so 'integration stitches' still stand out. It's a nice tool, but it certainly lacks web-interface ) Therefore in Oracle BI there's a deep distinction between a simple formatted report (with lots of possible logic in it) and making this report 'printer-friendly' since for the latter you basically have to start from scratch by opening Ms Word )  This will change in 11g as they say )</p>
<p>Having said all that, I really wait for Oracle BI 11g edition to start using it with Essbase and I kinda like the product as it is for "relational-only" reporting.</p>
<p>I surely wanted to write a simple bullet point list at first )</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/oracle-bi-enterprise-edition-vs-cognos-bi/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/cognos/oracle-bi-enterprise-edition-vs-cognos-bi</feedburner:origLink></item>
		<item>
		<title>Memory leaking in Cognos 8.3 BI</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/sRgiAce-RgY/memory-leaking-in-cognos-8-3-bi</link>
		<comments>http://ykud.com/blog/cognos/memory-leaking-in-cognos-8-3-bi#comments</comments>
		<pubDate>Tue, 20 Oct 2009 08:19:50 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[ibm]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=252</guid>
		<description><![CDATA[You know why i've started this blog in the first place? To get advice, of course. And today DesiCresnet shared a wonderfull piece of information concerning memory troubles in BI 8.3.
Those who aren't struck by occasional CAM-AAA-0071 “An internal error occurred” which stops the whole server can skip this post.
This error was discussed at:
http://www.ibm.com/developerworks/forums/thread.jspa?threadID=244357
http://www.cognoise.com/community/index.php?topic=4971.0
The story [...]]]></description>
			<content:encoded><![CDATA[<p>You know why i've started this blog in the first place? To get advice, of course. And today DesiCresnet shared a <a href="http://ykud.com/blog/cognos/memory-leaking-in-contributor/comment-page-1#comment-20448">wonderfull piece of information</a> concerning memory troubles in BI 8.3.</p>
<p>Those who aren't struck by occasional CAM-AAA-0071 “An internal error occurred” which stops the whole server can skip this post.<br />
This error was discussed at:</p>
<p>http://www.ibm.com/developerworks/forums/thread.jspa?threadID=244357</p>
<p>http://www.cognoise.com/community/index.php?topic=4971.0</p>
<p>The story goes like this:<br />
- java.exe (that powers BI), grows up to the point where it cannot obtain contigious memory from server and crashes<br />
- Cognos BI doesn't recognize this error, so it throws out a general CAM-AAA-0071<br />
- Cognos BI is unaccessible until restart</p>
<p>This error occurs more often in heavy-usage enviroments. In one of our projects, with lots of Event triggered admin-links and reports, it took only a coulple of hours before it striked.</p>
<p>Solution is not complete, but as I see it now:<br />
1) Put the latest SP on BI (or a special hotfix, if one is avalaible)<br />
2) Lower the avalaible memory for Cognos BI service (to 768 mbs)<br />
3) Modify the <a href="http://support.microsoft.com/kb/315407">HeapDecommitFreeBlockThreshold</a> registry property</p>
<p>It's interesting if 8.4 is prone to such error.</p>
<p>PS: I'm a certified <a href="http://ykud.com/blog/about_me">Cognos Technical Specialist</a> now, as well. Need to get first-line support partnership, you know )</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/memory-leaking-in-cognos-8-3-bi/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/cognos/memory-leaking-in-cognos-8-3-bi</feedburner:origLink></item>
		<item>
		<title>Cognos 8 EP troubleshooting import data from package</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/XiIVdCBL4g4/cognos-8-ep-troubleshooting-import-data-from-package</link>
		<comments>http://ykud.com/blog/cognos/cognos-8-ep-troubleshooting-import-data-from-package#comments</comments>
		<pubDate>Thu, 06 Aug 2009 12:09:19 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=248</guid>
		<description><![CDATA[Tip of the day: Having common metadata layer for BI and Enterprise Planning is really cool, especially with the ability to load data from BI packages to EP via links. Just that it sometimes doesn't work. But there are always some workarounds.
With mostly very cryptical error messages or without any.
One of the problems might be [...]]]></description>
			<content:encoded><![CDATA[<p>Tip of the day: Having common metadata layer for BI and Enterprise Planning is really cool, especially with the ability to load data from BI packages to EP via links. Just that it sometimes doesn't work. But there are always some workarounds.</p>
<p>With mostly very cryptical error messages or without any.<br />
One of the problems might be just that DataManager service (which does the transfer) cannot allocate enough memory for operation. This is what we've encountered just today. </p>
<p>Good news are that this parameter is easily configurable, you can just edit cognos_install_path\bin\dataimportserviceconfig.xml file and set JMX (Java maximum allocated memory) to something more appropriate than default 128M (1024 is a nice number, for example).</p>
<p>Try this if your links fail <img src='http://ykud.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>PS: In this 'wonderfull' Java world, setting JVMX is a common boost-up technique. And there's a lot of places to apply it. Think about Cognos Rich Client Platform (Cognos 8.4 Contributor) for start...</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-8-ep-troubleshooting-import-data-from-package/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/cognos/cognos-8-ep-troubleshooting-import-data-from-package</feedburner:origLink></item>
		<item>
		<title>Cognos 8 BI Tuning Hard Drive Usage</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/FnlD4w0uNCA/cognos-8-bi-tuning-hard-drive-usage</link>
		<comments>http://ykud.com/blog/cognos/cognos-8-bi-tuning-hard-drive-usage#comments</comments>
		<pubDate>Wed, 05 Aug 2009 10:03:17 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=230</guid>
		<description><![CDATA[Just a quick hint and a reminder: there is a configuration option forcing Cognos to store temporary report results in memory rather than dropping them on disk. It's especially usefull for DMR's they are frequently cached on disk.
Quote from Architecture and Deployment Guide.
Depending on the size of reports and the amount of available memory, IBM [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick hint and a reminder: there is a configuration option forcing Cognos to store temporary report results in memory rather than dropping them on disk. It's especially usefull for DMR's they are frequently cached on disk.</p>
<p>Quote from Architecture and Deployment Guide.</p>
<p><q>Depending on the size of reports and the amount of available memory, IBM Cognos 8 may access a physical disk when processing reports. To improve performance, you can ensure that report processing uses available memory rather than disk space. Using memory instead of disk space is particularly beneficial in cases where temporary files are<br />
created on IBM Cognos 8 servers, causing information transfer from memory to disk. You can monitor the occurrence of temporary files using the c8_location\temp directory.Monitor this folder during report processing periods to determine whether temporary files are created as cclvpage*.tmp. To ensure that IBM Cognos 8 uses memory instead of disk space, in the rsvpproperties.xml file, edit the VirtualMemoryDiagnostics property to use unlimited memory (value = 2) rather than limited  memory (value = 0):<br />
&lt;property&gt;VirtualMemoryDiagnostics&lt;/property&gt;<br />
&lt;value type="long"&gt;2&lt;/value&gt;<br />
Note: Remove the comment to enable the VirtualMemoryDiagnostics property.<br />
For information about using the rsvpproperties.xml file, see "Advanced Report Processing Configuration Settings" (p. 96).</q></p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-8-bi-tuning-hard-drive-usage/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/cognos/cognos-8-bi-tuning-hard-drive-usage</feedburner:origLink></item>
		<item>
		<title>TM1 + Enterprise Planning, When, Why and How?</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/e08H2bRKtPs/tm1-enterprise-planning-when-why-and-how</link>
		<comments>http://ykud.com/blog/cognos/tm1-enterprise-planning-when-why-and-how#comments</comments>
		<pubDate>Thu, 14 May 2009 07:33:40 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[contributor-only]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[tm1]]></category>
		<category><![CDATA[contributor]]></category>
		<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=209</guid>
		<description><![CDATA[This post will be some extracts from a recent PoC, where we made a complex planning system including a rich scenario modeling part. So it was our first big TM1 + EP integration experience.
Some basic definitions:
Cognos Enterprise Planning (aka Adaytum EP) is a very scalable system, all computing is client-side, nice workflow organization, nice GUI [...]]]></description>
			<content:encoded><![CDATA[<p>This post will be some extracts from a recent PoC, where we made a complex planning system including a rich scenario modeling part. So it was our first big TM1 + EP integration experience.</p>
<p><strong>Some basic definitions:</strong><br />
Cognos <strong>Enterprise Planning</strong> (aka Adaytum EP) is a very scalable system, all computing is client-side, nice workflow organization, nice GUI (version 8.4 Eclipse one especially) with huge limitations when it comes to the moment of “show me the whole budget in one place” or to serious what-if modeling. But scaling is trivial, each server acts as many clients simultaneously (number of cores\CPUs) and adding more servers scales the system linearly. So to build really scalable systems, we made Contributor only working places, with all analysis done  in Cognos 8 BI and Analyst was turned into a modeling tool. In adaytum and cognos 7 times a lot of things(consolidating, what-if) could be done (and to be honest, still can be) in Analyst, but just up the point you reached 40mln cells cube limit in Analyst, then you started dividing cubes and the system became nightmare. Transforming the same consolidation task into series of Contributor applications connected by admin links gave huge performance enhancements, but the "show me the whole budget" limitation was a major problem.<br />
Cognos <strong>TM1</strong> (aka Applix TM1) is an in-memory OLAP engine, ultra-speed calculations, server side computing, excel based gui (with web publication), limited workflow capabilities (compared with current EP), scalability limitations (imagine putting servers across whole Russia to ensure response time)</p>
<p>So when it comes to a planning system with large user base – it’s EP, but if some serious modeling and calculations are requied as well – it’s time to fire up TM1 as well.</p>
<p style="text-align: center;">Overall interaction scheme seems pretty simple:<br />
<img class="size-full wp-image-211 aligncenter" title="tm1ep" src="http://ykud.com/blog/wp-content/uploads/2009/05/tm1ep.jpg" alt="tm1ep" width="525" height="263" /></p>
<p>1)	Most of users work in EP inputting budgets, submitting and doing all other workflow related activities<br />
2)	After some user actions (saving budget, submitting, accepting it) data is transferred into TM1.<br />
a.	Detecting the desired action is easy – we’ve got Event Studio for that (see here and here).<br />
b.	Incremental publish is fired and changed elist is republished – that’s pretty fast<br />
c.	Then there’s a problem to extract only changed data from publication. That’s the same as with incremental admin links, you just write a simple database procedure that logs last data transfer time and create views showing only recent data (as usual, you want code samples – drop a line)<br />
d.	Changed data is bcp’ed\sqlloaded to TM1 server<br />
e.	TM1 TurboIntegrator process is fired, loading the extracted data into TM1<br />
3)	  Analysts work with “live” data in TM1, doing what-if analysis (they dynamically add scenario versions for this purpose), having access to all enterprise budget and actual data.<br />
4) Then  a version could be used for top-down propagation and exported into EP (that’s pretty simple, just some writing into EP applications import tables)</p>
<p>The whole system seems pretty healthy, data transfers happens with 1-2 minutes latency (we used Save as trigger action). Doing any kind what-if analysis on a budget version only 2 minutes "stale" with ultra-speed seems very impressive to me. For instance, in that particular PoC the goal was to speed up overall company budget consolidation, including complex allocation and elimination rules. It took over 8 hours in their current system. And only 4 minutes in Tm1 -- imagine all the benefits you can get from that kind of speed.</p>
<p>Since there are more and more rumours about coming TM1+EP bundle, I just hope that step 2 will be more automated. For example, they can track delta xml's sent by contributor client, containing all data updates, instead of publishing and bcping. But I can see no way they can get rid of neccesity of creating 2 models, one in Analyst for Contributor applications and another in TM1. Although dlists\dimensions can be synchronized, calculations are utterly different (you can target specific cube cell in TM1 formula and only the cube slice in EP).</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/tm1-enterprise-planning-when-why-and-how/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/cognos/tm1-enterprise-planning-when-why-and-how</feedburner:origLink></item>
		<item>
		<title>Essbase ASO key structure</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/Byk_xXIHLGk/essbase-aso-key-structure</link>
		<comments>http://ykud.com/blog/hyperion_essbase/essbase-aso-key-structure#comments</comments>
		<pubDate>Fri, 17 Apr 2009 06:35:26 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[essbase]]></category>
		<category><![CDATA[aso]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=203</guid>
		<description><![CDATA[Yet another post on Essbase )
Internal ASO storage structure is a block box, so unlike BSO. So while Roske haven't writen a book on ASO option, we have to wonder in the dark. 
The main description of ASO storage is "data is stored as key\value pairs". This quote comes from ASO Tuning WhitePaper, the only "internals" [...]]]></description>
			<content:encoded><![CDATA[<p>Yet another post on Essbase )<br />
Internal ASO storage structure is a block box, so unlike BSO. So while <a href="http://looksmarter.blogspot.com/">Roske</a> haven't writen a book on ASO option, we have to wonder in the dark. </p>
<p>The main description of ASO storage is "data is stored as key\value pairs". This quote comes from <a href="www.oracle.com/technology/products/bi/epm/pdf/4822_Tuning_Essbase_ASO_WP.pdf">ASO Tuning WhitePaper</a>, the only "internals" technical description of ASO out there. It's for 7, but all the concepts are still valid.</p>
<p>So, "key-value pairs" it is. Key length is very important then, because it directly affects:</p>
<p>a) size of the database, if you've got a billion rows cube, then -1 byte for every cell means 1 Gb less overall cube size (that's raw size, it'll be compressed later). <br />
b) query processing -- for every query cell key got to be calculated for data retrieval. Less key, faster the query, as I think.</p>
<p>You can see the key description on Application Properties page or issuing "query database test.db list aggregate_storage runtime_info;"  MaxL command .<br />
Here's the sample output. <br />
<code><br />
parameter                                         value                                            <br />
+-------------------------------------------------+-------------------------------------------------<br />
 Dimension [Date] has [3] levels, bits used                                                        1<br />
 Max. key length (bits)                                                                            1<br />
 Max. key length (bytes)                                                                           8<br />
</code></p>
<p>we see following characteristics of dimension -- number of levels and number of bits used to encode values in this dimension. Cell key is concantenation of each dimension keys. </p>
<p>But that number of bits is pretty cryptic, though. On a project we're doing we have a couple of 5 mln elements dimensions and key length for them is around 40 bits. If you use simple binary encoding -- you can encode 2^40 elements (that's really a huge number, it contains 14 digits). It's no a simple binary encoding then. </p>
<p>So how are dimension elements encoded? </p>
<p>Well, it's allways easy afterwards, so I'm not so proud now, as I was when it first struck me )</p>
<p>So I now think that the technique called hierarchial encoding (or indexing) or something similar is used, so each dimension element is encoded the following way:</p>
<p>Let's assume that we have 3 levels in dimension, then the key will be formed like:<br />
xxxyyzzzz<br />
where xs -- are the bits requiered to binary encode level 2 parent<br />
ys -- level 1 parent<br />
zs -- the bottom level element</p>
<p>So to form the key length for all dimension you have to concantenate binary keys required to encode elements on every level. </p>
<p>Therefore there are a few things to keep in mind while doing big-scale ASO projects:<br />
- think about number of levels in big dimensions, keeping them short greatly decreases size<br />
- try to keep number of elements even on every level -- that's funny, but it'll help to fully "pack the key" </p>
<p>But that brings up a few more things about ASO i'm thinking of:<br />
- how are pages in tablespace filled for data storage? I think some sort of hierarchial clustering, using key parts to point at pages<br />
- what and how is stored in the outline (otl file)? Membernames and aliases for sure, but also the dimension elements keys, which are concantenated to get cell key and find the data page in tablespace.</p>
<p> <br />
So I'm still waiting for Edward to publish ASO book, there's a lot of questions. <a href="http://looksmarter.blogspot.com/2009/04/edward-roske-is-personally-teaching.html#links">The book seems to be close</a> )</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/hyperion_essbase/essbase-aso-key-structure/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/hyperion_essbase/essbase-aso-key-structure</feedburner:origLink></item>
		<item>
		<title>Loading data into ASO cube</title>
		<link>http://feedproxy.google.com/~r/AppliedDimensionality/~3/ahTiZZZv6DI/loading-data-into-aso-cube</link>
		<comments>http://ykud.com/blog/hyperion_essbase/loading-data-into-aso-cube#comments</comments>
		<pubDate>Thu, 02 Apr 2009 16:19:15 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[essbase]]></category>
		<category><![CDATA[aso]]></category>
		<category><![CDATA[outline]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=192</guid>
		<description><![CDATA[Hm, I guess it's the time for a first big essbase-related post. Today we'll talk about data loading in ASO cube.
Those who've listened to our recent Oracle events presentations (russian TechForum 2008, BI Forum 2009), know that we've made a nice PoC project with SportMaster, consisting of loading their year's worth of daily stock and [...]]]></description>
			<content:encoded><![CDATA[<p>Hm, I guess it's the time for a first big essbase-related post. Today we'll talk about data loading in ASO cube.</p>
<p>Those who've listened to our recent Oracle events presentations (russian TechForum 2008, BI Forum 2009), know that we've made a nice PoC project with SportMaster, consisting of loading their year's worth of daily stock and sales data (around billion fact cells with over a million elements in products dimension).  All in all, I've decided to post a write-up about how to achieve acceptable load speed on such volumes and tell a scary-story, with a detective twist and a happy ending.</p>
<p>I won't go in much detail on basics, so:</p>
<p>Since it's a billion cells cube, it's ASO storage option.</p>
<p>Since it's an ASO Cube, we use load buffers for data loading.</p>
<p>Since we use load buffers, we try to split input data into chunks, to maximize data read speed.</p>
<p>Since we use load buffers and we were doing PoC on 9.3.1, we have to extract data from DWH to text files (in 11 we could use ODBC based load buffers).</p>
<p>Just a remark: Essbase Integration Services does a lousy job on either building dimensions (we're adding 14 attributes for products and loading a file again for _every_ attribute is a disaster) or loading data (no visible ability to run multiple buffer load). No comments on 11 Essbase Studio, haven't tried it.</p>
<p>So, we've extracted data from DWH to text files and are loading these files into text buffers. While loading data from file into buffer, with a simple rule file I could achive data read speed of around 6 Mb\s (on a 80 Mb\s disk system, we've got two such disk systems attached on PoC server). Loading two files in parallel, gave 12 Mb\s. So to fully load up disk system we need to chunk files into 6 parts. That actually doesn't present a problem, but seems a bit awkward. While testing, I've accidentially forgot "using server rules_file" in MaxL script and was astonished by load speed of 25-40 Mb\s! That's how I've found out about 'free-form data load' )</p>
<p>Essbase has a built in ability to load data without rule file (<a href="http://download.oracle.com/docs/cd/E10530_01/doc/epm.931/html_esb_dbag/frameset.htm?pt03.htm">see DBAG</a>). And, moreover, this is almost 10 times faster than loading with rule file. Easiest way to find more about free-form load is to export an ASO cube to text file (right-click on database in Essbase Administration console). Moreover, free-form allows to load data in cross-tab (pivot accounts in columns), therefore greatly suppressing number of rows. Using this technique requires additional data formating: spaces as separator, double quotes enclosure, writing "Missing" or "MI" for null values. But load speed is worth it )</p>
<p>So the bottom line: free-form data load, additional data massage -- 70 Gbs of data in less than 30 minutes, almost reaching half of disk system speed.</p>
<p>That's it for fast data loading, if you're on 9.3.1 i'd recommend trying to massage data into free-form and load it this way.</p>
<p>Now for detective part of the story.<span id="more-192"></span></p>
<p>So we've reached ultra-high loading speed and loaded over-half a billion rows in less than half an hour (+ another 40 minutes for aggregation, to be sincere). And then left it out for a couple of months. Fast forward some server migration, another PoC and all. Then once we've need those PoC results once more -- they dissapeared. But that's not a mystery, this usually happens on dev servers. Backups were gone as well, but that's common for dev as well.</p>
<p>But then I've tried to reload data -- it just didn't. Said -- 'unknown member' on a member that was in outline and stopped loading. Okay, let's try to focus on finding error rows. So it's chunking the 25 g file into smaller ones and trying again. 1mln rows -- doesn't work. 100k rows -- no go. 10k -- no go. 1k -- no go. 500 -- YEP. Excellent, so it's about those other 500 rows. Adding another 100 -- NO. 50 -- YEP. 75 -- YEP. 100 -- NO. 90 -- NO. Hm, strange. Another 10 rows -- YEP.  What? I've already loaded 100 and got NO. 100 again -- NO. Again -- YEP. That's when I blew my head off. I've got a data sample that I could load successfully one time out of 4. That's crazy.</p>
<p>Rule file load worked. But ten times as slow.</p>
<p>I'll add some white-lines for those with essbase experience to think about why this error could happen ) Loading the same chunk of data either gives 'unknown member' error or loads successfully.</p>
<p>Looking back it simple ) -- this depends on whether Essbase can find selected member name in outline cache or no. By default all member names are preloaded into memory on application start, but there's an essbase.cfg setting PRELOADMEMBERNAMESPACE which allows to turn off this loading (which was done by someone between PoCs), If preloading is turned off member names are loaded the same way as the whole outline -- by chunks of OUTLINECACHESIZE kbs (by the way, if somebody read to this part -- there's a free beer for you). Off: Anybody knows why outline paging cache size setting officially dissapeared from documentation after 9.2.1??. And free-form loading is so fast, that outline cannot be loaded on same speed to get member names (they can be in different parts of otl file), so it eventually fails with 'unknown member'. Some sequential tries, however, lead to exactly needed piece of otl lying there in outlinecache, so the whole file loads successfully.</p>
<p>The answer was to turn member names prealoading back on -- it started to work again. But tracking the error was really messy.</p>
<p>Lessons learned: Allways check essbase.cfg. And backup everything )</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/hyperion_essbase/loading-data-into-aso-cube/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ykud.com/blog/hyperion_essbase/loading-data-into-aso-cube</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.355 seconds -->
