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

<channel>
	<title>Applied dimensionality &#187; contributor-only</title>
	<atom:link href="http://ykud.com/blog/category/cognos/ep-cookbook/contributor-only/feed" rel="self" type="application/rss+xml" />
	<link>http://ykud.com/blog</link>
	<description></description>
	<lastBuildDate>Sat, 28 Jan 2012 12:01:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>TM1 + Enterprise Planning, When, Why and How?</title>
		<link>http://ykud.com/blog/cognos/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, [...]]]></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 &#8220;show me the whole budget&#8221; 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 &#8220;stale&#8221; 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 &#8212; 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&#8217;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>10</slash:comments>
		</item>
		<item>
		<title>Contributor transactional logic example</title>
		<link>http://ykud.com/blog/cognos/contributor-transactional-logic-example</link>
		<comments>http://ykud.com/blog/cognos/contributor-transactional-logic-example#comments</comments>
		<pubDate>Tue, 29 Apr 2008 16:15:04 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[contributor-only]]></category>
		<category><![CDATA[ep cookbook]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=215</guid>
		<description><![CDATA[Finally, we&#8217;ve solved problem stated in communities. And Robert allowed me to publish resulting library here as well. See attached zip file. Problem statement We have 2 cubes, one containing product groups sales (for example) and the other containing detailed product data. Users should be able to correct overall group totals and correct detailed product [...]]]></description>
			<content:encoded><![CDATA[<p>Finally, we&#8217;ve solved problem <a href="http://communities.cognos.com/home/message/4643#4643">stated in communities</a>. And Robert allowed me to publish resulting library here as well. See <a href="http://ykud.webfactional.com/blog/wp-content/uploads/2008/04/transactionallogic.zip">attached zip file</a>.</p>
<h3>Problem statement</h3>
<p>We have 2 cubes, one containing product groups sales (for example) and the other containing detailed product data. Users should be able to correct overall group totals and correct detailed product distribution.<br />
If group A contains Product 1 and Product 2 and if Total(A) is 100, it&#8217;s initially split 50\50.<br />
User should be able to modify Product 1 to 75, yielding result of 75\25.<br />
Normal break back won&#8217;t work this way, because it&#8217;ll see 75\50 as profile for break back and will produce 60\40 as a result.</p>
<p>So you&#8217;d need to create an own break back. That&#8217;s easy )<br />
<span id="more-134"></span></p>
<h3>Verbal Description of the algorithm</h3>
<p>It&#8217;s a copy-paste from communities topic, don&#8217;t bother re-reading.</p>
<p>1 For example we have a 2 dim cube<br />
Total 100<br />
A 70<br />
B 30</p>
<p>I want A to become 800</p>
<p>2 Calculate the amount I need to break-back everywhere else to get total of x + 800 = 100<br />
x = 100 &#8211; 800 = -700</p>
<p>3 Copy all other initial numbers, except A (set A=0) &#8212; that&#8217;s potential trouble, you&#8217;ll have to insure no-zero data input<br />
Total 70<br />
A 0<br />
B 70</p>
<p>4 Break-back -700 across it<br />
Total -700<br />
A 0<br />
B -700</p>
<p>5 Sum it up with A amount of 800<br />
Total 100<br />
A 800<br />
B -700</p>
<h3>Implementation</h3>
<p>A working Analyst library is <a href="http://ykud.com/blog/wp-content/uploads/2008/04/transactionallogic.zip">attached</a> so I just want to stress some details<br />
1 inputValue and value as subtotal. That&#8217;s the only way to allow input into break-backed cell.<br />
2 transactional logic is implemented in very same way <a href="http://ykud.com/blog/?p=212">I described it</a>.<br />
3 no manual items allocation in dlinks on dimensions other that transactionalLogic_1, only match descriptions and self-updating allocation table. This allows easy updates.<br />
4 3 elements are redundant in attached library (see comments). They are left for clarity of implementation.<br />
5 dlists are named according to my own convention, I&#8217;ll write about it a bit later</p>
<p>Thanks Robert, it was an interesting task.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/contributor-transactional-logic-example/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Incremental Administration Links</title>
		<link>http://ykud.com/blog/ep/incremental-administration-links</link>
		<comments>http://ykud.com/blog/ep/incremental-administration-links#comments</comments>
		<pubDate>Mon, 11 Feb 2008 13:42:39 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[contributor-only]]></category>
		<category><![CDATA[ep]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[contributor]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=206</guid>
		<description><![CDATA[In 8.2 we&#8217;ve got incremental publishing, allowing us to create real-time reporting on contributor data and that sets up new frontier in model data transfer speed. Now the slowest part of models are administration links (who&#8217;d guessed that when 7.3 appeared). Here are some ideas of how to speed admin links up, using the same [...]]]></description>
			<content:encoded><![CDATA[<p>In 8.2 we&#8217;ve got incremental publishing, allowing us to create <a href="http://ykud.com/blog/?p=186">real-time reporting on contributor</a> data and that sets up new frontier in model data transfer speed. Now the slowest part of models are administration links (who&#8217;d guessed that when 7.3 appeared).</p>
<p>Here are some ideas of how to speed admin links up, using the same principle as in incremental publish: <strong>transfer only changed data</strong>. So when only 2 CFO&#8217;s submitted data, all 200 don&#8217;t have to be moved and recalculated once again.<br />
<span id="more-123"></span><br />
Let&#8217;s look at the scheme of incremental publish:<br />
- every time inc publish is run, a timestamp is set to point the run time<br />
- during run inc publish selects only elists with change date more than inc timestamp, this meaning that these elists data was changed since last inc publish</p>
<p>So we need 2 tools:<br />
- One to set &#038; store &#038; query the run time. Let&#8217;s call it &#8220;Egg-Clock&#8221;<br />
- Other to run the task selecting only limited number of elists. Lets call it &#8220;Select Elists, Run Job&#8221; or &#8220;SERJ&#8221; )</p>
<p>Egg-Clock is pretty simple in all cases, you just record the timestamp somewhere (text file, table etc) and return it back.<br />
SERJ was almost simple for publish &#8212; you&#8217;ve had to recreate publish macro, specifying needed elist guids.</p>
<p>How can we do this with administration links? I&#8217;m pretty sure some people in Cognos are writing built-in utility for inc admin links right now, but sometimes you have to get things done without waiting for another major release.</p>
<p><strong>1 Use query subjects and package import</strong><br />
How to:<br />
* You set up incremental publish on application to make it&#8217;s data always ready for transfer.<br />
* Create a query subject on that published data that you need to transfer<br />
* Set up a filter on that query subject using Egg Clock to select only elists that have changed since last incremental admin link run time<br />
* Create an administration link from filtered query subject to your target application.<br />
* Create a macro that will run this link and update Egg Clock and there you go. You can add an incremental publish in this macro to make it completely independent</p>
<p>It&#8217;s a rather straight-forward solution and quite easy to set up.</p>
<p><strong>2 Use duplicate applications and No Data Settings</strong><br />
We&#8217;ll try to use following rule: when administration links are run No-Data items are not transfered. It&#8217;s rather cumbersome solution, but maybe someone will like it )</p>
<p>* Create a copy of your source application (yep, the same application, just another copy)<br />
* Add an imported access table in that application, opening selected elists on read or write. Set default level to No-Data. It should apply to all cubes in application, delete other ATs if necessary.<br />
* Use Egg Clock to generate this access table, select only elists changed since last run time.<br />
* Create link, copying your source application to this duplicated application.<br />
* Create all your desired links from duplicated application rather than from source one.<br />
And in macro do following:<br />
1 Create access table based on Egg Clock &#8212; only  changed elists<br />
2 Import this AT into duplicate application<br />
3 GTP duplicate &#8212; this will cut-down all other elists, except changed ones<br />
4 Run links from source to duplicate &#8212; since No-Data is applied only changed will transfer<br />
5 Run links from duplicate to target &#8212; again only No-Data elements</p>
<p><strong>3 Try to modify .cal export files and import them back</strong><br />
Just to mention &#8212; don&#8217;t do it.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/ep/incremental-administration-links/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Incremental Publish in EP</title>
		<link>http://ykud.com/blog/cognos/incremental-publish-in-ep</link>
		<comments>http://ykud.com/blog/cognos/incremental-publish-in-ep#comments</comments>
		<pubDate>Sat, 15 Dec 2007 19:24:10 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[contributor-only]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=196</guid>
		<description><![CDATA[Just found an excellent option &#8220;Table-only Publish Post-GTP&#8221; that detects changes that make incremental publish incompatible and republishes application. It should be set to &#8220;Yes&#8221; by default, imho. See how incremental publish can streamline your reporting in these posts: 1, 2.]]></description>
			<content:encoded><![CDATA[<p>Just found an excellent option &#8220;Table-only Publish Post-GTP&#8221; that detects changes that make incremental publish incompatible and republishes application. It should be set to &#8220;Yes&#8221; by default, imho.</p>
<p>See how incremental publish can streamline your reporting in these posts: <a href="http://ykud.com/blog/?p=178">1</a>, <a href="http://ykud.com/blog/?p=186">2</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/incremental-publish-in-ep/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>More on real-time reporting on Contributor</title>
		<link>http://ykud.com/blog/cognos/more-on-real-time-reporting-on-contributor</link>
		<comments>http://ykud.com/blog/cognos/more-on-real-time-reporting-on-contributor#comments</comments>
		<pubDate>Thu, 08 Nov 2007 07:25:44 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[contributor-only]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[contributor]]></category>
		<category><![CDATA[ep]]></category>
		<category><![CDATA[ep 8.2]]></category>
		<category><![CDATA[event manager]]></category>
		<category><![CDATA[publish data]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=186</guid>
		<description><![CDATA[Since I&#8217;ve got a couple of questions considering how to do it, I&#8217;ll get in more details on setting up Event Manager to detect application changes. See original post, and mind the second PS, especially. Some background: datadatetime column in nodestate table of application database is changed when user saves data, so we want to [...]]]></description>
			<content:encoded><![CDATA[<p>Since I&#8217;ve got a couple of questions considering how to do it, I&#8217;ll get in more details on setting up Event Manager to detect application changes. See <a href="http://ykud.com/blog/?p=178">original post</a>, and mind the second PS, especially.</p>
<p>Some background:<br />
datadatetime  column in nodestate table of application database is changed when user saves data, so we want to detect this event.<br />
You need to add a framework package, targeting nodestate table (all columns, except xml data, to fasten things up).<br />
And you&#8217;ll have to add a publish task (an incremental if you want it fast), and publish it to Cognos Connection.</p>
<p>You need to set up Event Manager like:<br />
1 Create new event<br />
2 Set up event condition of (1=1), or something that evaluates to &#8220;true&#8221;<br />
3 Add job of publish<br />
4 Go to manage task execution rules<br />
   4.1 Set up key of nodeguid (unique elists)<br />
   4.2 Set up Ongoing Events to Change and select datadatetime as change key. That is every time datadatetime &#8220;changes&#8221; ) an event will be raised.<br />
5 Schedule the event on 1 min basis and you&#8217;re &#8220;on air&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/more-on-real-time-reporting-on-contributor/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>That parallel-parallel Contibutor</title>
		<link>http://ykud.com/blog/cognos/that-parallel-parallel-contibutor</link>
		<comments>http://ykud.com/blog/cognos/that-parallel-parallel-contibutor#comments</comments>
		<pubDate>Fri, 12 Oct 2007 10:28:05 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[contributor-only]]></category>
		<category><![CDATA[ep]]></category>
		<category><![CDATA[j]]></category>
		<category><![CDATA[parallel]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=184</guid>
		<description><![CDATA[Remember me muttering about array languages? Just in case, famous Jhost7.exe is a J language execution process. So every computation in Contributor is performed by array-processing J machine, packed to xml and held as a blob in nodestate table. So it&#8217;s APL in Analyst and J in Contributor. It&#8217;s really cool, because array processing is [...]]]></description>
			<content:encoded><![CDATA[<p>Remember me muttering about <a href="http://ykud.com/blog/?p=165">array languages</a>?</p>
<p>Just in case, famous Jhost7.exe is a <a href="http://en.wikipedia.org/wiki/J_programming_language">J</a> language execution process. So every computation in Contributor is performed by array-processing J machine, packed to xml and held as a blob in nodestate table.<br />
So it&#8217;s APL in Analyst and J in Contributor.<br />
It&#8217;s really cool, because array processing is functional &#038; extremely parallel in nature.<br />
So Contributor can beat virtually any competitor if folks at <a href="http://jsoftware.com/">JSoftware</a> (or in Cognos) will add a decent parallel-processing support and multi-core processors continue their march. It&#8217;s a damn hard task, but it&#8217;s easier than adding parallel support to imperative language products like Microsoft PP.</p>
<p>As far as I digged into J sparse matrix support there was a lot to be included and a lot to parallelize. It&#8217;s so sad that the core code is closed by JSoftware&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/that-parallel-parallel-contibutor/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Cognos Enterprise Planning Design principles</title>
		<link>http://ykud.com/blog/cognos/cognos-enterprise-planning-design-principles</link>
		<comments>http://ykud.com/blog/cognos/cognos-enterprise-planning-design-principles#comments</comments>
		<pubDate>Fri, 28 Sep 2007 10:19:34 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[contributor-only]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[analyst]]></category>
		<category><![CDATA[dlists]]></category>
		<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=181</guid>
		<description><![CDATA[Usually these are the signs of coming disaster in an EP system: 1) too many dlists of the same &#8220;dimension&#8221;, some elements thrown out for cutting volumes, calculating or not calculating smth, and you have all seen them laying around just because they seemed to consistent at the time of creation. 2) manually maintained access [...]]]></description>
			<content:encoded><![CDATA[<p>Usually these are the signs of coming disaster in an EP system:<br />
1) too many dlists of the same &#8220;dimension&#8221;, some elements thrown out for cutting volumes, calculating or not calculating smth, and you have all seen them laying around just because they seemed to consistent at the time of creation.<br />
2) manually maintained access tables and elist&#8217;s<br />
3) manual allocation in dlinks</p>
<p>Such systems are consistent at the moment of project inception, but as time flows, people change, one or more dlists don&#8217;t get updated (well, they kinda lay in another lib, are named differently or smth), one or more AT doesn&#8217;t get there in time and etc.<br />
And in some period of time (rather short) you end up holding a trembling scycraper by rapidly inserting straws. Terrible, ain&#8217;t it?<br />
This is a common situation in my practice. It&#8217;s just because it&#8217;s so easy to build simple things in Analyst that you miss the point where those simple things have formed one of <a href="http://en.wikipedia.org/wiki/Mandelbrot_set">Mandelbrot&#8217;s set&#8217;s.</a><br />
Nowadays, with &#8220;we do all in Contributor small interlinked applications&#8221; motto it&#8217;s more than serious. It&#8217;s hard to find an outdated dlist in Analyst, while digging through macro, but 10 times as hard to debug a sequence of admin links with respect to access tables used.</p>
<p>There are really some ways to avoid these things. There&#8217;s no 100%-proof recipes, just some common sense.</p>
<p>Let&#8217;s go step by step, starting from dlist&#8217;s.</p>
<p>Handling Dlist&#8217;s</p>
<p>The main Idea: All dlist, forming one dimension should be maintained through one d-cube.<br />
This is very good with hierarchical dimensions, such as products, so we&#8217;ll use them as example.</p>
<table border="1">
<tr>
<td>&nbsp;</td>
<td>Brand</td>
<td>IsUsedInCalc1</td>
<td>IsUsedInApplicationX</td>
<td>&#8230;</td>
</tr>
<tr>
<td>Product1</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&#8230;</td>
</tr>
<tr>
<td>Product2</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&#8230;</td>
</tr>
<tr>
<td>&#8230;.</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&#8230;</td>
</tr>
<tr>
<td>ProductN</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&#8230;</td>
</tr>
</table>
<p>Add as much attributes as you need. So if you&#8217;re gonna do a dlist with not all products for application Z, you just add a column, mark required elements and make it an import link for a dlist.</p>
<p>The sub Idea: All dlist updates and sequencing application updates should be run by a single macro.</p>
<p>So after you create such a dlist for app Z, you add it&#8217;s @DListUpdate in the UPDATE_ALL_DLISTS_MACRO and add an app Z sync &#038; gtp in there. Therefore &#8212; 1 place to change, 1 button to trigger all changes.</p>
<p>Problems</p>
<p>1) No way to import calc options. Seriously, I don&#8217;t why it is that hard to do, but you just can&#8217;t do it (if anybody knows &#8212; drop me a line). So Accounts dimension is hard to handle.<br />
2) No simple way to write formulas. You can write them in text and import Formulae attribute, but adding &#8220;{&#8221; is annoying.</p>
<p>Some tricks</p>
<p>1) You can use all those DlistItemImport (from cubes, list, odbc&#8217;s, fm packages) macros instead of  import links<br />
2) If you need some sorting, some non-trivial (for Analyst) text operations like spliting\joining strings, adding codes and that stuff &#8212; you can export the cube to a txt file, put an odbc source on it and have a full-blown SQL-92 with CONCAT,SPLIT,LIKE, ORDER and all that nice stuff.<br />
3) You can have a more custom table like</p>
<table border="1">
<tr>
<td>&nbsp;</td>
<td>Name</td>
</tr>
<tr>
<td>1</td>
<td>Product1</td>
</tr>
<tr>
<td>2</td>
<td>Product2</td>
</tr>
<tr>
<td>&#8230;</td>
<td>&#8230;</td>
</tr>
</table>
<p>and do all the input in cube, w\o changing the list</p>
<p>2 AT and elists</p>
<p>Main Idea: Have a single source (mentioned above) and do everything automatically.</p>
<p>AT and elists can be (and should be) loaded from csv files.<br />
If you add a column &#8220;responsible&#8221; in the cube above, and calculate a column with &#8220;access level&#8221; on base of &#8220;responsible&#8221; (Yes = Write, No = No Data) &#8212; there you go, start loading the thing up.<br />
3,4 dimensions are okay in a separate AT cube, but it should be a cube, not adding rules in applications. It&#8217;s just that since you&#8217;ll have some technical applications, you&#8217;ll have to repeat those AT&#8217;s more than once &#8212; and that&#8217;s a dead-end.<br />
Elist are the same, you can export a dlist as elist since 8.1 and enjoy the result, but I&#8217;d rather create all those columns myself.</p>
<p>Tricks<br />
1 Maintaining the same Elist Id allows you to change Display names w\o loosing data, so you can work around that.<br />
2 Play around calculating access level. There was a <a href="http://www.cognoise.com/community/index.php?PHPSESSID=nc38uea0pg0jek0j4rm889vl61&#038;topic=2841.0">nice topic</a> on cognoise about automaticaly closing past months. So easy to do with @Time BiF.</p>
<p>3 Manual allocations.</p>
<p>Never. No way to find problem afterwards.</p>
<p>Do a CashFlow Account to P&#038;L Account columns in item descriptions and use them as allocation cubes, use allocation tables when desperate.</p>
<p>I&#8217;ll add more as I remember, comments welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-enterprise-planning-design-principles/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Cognos &#8220;Real-time&#8221; Reporting on Contributor Data</title>
		<link>http://ykud.com/blog/cognos/cognos-real-time-reporting-on-contributor-data</link>
		<comments>http://ykud.com/blog/cognos/cognos-real-time-reporting-on-contributor-data#comments</comments>
		<pubDate>Tue, 21 Aug 2007 08:19:13 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[contributor-only]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[bi]]></category>
		<category><![CDATA[dlists]]></category>
		<category><![CDATA[ep]]></category>
		<category><![CDATA[ep 8.2]]></category>
		<category><![CDATA[event manager]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=178</guid>
		<description><![CDATA[8.2 makes many things nice&#38;simple. To get a full budget report we need to do the following:&#160;&#160;&#160; 1) Publish the whole application&#160;&#160;&#160; 2) Run the report on published data Publishing a typical application of 100+ elist takes around 20 minutes, so no real-time here. But 8.2 introduces trickle publish, allowing to incrementally publish only changed [...]]]></description>
			<content:encoded><![CDATA[<p>8.2 makes many things nice&amp;simple. </p>
<p>To get a full budget report we need to do the following:<br />&nbsp;&nbsp;&nbsp; 1) Publish the whole application<br />&nbsp;&nbsp;&nbsp; 2) Run the report on published data</p>
<p>Publishing a typical application of 100+ elist takes around 20 minutes, so no real-time here. <br />But 8.2 introduces trickle publish, allowing to incrementally publish only changed data.&nbsp; This greatly shortens time spent on publishing. </p>
<p>The question now is how to find out that it&#8217;s time to run incremental publish. &nbsp;  </p>
<p>By pointing Event Manager on nodestate table we can detect any event (save, submit) happening in application. And using Event Manager ability to detect change in specific column (changetimeid for example) we can fire an event each time somebody saves data. This event triggers incremental publish and there you go.<br />&nbsp;&nbsp;&nbsp; 1) Somebody saves data in contrbutor<br />&nbsp;&nbsp;&nbsp; 2) Event Manager raises an event, since nodestate table changed<br />&nbsp;&nbsp;&nbsp; 3) Event triggers a Contributor Macro running incremental publish<br />&nbsp;&nbsp;&nbsp; 4) Refreshing a report brings out new data <br />Since only 1 elist is published at a time, speed is astonishing (around 15s in our case). <br />Maximum lag between entering data and seeing it in report depends on Event Manager request period (minimum 1 min), so in 2 minutes&nbsp; max people see entered data in reports.</p>
<p>PS. Event manager requires some condition to start an event and doesn&#8217;t accept simple &#8220;true&#8221;, &#8220;forall&#8221; or&nbsp; something, so we write &#8220;1=1&#8243; conditions )<br />PSPS. Disallow cache for appropriate reports to avoid reading old data. Set datasource processing to database only and turn off report cache in query attributes.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-real-time-reporting-on-contributor-data/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Cognos Contributor easter egg</title>
		<link>http://ykud.com/blog/cognos/cognos-contributor-easter-egg</link>
		<comments>http://ykud.com/blog/cognos/cognos-contributor-easter-egg#comments</comments>
		<pubDate>Sun, 08 Apr 2007 19:26:20 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[contributor-only]]></category>
		<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=163</guid>
		<description><![CDATA[Can you imagine such a Contributor Application: 2 Cubes (A&#38;B for example), each linked to each other so that when you input a value in a cube A cell, corresponding cube B cell changes to that value, and when you input some value into that cube B cell (the very same changed), cube A cell [...]]]></description>
			<content:encoded><![CDATA[<p>Can you imagine such a Contributor Application:<br />
2 Cubes (A&amp;B for example), each linked to each other so that when you input a value in a cube A cell, corresponding cube B cell changes to that value, and when you input some value into that cube B cell (the very same changed), cube A cell changes accordingly.<br />
So:</p>
<ul>
<li>2 cubes</li>
<li>2 cells</li>
<li>you can input data in each cell (both writable)</li>
<li>date inputed in one cell is transfered to the other</li>
</ul>
<p>It can be done, I did it as a part of an argument. It&#8217;s not a thing to use in production,  just another thing that &#8220;constructor applications&#8221; like Cognos EP, meaning EPB as an opposite way, allow.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-contributor-easter-egg/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Get Data vs Send Data</title>
		<link>http://ykud.com/blog/cognos/get-data-vs-send-data</link>
		<comments>http://ykud.com/blog/cognos/get-data-vs-send-data#comments</comments>
		<pubDate>Thu, 15 Feb 2007 20:23:17 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[contributor-only]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[contributor]]></category>
		<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=151</guid>
		<description><![CDATA[Nowadays Cognos EP system should look like a set of Contributor Applications exchanging data. That&#8217;s an axiom, refer to Cognos Since we have these numerous apps, we need to transfer data between them. And we got 2 variants: 1 Get Data extension &#8212; a very nice feature (especially with system links) allowing us to locally [...]]]></description>
			<content:encoded><![CDATA[<p>Nowadays Cognos EP system should look like a set of Contributor Applications exchanging data. That&#8217;s an axiom, refer to Cognos <img src='http://ykud.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Since we have these numerous  apps,  we need to transfer data between them. And we got 2 variants:<br />
1 Get Data extension &#8212; a very nice feature (especially with system links) allowing us to locally execute data transfer from other Contributor applications to the one we&#8217;re working in. And, moreover only the current elist is used, which speeds up the process.<br />
2 Send Data via administration links arranged into Contributor Macros. Let&#8217;s assume that we can allow end-user to start such tasks by pressing hyperlinks (i&#8217;ve described underlying technology earlier in this blog, look for &#8220;asp macro calls&#8221;).</p>
<p>But when to use Get Data and when Send Data? That&#8217;s what I&#8217;d like to talk about.</p>
<p>If you&#8217;re splitting the model into small functional applications (expenses, profits, debts etc to form P&amp;L, CashFlow, Balance as separate applications) and a single person (regional manager for example) should enter his profit data in profit app, expenses in expenses app and <strong>get data</strong> into P&amp;L app to form his P&amp;L &#8212; you use Get Data in P&amp;L application to transfer numbers.</p>
<p>And if afterwards another person (planning controller) is responsible for Consolidated Company P&amp;L, each unit P&amp;L should be <strong>sent </strong>to him, not <strong>got </strong>by him. Controller cannot press get data time from time to get different results. Neither is easy to monitor submission status in the other app. He just wants to be notified when the submitted unit P&amp;L arrives into his application.</p>
<p>Just to summarize it.  If it&#8217;s one person &#8212; Get Data is preferable and if it&#8217;s 2 or more people, the one finishing work (submitting) should send his results to others. It just distributed systems &#8220;Push not Pull&#8221; tactics.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/get-data-vs-send-data/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

