<?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; ep cookbook</title>
	<atom:link href="http://ykud.com/blog/category/cognos/ep-cookbook/feed" rel="self" type="application/rss+xml" />
	<link>http://ykud.com/blog</link>
	<description></description>
	<lastBuildDate>Mon, 30 Apr 2012 06:10:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Cognos 8 EP troubleshooting import data from package</title>
		<link>http://ykud.com/blog/cognos/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&#8217;t work. But there are always some workarounds. With mostly very cryptical error messages or without any. One of the problems [...]]]></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&#8217;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&#8217;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 &#8216;wonderfull&#8217; Java world, setting JVMX is a common boost-up technique. And there&#8217;s a lot of places to apply it. Think about Cognos Rich Client Platform (Cognos 8.4 Contributor) for start&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-8-ep-troubleshooting-import-data-from-package/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<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>More on choosing Dimension for Publish</title>
		<link>http://ykud.com/blog/cognos/more-on-choosing-dimension-for-publish</link>
		<comments>http://ykud.com/blog/cognos/more-on-choosing-dimension-for-publish#comments</comments>
		<pubDate>Sat, 05 Jul 2008 19:42:49 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[publish]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=142</guid>
		<description><![CDATA[I already wrote some notes on choosing dimension for publish in this post. Today I just want to add some of points: 1 If you&#8217;re up to publishing some serious amount of data, variant with adding a dummy dlist with 1 item and using it as dimension for publish seems a very bad idea.  You&#8217;re [...]]]></description>
			<content:encoded><![CDATA[<p>I already wrote some notes on choosing dimension for publish in <a href="http://ykud.com/blog/cognos/some-ep-bi-tips">this post</a>.</p>
<p>Today I just want to add some of points:</p>
<p>1 If you&#8217;re up to publishing some serious amount of data, variant with adding a dummy dlist with 1 item and using it as dimension for publish seems a very bad idea.  You&#8217;re terribly slowing proccessing and wasting tablespace. So you have to choose a dimension for publish to reduce table size and speed things up</p>
<p>2 Dimension for publish must be:</p>
<p>a Stable. It shouldn&#8217;t change or change very rarely, since these changes will cause Framework Manager models \ ETL models changes.<br />
b Have sane (~3-33) number of elements. If less than 3, there&#8217;s no win in performance. If more than 30, ensure it won&#8217;t change, because big dimensions change more often than small ones.</p>
<p>3 There are dlists that are naturally stable aka measures, like {Quantity;Price;Sales}</p>
<p>4 In other cases timescale seems a really good choice. For example, if months dimension doesn&#8217;t have year signs in name (like Jan, Feb, Mar), columns in publish won&#8217;t change ever.  To work with timescale published data you can use sql unpivot queries, that will virtually turn it into view publish, but it&#8217;ll way more effective than publishing it by 1elem dimension in first place. I&#8217;ve settled for this variant in my current project. Moreover, if you wrap this unpivot sql into ETL procedure, you can treat all published data uniformly while loading into datamarts (publish all needed cubes on timescale, use the same etl procedure). </p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/more-on-choosing-dimension-for-publish/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enterprise PLanning Objects Naming Convention.</title>
		<link>http://ykud.com/blog/analyst/enterprise-planning-objects-naming-convention</link>
		<comments>http://ykud.com/blog/analyst/enterprise-planning-objects-naming-convention#comments</comments>
		<pubDate>Fri, 16 May 2008 10:54:50 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[analyst]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[contributor]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=219</guid>
		<description><![CDATA[As I&#8217;ve promised, here are naming conventions I tend to follow in EP projects. Setting up naming rules doesn&#8217;t seem so crucial at project start, but generally hits on you on the head on final phase, when development turns to support. And trying to support your colleagues model will leave you thinking about naming objects [...]]]></description>
			<content:encoded><![CDATA[<p>As <a href="http://ykud.com/blog/?p=215">I&#8217;ve promised</a>, here are naming conventions I tend to follow in EP projects.<br />
Setting up naming rules doesn&#8217;t seem so crucial at project start, but generally hits on you on the head on final phase, when development turns to support. And trying to support your colleagues model will leave you thinking about naming objects the same way more than once <img src='http://ykud.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  So naming conventions are one of main project documents for me now.</p>
<p>I really expect and encourage comments on this naming proposal. Maybe together we will create something like <a href="http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html">Sun Java Code Conventions</a> )<br />
<span id="more-138"></span></p>
<table border=1 width="100%">
<tr>
<th align="left" bgcolor="#C0C0C0" bordercolor="#FFFFFF">Object</th>
<th align="left" bgcolor="#C0C0C0" bordercolor="#FFFFFF">Naming rule</th>
<th align="left" bgcolor="#C0C0C0" bordercolor="#FFFFFF">Example</th>
</tr>
<tr>
<td bgcolor="#DAA0A0" bordercolor="#FFFFFF"><b>Analyst</b>:</td>
<td></td>
<td></td>
</tr>
<tr>
<td>Library</td>
<td>Library names are not that important, though if you use Analyst with Contributor, consider creating stub libraries for importing data to\from Contributor, as <a href="http://ykud.com/blog/?p=92">I&#8217;ve described here</a>. No data in skeleton library is a motto that will help you more than once, I guarantee. <br /> Library codes are important if you want to keep a single store of projects (in consulting company, or competency center) and you&#8217;d better create some seeding rules for creating unique 9 numbers for projects. <br /> A simple scheme of xxxxyylll, where xs are project code, ys &#8212; library type and ls &#8212; library order number will be sufficient in most of cases.</td>
<td>Sales_Planning_skl with code 777701001</td>
</tr>
<tr>
<td>Dlist</td>
<td>The main difference with Cognos initial coding standard. <br />
Dlists are numbered not up by their functions, but by type calculations happening in this dlist. I&#8217;ve got initial table from [Erik Thomsen's OLAP book][1] and modified it to suit EP better. So it goes like this:<br />
<br />1 &#8211; IF-ELSE formulas<br />2 &#8211; *,^, / <br />3 &#8211;  Common Sums <br /> 4 &#8211; Timescale Sums <br /> 5 &#8211; No calculations <br />
Second difference: these numbers are used as suffixes of dlists names, not as prefixes. This allows quick search by first letter of dlist name when you&#8217;re browsing the library and all product dlists will be kept together, regardless of type.<br />
Third rule: only latin names with spaces substituted by _ (underscore). This guarantees that published tables will be named meaningfully and their names won&#8217;t mutate after time (a real problem with cyrillic dlist\dcube names).
</td>
<td>Balance_Sheet_1<br />Products_3<br />Months_4</td>
</tr>
<tr>
<td>Dlist item names</td>
<td>One really useful hint: mark all calculation temporary elements (not to be seen user) with leading # symbol. This allows creating simple saved selection with filter that will easily hide all unnecessary elements from users in Contributor</td>
<td>#temporary_allocation_element</td>
</tr>
<tr>
<td>DCubes</td>
<td>Once again, only latin names with underscores to keep publish tables names sane. Contributor translations allow you to rename these cubes for end users with whatever names they&#8217;d like. No i\o\c, we&#8217;re out of kindergarten</td>
<td>Product_Sales_Global</td>
<tr>
<tr>
<td>Dlinks</td>
<td>&#8220;<" instead of ":" in separating source from target. And some hints like + when you've got an add link, - for subtract, to allow better understanding of link logic while viewing it in update list table.</td>
<td>BalanceSheet&#8221;<"Cashflow(+)</td>
</tr>
<tr>
<td>Macros</td>
<td>Latin verbs or sentences describing what you&#8217;re doing with macro. Latin due to necessity for batch running.</td>
<td>Update_Products_Export_Elists</td>
</tr>
<tr>
<td>Allocation Tables</td>
<td>Similar to links, just the allocated dimensions with some commentaries</td>
<td>ProductGroups&#8221;<"Products</td>
<tr>
<tr>
<td>File Maps</td>
<td>Whatever you like, I prefer filename</td>
<td>pl_export.csv</td>
</tr>
<tr>
<td bgcolor="#DAA0A0" bordercolor="#FFFFFF"><b>Contributor</td>
<td></td>
<td></td>
</tr>
<tr>
<td>Applications</td>
<td>Rather strict rules are implied by Contributor itself, so i&#8217;d just advise to name aplications meaningfully, given that these names will always appear in browser connection string. No doubt that seeing &#8220;sales_plan_v8_will_it_ever_work&#8221; will ensure users. No grammar mistakes or typos, please.</td>
<td>sales_plan_by_brands</td>
</tr>
<tr>
<td>Access Tables</td>
<td>Access Tables should <u>always</u> be named. It&#8217;s best to write a short sentence, describing access table meaning</td>
<td>Closing product list based on managers responsibility</td>
</tr>
<tr>
<td>Saved selections</td>
<td>Plain common sense: explain what this selection selects )</td>
<td>Accounts_special_calc_items</td>
</tr>
<tr>
<td>Administration links</td>
<td>Need suggestions here. <br />Since Administration link is a pack of links, I use macro notation &#8212; verbs describing the process, but I put target application first</td>
<td>sales_plan_by_brands update from regions</td>
</tr>
<tr>
<td>Macros</td>
<td>Need suggestions here too. <br />Again some action descriptions, but I don&#8217;t have a common approach of separating macros by applications they&#8217;re working with or smth like that. Moreover macros aren&#8217;t grouped anyhow, so I sometimes tend to prefix macros with some block group with following description</td>
<td>Sales_submission sales by brands to sales by regions</td>
</tr>
<tr>
<td>System Links</td>
<td>These are for users, so names should be descriptive actions</td>
<td>Load new currency rates</td>
</tr>
</table>
<p><s>Whoa, it&#8217;s a really huge document, maybe I&#8217;ll it finish someday&#8230;</s></p>
<p>  [1]: http://www.amazon.com/OLAP-Solutions-Building-Multidimensional-Information/dp/0471400300</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/analyst/enterprise-planning-objects-naming-convention/feed</wfw:commentRss>
		<slash:comments>4</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>Modeling transactions in Contributor</title>
		<link>http://ykud.com/blog/cognos/modeling-transactions-in-contributor</link>
		<comments>http://ykud.com/blog/cognos/modeling-transactions-in-contributor#comments</comments>
		<pubDate>Thu, 17 Apr 2008 13:34:13 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep]]></category>
		<category><![CDATA[ep cookbook]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=212</guid>
		<description><![CDATA[There are some situations when you definitely need some way of recognizing new input from user. These are rather rare occasions, but when it&#8217;s nice to have such a tool is sack. One of the applications was discussed in this communities topic. By the way, I&#8217;m spending much time on communities these days (it&#8217;s a [...]]]></description>
			<content:encoded><![CDATA[<p>There are some situations when you definitely need some way of recognizing new input from user. These are rather rare occasions, but when it&#8217;s nice to have such a tool is sack.</p>
<p>One of the applications was discussed in <a href="http://communities.cognos.com/home/message/1574#1574">this communities topic</a>. By the way, I&#8217;m spending much time on communities these days  (it&#8217;s a very slow site, so no surprise) and I recommend it as a valuable resource for finding cognos-related answers. A steady pace of 10 topics a day gives a rather solid knowledge base now, after 4 months of uptime. If only it was faster, sigh&#8230;</p>
<p>So how to catch the fact that user changed this specific cell?</p>
<p>Simple, you just have to remember about virtual dimensions and calculation rules to build a &#8220;trigger&#8221;.</p>
<p>1 You add a simple dlist {value, old_value, new_value_flag}, with new_value_flag = (value?=old_value). new_value_flag is a dlist-formatted element with (yes\no) elements.<br />
2 After user inputs new data into cell, this flag will change to yes (by IF formula) and you can use this data by writing an accumulation dlink using only new data (select yes value from new_value_flag virtual dimension).<br />
3 When you&#8217;ve finished processing freshly inputed data, you just run another link that copies value to old_value, and that sets the flag back.</p>
<p>Ps: It&#8217;s too bad we didn&#8217;t follow that topic on communities to a logical end.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/modeling-transactions-in-contributor/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Cyclic calculations in Analyst or &#8220;Make yourself an own @SliceUpdate&#8221;</title>
		<link>http://ykud.com/blog/cognos/cyclic-calculations-in-analyst-or-make-yourself-an-own-sliceupdate</link>
		<comments>http://ykud.com/blog/cognos/cyclic-calculations-in-analyst-or-make-yourself-an-own-sliceupdate#comments</comments>
		<pubDate>Thu, 21 Feb 2008 10:38:31 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[analyst]]></category>
		<category><![CDATA[contributor]]></category>
		<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=205</guid>
		<description><![CDATA[In the old times, before SliceUpdate first appeared ) we&#8217;ve thought that one thing analyst lacked to be really all-in-one tool was ability to do loops. For, while, until &#8212; all that nice stuff. And when SliceUpdate was introduced it became clear that @Test(Restart) allows you to cycle macro execution on whatever basis. Using @Test(Restart) [...]]]></description>
			<content:encoded><![CDATA[<p>In the old times, before SliceUpdate first appeared ) we&#8217;ve thought that one thing analyst lacked to be really all-in-one tool was ability to do loops. For, while, until &#8212; all that nice stuff. And when SliceUpdate was introduced it became clear that @Test(Restart) allows you to cycle macro execution on whatever basis.</p>
<p>Using @Test(Restart) allowed doing a lot of interesting things, like calculating optimal production plans (repeat until reach given condition), even a sample calculation of admixtures for zink was made once <img src='http://ykud.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>But most common use of @Test(Restart) was building your own Slice update macro. A detailed instruction follows.<br />
<span id="more-124"></span><br />
Most common reason for DIY SliceUpdate is that you don&#8217;t want to put C>A links in UpdateList of cubes.  Sincerely it&#8217;s not a reason at all, because if you follow<a href="http://ykud.com/blog/?p=92"> exp\imp guidelines</a>, you&#8217;ll have fully separate cubes for exporting from contributor and will be able to anything with their updatelists. But if you didn&#8217;t and the project is nearly at the production stage and you just can&#8217;t do C>A links due to volume limits:<br />
1) Create an allocation cube with your elist and {standard, current step,what to transfer} dlist.<br />
2) Fill standard column with increasing numbers 1..number_of_elist_items (they&#8217;ll be elists)<br />
3) Make &#8216;what to transfer&#8217; dlist-formated (by elist) and containing the formula  &#8216;if current step = 1 then standard&#8217;<br />
4) Put this cube in C>A links using what to transfer column<br />
5) In macro, first copy standard to current step then iterate the following with @TEST(current step > 0;@Restart)<br />
5.1) Run link &#8212; only 1 elist will be transfered<br />
5.2) Decrease current step column by 1 (subtract dlink) &#8212; move the ruler down one step<br />
5.3) Loop<br />
Salt, pepper and serve with wine of preference.</p>
<p>PS By placing 1 in couple of rows at start you transfer 2 elists at a time, in three rows &#8212; 3 elists and so on.<br />
PSPS Publish is faster )</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cyclic-calculations-in-analyst-or-make-yourself-an-own-sliceupdate/feed</wfw:commentRss>
		<slash:comments>0</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>Ways of calculating Running Count to import data into Multi-Line models</title>
		<link>http://ykud.com/blog/bicpm/ways-of-calculating-running-count-to-import-data-into-multi-line-models</link>
		<comments>http://ykud.com/blog/bicpm/ways-of-calculating-running-count-to-import-data-into-multi-line-models#comments</comments>
		<pubDate>Fri, 01 Feb 2008 20:12:11 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[BI&CPM]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[large dimensions]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[scripts]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=202</guid>
		<description><![CDATA[I&#8217;ve nicked the term &#8220;Multi-Line&#8221; model out from some cognos best practices presentations. Never known it was called that way ) Multi-Line is only way to go when you have a potentially huge dimension only a tiny bit of which should be available to end-user at a time. Like employee planning, whole dimension of 10k [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve nicked the term &#8220;Multi-Line&#8221; model out from some cognos best practices presentations. Never known it was called that way )</p>
<p>Multi-Line is only way to go when you have a potentially huge dimension only a tiny bit of which should be available to end-user at a time. Like employee planning, whole dimension of 10k people, strictly less than a 100 in department. So you create a fake dimension of 1..100 and add an Employee name column, decreasing cube volume by 100. Access tables + cut-down might help, but it&#8217;s sometimes better to allow people pick up any employee,client, product given up that there won&#8217;t be more than fixed number of rows.</p>
<p>Main problem with this modeling technique arises when it&#8217;s time to import data in such cube. That data usually doesn&#8217;t have an 1..100 running count attached, so it&#8217;s your task to add it.</p>
<p>In this post I&#8217;ll sum up the ideas of how to calculate running count split by elist (that&#8217;s usual, ain&#8217;t it?).</p>
<p>As a example, I&#8217;ll use this simple table</p>
<table border=0 width="100%">
<tr>
<th align="left" bgcolor="#C0C0C0" bordercolor="#FFFFFF">dept</th>
<th align="left" bgcolor="#C0C0C0" bordercolor="#FFFFFF">emp</th>
<th align="left" bgcolor="#C0C0C0" bordercolor="#FFFFFF">salary</th>
</tr>
<tr>
<td>Finance</td>
<td>Pete</td>
<td>100</td>
</tr>
<tr>
<td>Finance</td>
<td>Ann</td>
<td>200</td>
</tr>
<tr>
<td>Finance</td>
<td>Jo</td>
<td>300</td>
</tr>
<tr>
<td>HR</td>
<td>Nick</td>
<td>100</td>
</tr>
<tr>
<td>HR</td>
<td>Sam</td>
<td>200</td>
</tr>
</table>
<p>And you have departments as an elist, so you have to number rows so that numbering will restart for each dept. Numbering requires an order so let&#8217;s alphabetical order of employee names.</p>
<p>So this is what we want to get:</p>
<table border=0 width="100%">
<tr>
<th align="left" bgcolor="#C0C0C0" bordercolor="#FFFFFF">dept</th>
<th align="left" bgcolor="#C0C0C0" bordercolor="#FFFFFF">emp</th>
<th align="left" bgcolor="#C0C0C0" bordercolor="#FFFFFF">salary</th>
<th align="left" bgcolor="#C0C0C0" bordercolor="#FFFFFF">running_count</th>
</tr>
<tr>
<td>Finance</td>
<td>Ann</td>
<td>200</td>
<td>1</td>
</tr>
<tr>
<td>Finance</td>
<td>Jo</td>
<td>300</td>
<td>2</td>
</tr>
<tr>
<td>Finance</td>
<td>Pete</td>
<td>100</td>
<td>3</td>
</tr>
<tr>
<td>HR</td>
<td>Nick</td>
<td>100</td>
<td>1</td>
</tr>
<tr>
<td>HR</td>
<td>Sam</td>
<td>200</td>
<td>2</td>
</tr>
</table>
<p><span id="more-121"></span><br />
Source code for table:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="sql"><pre class="de1"><span class="kw1">WITH</span> data_t <span class="kw1">AS</span>
<span class="br0">&#40;</span>
<span class="kw1">SELECT</span> <span class="st0">'Finance'</span> DEPT<span class="sy0">,</span><span class="st0">'Pete'</span> EMP<span class="sy0">,</span> <span class="nu0">100</span> SALARY <span class="kw1">FROM</span> sys<span class="sy0">.</span>dual
<span class="kw1">UNION</span> <span class="kw1">ALL</span>
<span class="kw1">SELECT</span> <span class="st0">'Finance'</span><span class="sy0">,</span><span class="st0">'Ann'</span><span class="sy0">,</span> <span class="nu0">200</span>  <span class="kw1">FROM</span> sys<span class="sy0">.</span>dual
<span class="kw1">UNION</span> <span class="kw1">ALL</span>
<span class="kw1">SELECT</span> <span class="st0">'Finance'</span><span class="sy0">,</span><span class="st0">'Jo'</span><span class="sy0">,</span> <span class="nu0">300</span>  <span class="kw1">FROM</span> sys<span class="sy0">.</span>dual
<span class="kw1">UNION</span> <span class="kw1">ALL</span>
<span class="kw1">SELECT</span> <span class="st0">'HR'</span><span class="sy0">,</span><span class="st0">'Nick'</span><span class="sy0">,</span> <span class="nu0">100</span>  <span class="kw1">FROM</span> sys<span class="sy0">.</span>dual
<span class="kw1">UNION</span> <span class="kw1">ALL</span>
<span class="kw1">SELECT</span> <span class="st0">'HR'</span><span class="sy0">,</span><span class="st0">'Sam'</span><span class="sy0">,</span> <span class="nu0">200</span>  <span class="kw1">FROM</span> sys<span class="sy0">.</span>dual
<span class="br0">&#41;</span>
<span class="kw1">SELECT</span> <span class="sy0">*</span> <span class="kw1">FROM</span> data_t</pre></div></div></div></div></div></div></div>


<p>So what are our choices?</p>
<p><strong>0 Use a framework package as source and a running-count calculation in query subject</strong></p>
<p>Only since Cognos 8.2, slower than some variants, but definitely most cognos-style.</p>
<p>Create a query subject and add an expression of running-count like</p>
<p><code>running-count ( [SALARY]  for [DEPT]  )</code></p>
<p><strong>1 Add sub query to count this rows position within elist slice.</strong></p>
<p>That&#8217;s &#8220;works everywhere, but terribly slow&#8221; solution. Easy to do, use it if you&#8217;re about to import a 100-1000 rows table and really don&#8217;t care about time it takes.</p>
<p>Sample code:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="sql"><pre class="de1"><span class="kw1">SELECT</span> DEPT<span class="sy0">,</span>EMP<span class="sy0">,</span>SALARY<span class="sy0">,</span>
<span class="br0">&#40;</span>
<span class="kw1">SELECT</span> <span class="kw1">COUNT</span><span class="br0">&#40;</span><span class="sy0">*</span><span class="br0">&#41;</span>
<span class="kw1">FROM</span> data_t T2
<span class="kw1">WHERE</span> T2<span class="sy0">.</span>DEPT <span class="sy0">=</span> T<span class="sy0">.</span>DEPT
<span class="kw1">AND</span> T2<span class="sy0">.</span>EMP <span class="sy0">&lt;=</span> T<span class="sy0">.</span>EMP
<span class="br0">&#41;</span> <span class="kw1">AS</span> running_count
 <span class="kw1">FROM</span> data_t T
 <span class="kw1">ORDER</span> <span class="kw1">BY</span> dept<span class="sy0">,</span>running_count</pre></div></div></div></div></div></div></div>


<p><strong>2 Use SQL&#8217;99 standard rownum() function</strong></p>
<p>Way much better optimized (in Oracle ) ) than subquerying variant above. Problem is: works only on Oracle, Ms SQL 2005+ and DB2. Ms SQL 2000 import &#8212; sorry, no SQL&#8217;99 there.  See <a href="http://en.wikipedia.org/wiki/Select_(SQL)#ROW_NUMBER.28.29_window_function">original syntax</a></p>
<p>Sample code:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="sql"><pre class="de1"><span class="kw1">SELECT</span> DEPT<span class="sy0">,</span>EMP<span class="sy0">,</span>SALARY<span class="sy0">,</span> <span class="kw1">ROW_NUMBER</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="kw1">OVER</span> <span class="br0">&#40;</span>partition <span class="kw1">BY</span> dept <span class="kw1">ORDER</span> <span class="kw1">BY</span> emp<span class="br0">&#41;</span> <span class="kw1">FROM</span> data_t</pre></div></div></div></div></div></div></div>


<p><strong>3 Use cursors to calculate rownumber</strong></p>
<p>Brute-force solution, non portable, as fast as possible. Only way to do serious lifting in MS SQL 2000.</p>
<p>I&#8217;ll place sample code for Ms SQL 2000 if somebody needs it <img src='http://ykud.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>PS You&#8217;re on Oracle 10g+? Lucky you, you can also try to do running_counts it via oracle model by clause.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/ways-of-calculating-running-count-to-import-data-into-multi-line-models/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Contributor Audit Reports</title>
		<link>http://ykud.com/blog/cognos/contributor-audit-reports</link>
		<comments>http://ykud.com/blog/cognos/contributor-audit-reports#comments</comments>
		<pubDate>Sun, 23 Dec 2007 18:59:03 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep cookbook]]></category>
		<category><![CDATA[bi]]></category>
		<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=199</guid>
		<description><![CDATA[A common question of ep admins is: &#8220;How can I see all users currently logged into planning wrt applications they&#8217;re using?&#8221; Something like: &#8220;Steve is now editing Capex and Sales Planning, and Mary is the only one in HR application now&#8221;. The task relatively simple for 1 application (yet required view publish for version prior [...]]]></description>
			<content:encoded><![CDATA[<p>A common question of ep admins is: &#8220;How can I see all users currently logged into planning wrt applications they&#8217;re using?&#8221;<br />
Something like: &#8220;Steve is now editing Capex and Sales Planning, and Mary is the only one in HR application now&#8221;.</p>
<p>The task relatively simple for 1 application (yet <a href="http://ykud.com/blog/?p=164">required view publish</a> for version prior to 8.2, now there&#8217;s <a href="http://ykud.com/blog/?p=195">a special table with users</a>). You just join nodestate with users and states tables and enjoy nice pie chart of submitted,in progress and not started. Even a direct drill-through in application, if you&#8217;d like.<br />
But it becomes messy as more and more applications are added.<br />
I&#8217;ve seen variants in Cognos ReportNet, PHP, IIS log parsing and liked none.</p>
<p>Yet all applications are listed  in pad datastore and you just have to iterate the &#8220;1 application solution&#8221;.<br />
So I just dream of audit package for EP that would automatically add all applications and give admins some rest of programming and framework changing,</p>
<p>Did anyone out there do any of audit reporting on EP? What were your problems &#038; solutions?</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/contributor-audit-reports/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

