<?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</title>
	<atom:link href="http://ykud.com/blog/category/ep/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>Cognos Enterprise Planning PAD contents, duplicate entries and deployment problems</title>
		<link>http://ykud.com/blog/ep/cognos-enterprise-planning-pad-contents-duplicate-entries-and-deployment-problems</link>
		<comments>http://ykud.com/blog/ep/cognos-enterprise-planning-pad-contents-duplicate-entries-and-deployment-problems#comments</comments>
		<pubDate>Wed, 09 Nov 2011 03:10:42 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=712</guid>
		<description><![CDATA[Seems like I can rename this blog &#8216;Reminisces&#8217; any day now. After some years of not prodding into Cognos EP I was asked to look at a rather confusing error. Export deployment wouldn&#8217;t work, throwing &#8216;null&#8217; error initialising object selection dialogue. Yes, as these two IBM support articles (1,2) state: it&#8217;s a problem with duplicated objects [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ykud.com/blog/wp-content/uploads/2011/11/331357312_893ef9e791_b.jpg"><img class="alignleft size-medium wp-image-714" title="331357312_893ef9e791_b" src="http://ykud.com/blog/wp-content/uploads/2011/11/331357312_893ef9e791_b-300x225.jpg" alt="" width="150" height="112" /></a>Seems like I can rename this blog &#8216;Reminisces&#8217; any day now. After some years of not prodding into Cognos EP I was asked to look at a rather confusing error. Export deployment wouldn&#8217;t work, throwing &#8216;null&#8217; error initialising object selection dialogue. Yes, as these two IBM support articles (<a href="https://www-304.ibm.com/support/docview.wss?uid=swg21406404">1</a>,<a href=" https://www-304.ibm.com/support/docview.wss?uid=swg21406404">2</a>) state: it&#8217;s a problem with duplicated objects in PAD. But since was the first time I saw this rather massive instance (80+ apps, hundreds of macros), I was interested in finding a way to automate this task. Although number of EP users is decreasing, hope that anybody facing this issue in future will benefit from this post. And if you&#8217;re curious about how things are stored in PAD, scroll over )</p>
<p>&nbsp;</p>
<p>There are a few things that can be duplicated in PAD, so I&#8217;ll describe each situation accompanied with code I wrote to check for duplicated items. Fortunately, export dialogue shows what it&#8217;s checking at failure point, so you&#8217;ll know where to look.<br />
<em><div id='toc' class='post-712'><div id='toc_title'>Table of contents</div>
<ul><li><a href="#Macros">Macros</a></li>
<li><a href="#Applications">Applications</a>
<ul><li><a href="#ADMINOPTION-table">ADMINOPTION table</a></li>
<li><a href="#PAD-xml">PAD xml</a></li></ul></li>
<li><a href="#Administration-Links">Administration Links</a></li>
</ul>
</div></em></p>
<h2 id='Macros'>Macros</h2>
<p>All you need to know about macros is store in P_MACRO* tables. P_MACRO holds general macro info, including it&#8217;s name that is potential duplicate. EP developers must&#8217;ve overlooked the fact that macro name is case-sensitive from Administration Console point of view and case-insensitive from export deployment wizard&#8217;s point of view. So if you have two macros: copy_sales and copy_Sales, you&#8217;ll find out about this duplication only when you&#8217;ll try to export deployment.</p>
<p>Code checking for such situations is very straight-forward.</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> <span class="sy0">*</span> <span class="kw1">FROM</span> p_macro <span class="kw1">WHERE</span>
 <span class="kw1">LOWER</span><span class="br0">&#40;</span>rtrim<span class="br0">&#40;</span>ltrim<span class="br0">&#40;</span>macroname<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">IN</span>
 <span class="br0">&#40;</span>
 <span class="kw1">SELECT</span> <span class="kw1">LOWER</span><span class="br0">&#40;</span>rtrim<span class="br0">&#40;</span>ltrim<span class="br0">&#40;</span>macroname<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">FROM</span> P_MACRO
 <span class="kw1">GROUP</span> <span class="kw1">BY</span> <span class="kw1">LOWER</span><span class="br0">&#40;</span>rtrim<span class="br0">&#40;</span>ltrim<span class="br0">&#40;</span>macroname<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
 <span class="kw1">HAVING</span> <span class="kw1">COUNT</span> <span class="br0">&#40;</span><span class="sy0">*</span><span class="br0">&#41;</span> &amp;gt;<span class="nu0">1</span>
 <span class="br0">&#41;</span>
 <span class="kw1">ORDER</span> <span class="kw1">BY</span> <span class="kw1">LOWER</span><span class="br0">&#40;</span>rtrim<span class="br0">&#40;</span>ltrim<span class="br0">&#40;</span>macroname<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></pre></div></div></div></div></div></div></div>


<p>Found some duplicated macros this way, but the problem persisted.</p>
<p>Macros are also recorded in PAD xml (see below), but table approach is way easier.</p>
<h2 id='Applications'>Applications</h2>
<p>Applications pose a more interesting problem.</p>
<h3 id='ADMINOPTION-table'>ADMINOPTION table</h3>
<p>Most of the application details are stored in ADMINOPTION table of each applications scheme (Oracle) or database (Ms SQL Server). I wrote some time ago <a href="http://ykud.com/blog/cognos/cognos-8-ep-troubleshooting-import-data-from-package">about updating JVM options for Contibutor client via this table.</a> In my search for duplicates I was interested whether there are duplicate application ids or display names. So it made sense to query all adminoption tables at once.</p>
<p>Here&#8217;s a sample Oracle SQL script for such queries. It&#8217;s easy to replicate it for MS SQL server (seems that didn&#8217;t publish such examples as of yet, mail me if you need them).</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">CREATE</span> <span class="kw1">TABLE</span> temp
<span class="br0">&#40;</span>USR_NAME <span class="kw1">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">50</span><span class="br0">&#41;</span> <span class="kw1">NULL</span><span class="sy0">,</span>
OPTIONID <span class="kw1">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">250</span><span class="br0">&#41;</span> <span class="kw1">NULL</span><span class="sy0">,</span>
DESCRIPTION <span class="kw1">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">512</span><span class="br0">&#41;</span> <span class="kw1">NULL</span><span class="sy0">,</span>
OPTIONVALUE <span class="kw1">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">512</span><span class="br0">&#41;</span> <span class="kw1">NULL</span><span class="br0">&#41;</span>;
commit;
<span class="kw1">BEGIN</span>
  <span class="kw1">FOR</span> usr <span class="kw1">IN</span> <span class="br0">&#40;</span><span class="kw1">SELECT</span> owner <span class="kw1">FROM</span> all_tables
  <span class="kw1">WHERE</span> <span class="kw1">TABLE_NAME</span> <span class="sy0">=</span> <span class="st0">'ADMINOPTION'</span><span class="br0">&#41;</span>
  LOOP
  <span class="kw1">EXECUTE</span> IMMEDIATE <span class="st0">'INSERT INTO temp (usr_name, optionid, description, optionvalue)
  select '</span><span class="st0">''</span><span class="sy0">||</span> <span class="br0">&#40;</span>usr<span class="sy0">.</span>owner<span class="br0">&#41;</span> <span class="sy0">||</span><span class="st0">''</span><span class="st0">' USR_NAME, OPTIONID, DESCRIPTION, OPTIONVALUE from '</span> <span class="sy0">||</span> <span class="br0">&#40;</span>usr<span class="sy0">.</span>owner<span class="br0">&#41;</span> <span class="sy0">||</span><span class="st0">'.ADMINOPTION'</span> ;
  <span class="kw1">END</span> LOOP;
<span class="kw1">END</span>;
&nbsp;
<span class="co1">-- check for duplicate application_display_name</span>
<span class="kw1">SELECT</span> optionvalue<span class="sy0">,</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> temp
<span class="kw1">WHERE</span> optionid <span class="sy0">=</span> <span class="st0">'APP_DISPLAY_NAME'</span>
<span class="kw1">GROUP</span> <span class="kw1">BY</span> optionvalue
<span class="kw1">HAVING</span> <span class="kw1">COUNT</span> <span class="br0">&#40;</span><span class="sy0">*</span><span class="br0">&#41;</span> &amp;gt; <span class="nu0">1</span></pre></div></div></div></div></div></div></div>


<p>Strangely, such exercise showed me some duplicated names, but detaching those apps from PAD didn&#8217;t help, Export wizard was still complaining about duplicated apps.<br />
So I started SQL profiling to see what was really happening under the hood and was impressed by finding</p>
<h3 id='PAD-xml'>PAD xml</h3>
<p>Turns out, all application details are stored in an XML file located in P_PAD table. This file is actually huge and messy, but it contains some fields that are not available in ADMINOPTION table or Administration console output. Deep inside this file, applications are described like:</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="xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;applications<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;application</span> <span class="re0">id</span>=<span class="st0">&quot;{94BF5F99-E6AF-4D9C-BA63-E2303055296B}&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;go_capex_contributor&quot;</span> </span>
<span class="sc3"><span class="re0">objidref</span>=<span class="st0">&quot;obj_APPLICATION&quot;</span><span class="re2">&gt;</span><span class="re1">&lt;properties<span class="re2">&gt;</span></span><span class="re1">&lt;property</span> <span class="re0">propidref</span>=<span class="st0">&quot;pr_DATASTORE_CON_DOC&quot;</span><span class="re2">&gt;</span></span>
<span class="sc2">&lt;![CDATA[&lt;connection&gt;   </span>
<span class="sc2">...</span>
<span class="sc2">  &lt;applicationname&gt;    go_capex_contributor   &lt;/applicationname&gt;  </span>
<span class="sc2">&lt;/connection&gt;  ]]&gt;</span>
<span class="sc3"><span class="re1">&lt;/property<span class="re2">&gt;</span></span><span class="re1">&lt;property</span> <span class="re0">propidref</span>=<span class="st0">&quot;pr_DISPLAY_NAME&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[go_capex_contributor]]&gt;</span><span class="sc3"><span class="re1">&lt;/property<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;property</span> <span class="re0">propidref</span>=<span class="st0">&quot;pr_UNIQUE_ALIAS&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[test]]&gt;</span><span class="sc3"><span class="re1">&lt;/property<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/applications<span class="re2">&gt;</span></span></span></pre></div></div></div></div></div></div></div>


<p>And it turns out that the &#8216;name&#8217; property held duplicates in my case. Since manually extracting properties is tad too tedious for me, I wrote a simple python script that does exactly that. It&#8217;s not a complete solution, more an approach sample. I&#8217;m using <a href="http://pyparsing.wikispaces.com">pyparsing</a> as usual. <span id="more-712"></span></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="python"><pre class="de1"><span class="co1"># -*- coding: utf-8 -*-</span>
<span class="co1">#Function: Parses Cognos Enterprise Planning PAD contents file xml and extract all aplication unique names</span>
<span class="co1">#Usage: run python ep_pad_analyzer.py -i file_with_pad_contents -o output_csv_file</span>
<span class="co1">#Author: Yuri Kudryavcev email mail@ykud.com</span>
<span class="co1">#</span>
<span class="kw1">import</span> <span class="kw3">codecs</span>
<span class="kw1">import</span> <span class="kw3">csv</span>
<span class="kw1">import</span> <span class="kw3">os</span>
<span class="kw1">import</span> <span class="kw3">sys</span>
<span class="kw1">import</span> <span class="kw3">re</span>
<span class="kw1">import</span> <span class="kw3">string</span>
<span class="kw1">import</span> <span class="kw3">time</span>
<span class="kw1">import</span> <span class="kw3">getopt</span>
<span class="kw1">import</span> <span class="kw3">datetime</span>
<span class="kw1">from</span> pyparsing <span class="kw1">import</span> Word<span class="sy0">,</span> Literal<span class="sy0">,</span> OneOrMore<span class="sy0">,</span> nums<span class="sy0">,</span> Suppress<span class="sy0">,</span> SkipTo <span class="sy0">,</span>makeXMLTags<span class="sy0">,</span> alphas
&nbsp;
<span class="kw1">def</span> writeToLog<span class="br0">&#40;</span>message<span class="br0">&#41;</span>:
 <span class="kw1">print</span> <span class="br0">&#40;</span><span class="st0">'%s: %s'</span><span class="br0">&#41;</span>%<span class="br0">&#40;</span><span class="kw2">str</span><span class="br0">&#40;</span><span class="kw3">datetime</span>.<span class="kw3">datetime</span>.<span class="me1">now</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span> message<span class="br0">&#41;</span>
<span class="co1">#</span>
<span class="kw1">def</span> SafeFileOpen<span class="br0">&#40;</span>filename<span class="sy0">,</span>mode<span class="sy0">,</span>encoding<span class="br0">&#41;</span>:
 <span class="kw1">try</span>:
 <span class="kw3">fl</span><span class="sy0">=</span><span class="kw3">codecs</span>.<span class="kw2">open</span><span class="br0">&#40;</span>filename<span class="sy0">,</span>mode<span class="sy0">,</span>encoding<span class="sy0">,</span><span class="st0">'ignore'</span><span class="br0">&#41;</span>
 <span class="kw1">except</span> <span class="kw2">IOError</span>:
 <span class="kw1">print</span> <span class="st0">&quot;Cannot open file &quot;</span>+filename+<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>
 <span class="kw1">return</span> <span class="br0">&#40;</span>-<span class="nu0">1</span><span class="br0">&#41;</span>
 <span class="kw1">return</span> <span class="kw3">fl</span> 
<span class="co1">#</span>
<span class="kw1">def</span> main<span class="br0">&#40;</span>argv<span class="br0">&#41;</span>:
 <span class="st0">&quot;&quot;&quot;input format: python ep_pad_analyze.py -i c:<span class="es0">\p</span>ad.xml -o result.csv -l log_file.txt
&nbsp;
 Arguments:
 -i or --input file, grabbed from P_PAD table of Contributor Database
 -o or --output -- file for pad info csv format
 -l or --log log file
 -h or --help This message
 &quot;&quot;&quot;</span>
 WorkLogFile<span class="sy0">=</span><span class="st0">&quot;&quot;</span>
 LogDirectory<span class="sy0">=</span><span class="st0">&quot;&quot;</span>
 inFile <span class="sy0">=</span> <span class="st0">&quot;&quot;</span>
 OutDirectory<span class="sy0">=</span><span class="st0">&quot;&quot;</span>
 out_put_file <span class="sy0">=</span> <span class="st0">&quot;pad_applications.csv&quot;</span>
 <span class="co1"># getting command line arguments</span>
 <span class="kw1">try</span>:
 opts<span class="sy0">,</span> args <span class="sy0">=</span> <span class="kw3">getopt</span>.<span class="kw3">getopt</span><span class="br0">&#40;</span>argv<span class="sy0">,</span> <span class="st0">&quot;hi:o:l:&quot;</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st0">&quot;help&quot;</span><span class="sy0">,</span><span class="st0">&quot;input=&quot;</span><span class="sy0">,</span><span class="st0">&quot;output=&quot;</span><span class="sy0">,</span><span class="st0">&quot;log=&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
 <span class="kw1">except</span> <span class="kw3">getopt</span>.<span class="me1">GetoptError</span>:
 <span class="kw1">print</span> main.__doc__
 <span class="kw3">sys</span>.<span class="me1">exit</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span>
<span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span>argv<span class="br0">&#41;</span> <span class="sy0">&lt;=</span> <span class="nu0">1</span>:
 <span class="kw1">print</span> main.__doc__
 <span class="kw3">sys</span>.<span class="me1">exit</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span>
 <span class="kw1">for</span> opt<span class="sy0">,</span>arg <span class="kw1">in</span> opts:
 <span class="kw1">if</span> opt <span class="kw1">in</span> <span class="br0">&#40;</span><span class="st0">&quot;-h&quot;</span><span class="sy0">,</span><span class="st0">&quot;--help&quot;</span><span class="br0">&#41;</span>:
 <span class="kw1">print</span> main.__doc__
 <span class="kw3">sys</span>.<span class="me1">exit</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span>
 <span class="kw1">elif</span> opt <span class="kw1">in</span> <span class="br0">&#40;</span><span class="st0">&quot;-i&quot;</span><span class="sy0">,</span><span class="st0">&quot;--input&quot;</span><span class="br0">&#41;</span>:
 inFile <span class="sy0">=</span> arg
 <span class="kw1">elif</span> opt <span class="kw1">in</span> <span class="br0">&#40;</span><span class="st0">&quot;-o&quot;</span><span class="sy0">,</span><span class="st0">&quot;--output&quot;</span><span class="br0">&#41;</span>:
 out_put_file <span class="sy0">=</span> arg
 <span class="kw1">elif</span> opt <span class="kw1">in</span> <span class="br0">&#40;</span><span class="st0">&quot;-l&quot;</span><span class="sy0">,</span><span class="st0">&quot;--log&quot;</span><span class="br0">&#41;</span>:
 WorkLogFile <span class="sy0">=</span> arg
&nbsp;
 <span class="kw1">if</span> WorkLogFile<span class="sy0">==</span><span class="st0">&quot;&quot;</span>:WorkLogFile<span class="sy0">=</span><span class="st0">&quot;pad_analyze_log.txt&quot;</span>
 <span class="co1">#setting up logging</span>
 WorkLogFilefl <span class="sy0">=</span> SafeFileOpen<span class="br0">&#40;</span>WorkLogFile<span class="sy0">,</span><span class="st0">&quot;w&quot;</span><span class="sy0">,</span><span class="st0">'utf-8'</span><span class="br0">&#41;</span>
 out_put_fl <span class="sy0">=</span> SafeFileOpen<span class="br0">&#40;</span>out_put_file<span class="sy0">,</span><span class="st0">&quot;wb&quot;</span><span class="sy0">,</span><span class="st0">'utf-8-sig'</span><span class="br0">&#41;</span>
 <span class="co1">#backup_stdout = sys.stdout</span>
 <span class="co1">#backup_stderr = sys.stderr</span>
 <span class="co1">#sys.stdout = WorkLogFilefl</span>
 <span class="co1">#sys.stderr = WorkLogFilefl</span>
 english_chars <span class="sy0">=</span> u<span class="st0">''</span>.<span class="me1">join</span><span class="br0">&#40;</span><span class="kw2">unichr</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span> <span class="kw1">for</span> x <span class="kw1">in</span> <span class="kw2">xrange</span><span class="br0">&#40;</span><span class="nu0">0x041</span><span class="sy0">,</span> <span class="nu0">0x05B</span><span class="br0">&#41;</span><span class="br0">&#41;</span> + u<span class="st0">''</span>.<span class="me1">join</span><span class="br0">&#40;</span><span class="kw2">unichr</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span> <span class="kw1">for</span> x <span class="kw1">in</span> <span class="kw2">xrange</span><span class="br0">&#40;</span><span class="nu0">0x061</span><span class="sy0">,</span> <span class="nu0">0x07B</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
 application_unique_alias <span class="sy0">=</span> Suppress<span class="br0">&#40;</span><span class="st0">'property propidref=&quot;pr_DISPLAY_NAME&quot;&gt;&lt;![CDATA['</span><span class="br0">&#41;</span> + Word<span class="br0">&#40;</span>english_chars + nums +<span class="st0">' ()'</span> + <span class="st0">'_-'</span><span class="br0">&#41;</span> + Suppress<span class="br0">&#40;</span><span class="st0">']]&gt;&lt;/property&gt;'</span><span class="br0">&#41;</span>
 application_id <span class="sy0">=</span> Suppress<span class="br0">&#40;</span><span class="st0">'&lt;application id=&quot;{'</span><span class="br0">&#41;</span> + Word <span class="br0">&#40;</span>english_chars + nums + <span class="st0">'-'</span><span class="br0">&#41;</span>.<span class="me1">setResultsName</span><span class="br0">&#40;</span><span class="st0">&quot;application_id&quot;</span><span class="br0">&#41;</span> + Suppress<span class="br0">&#40;</span><span class="st0">'}&quot; name=&quot;'</span><span class="br0">&#41;</span> + Word<span class="br0">&#40;</span>english_chars+ <span class="st0">'_'</span><span class="br0">&#41;</span>.<span class="me1">setResultsName</span><span class="br0">&#40;</span><span class="st0">&quot;application_name&quot;</span><span class="br0">&#41;</span><span class="co1"># + SkipTo('&lt;applicationname&gt;') + '&lt;applicationname&gt;' + Word(alphas).setResultsName('datastore_app_name') + '&lt;/applicationname&gt;'</span>
 writeToLog<span class="br0">&#40;</span><span class="st0">&quot;Starting scanning.&quot;</span><span class="br0">&#41;</span>
 writeToLog<span class="br0">&#40;</span><span class="st0">&quot;Input file is: %s .Log file is: %s&quot;</span>%<span class="br0">&#40;</span>inFile<span class="sy0">,</span> WorkLogFile<span class="br0">&#41;</span><span class="br0">&#41;</span>
 <span class="kw3">fl</span> <span class="sy0">=</span> SafeFileOpen<span class="br0">&#40;</span>inFile<span class="sy0">,</span> <span class="st0">'r'</span><span class="sy0">,</span><span class="st0">'utf-8'</span><span class="br0">&#41;</span>
 contents <span class="sy0">=</span> <span class="kw3">fl</span>.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">encode</span><span class="br0">&#40;</span><span class="st0">'utf-8'</span><span class="br0">&#41;</span>
 <span class="kw1">for</span> x <span class="kw1">in</span> application_id.<span class="me1">searchString</span><span class="br0">&#40;</span>contents<span class="br0">&#41;</span>:
 <span class="kw1">print</span> x
 <span class="kw3">fl</span>.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
 <span class="co1">#closing up logging</span>
 out_put_fl.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
 WorkLogFilefl.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
 <span class="co1">#sys.stdout = backup_stdout</span>
 <span class="co1">#sys.stderr = backup_stderr</span>
<span class="co1"># </span>
<span class="kw1">if</span> __name__ <span class="sy0">==</span> <span class="st0">&quot;__main__&quot;</span>:
 <span class="co1">#main(sys.argv[1:])</span>
 main<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="st0">'-i'</span><span class="sy0">,</span><span class="st0">'pad.xml'</span><span class="br0">&#93;</span><span class="br0">&#41;</span></pre></div></div></div></div></div></div></div>


<h2 id='Administration-Links'>Administration Links</h2>
<p>There&#8217;s a P_INTERAPPLINK table in PAD, but it doesn&#8217;t contain link names, so it&#8217;s worthless for duplicate search. But you can use it for some reporting and finding connected applications.</p>
<p>But xml file mentioned above contains all you need, there&#8217;s a link description part that goes like this:</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="xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;links<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;link_instance</span> <span class="re0">id</span>=<span class="st0">&quot;{B4FC0A77-CD3F-4239-859C-FC4208539B77}&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;application_link_test&quot;</span></span>
<span class="sc3"> <span class="re0">objidref</span>=<span class="st0">&quot;obj_LINK_INSTANCE&quot;</span><span class="re2">&gt;</span><span class="re1">&lt;properties<span class="re2">&gt;</span></span><span class="re1">&lt;property</span> <span class="re0">propidref</span>=<span class="st0">&quot;pr_DISPLAY_NAME&quot;</span><span class="re2">&gt;</span></span><span class="sc2">&lt;![CDATA[application_link_test]]&gt;</span><span class="sc3"><span class="re1">&lt;/property<span class="re2">&gt;</span></span><span class="re1">&lt;/properties<span class="re2">&gt;</span></span></span>
....
<span class="sc3"><span class="re1">&lt;/links<span class="re2">&gt;</span></span></span></pre></div></div></div></div></div></div></div>


<p>So using the same approach as for applications works and you can find duplicated links without going through all of them in the PAD.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/ep/cognos-enterprise-planning-pad-contents-duplicate-entries-and-deployment-problems/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Analyzing lots of Cognos Enterprise Planning Application Links</title>
		<link>http://ykud.com/blog/cognos/analyzing-lots-of-cognos-enterprise-planning-application-links</link>
		<comments>http://ykud.com/blog/cognos/analyzing-lots-of-cognos-enterprise-planning-application-links#comments</comments>
		<pubDate>Wed, 16 Feb 2011 04:25:02 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep]]></category>
		<category><![CDATA[contributor]]></category>
		<category><![CDATA[scripts]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=502</guid>
		<description><![CDATA[Sometimes you find yourself with a full-blown EP model, containing a 100 or so Contributor Application links and you need to actually find what they do. Opening them one-by-one is very time-consuming. One of my colleagues stumbled in such situation, so I&#8217;ve made a quick script that processes application link export files (.cal ones) and [...]]]></description>
			<content:encoded><![CDATA[<div>Sometimes you find yourself with a full-blown EP model, containing a 100 or so Contributor Application links and you need to actually find what they do. Opening them one-by-one is very time-consuming. One of my colleagues stumbled in such situation, so I&#8217;ve made a quick script that processes application link export files (.cal ones) and records their steps metadata (what cubes and apps are connected) into a single csv file that you can analyze in Excel easily.</div>
<div>Result looks like this:</div>
<div>
<table border="1" cellspacing="0" cellpadding="0" width="635">
<tbody>
<tr>
<td width="69" valign="bottom">LinkName</td>
<td width="155" valign="bottom">SourceApplicationState</td>
<td width="110" valign="bottom">SourceApplication</td>
<td width="99" valign="bottom">SourceCube</td>
<td width="113" valign="bottom">TargetApplication</td>
<td width="89" valign="bottom">TargetCube</td>
</tr>
<tr>
<td width="69" valign="bottom">Link 1</td>
<td width="155" valign="bottom">DEVELOPMENT</td>
<td width="110" valign="bottom">source_app1</td>
<td width="99" valign="bottom">source_cube1</td>
<td width="113" valign="bottom">target_app</td>
<td width="89" valign="bottom">target_cube1</td>
</tr>
<tr>
<td width="69" valign="bottom">Link 1</td>
<td width="155" valign="bottom">DEVELOPMENT</td>
<td width="110" valign="bottom">source_app2</td>
<td width="99" valign="bottom">source_cube2</td>
<td width="113" valign="bottom">target_app</td>
<td width="89" valign="bottom">target_cube1</td>
</tr>
</tbody>
</table>
</div>
<div>How to use:</div>
<div>1) install <a href="http://www.python.org/download/releases/2.7/">python-2.7</a> (should work in 3, but I didn&#8217;t test).</div>
<div>2) download <a href="http://ykud.com/blog/wp-content/uploads/2011/02/eplinks.zip">script archive</a>, unzip it into a separate directory</div>
<div>3) from Contributor Administration Console export needed links into some directory (wish I knew how to automate this)</div>
<div>3) open command prompt, go to directory from 2) and run</div>


<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="dos"><pre class="de1">python eplinks.py -i directory_you_exported_links_to -o file_with_results.csv</pre></div></div></div></div></div></div></div>


<div>After a minute or so (depends on your links quantity and size) you&#8217;ll get your file complete.</div>
<div>You can monitor execution in epllinks_log.txt file.</div>
<div>PS:</div>
<div>It&#8217;s pretty easy to draw a picture of connected cubes out of it, note me if you&#8217;re interested.</div>
<div>PPS:</div>
<div>All hail to <a href="http://www.oreillynet.com/pub/au/2557">Paul McGuire</a>, author of <a href="http://pyparsing.wikispaces.com/">pyparsing</a>, that I&#8217;m using for this script and a much more complex application that does the same for all kinds of TM1 connections (rules and processes).</div>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/analyzing-lots-of-cognos-enterprise-planning-application-links/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cognos Enterprise Planning 10.1 is out</title>
		<link>http://ykud.com/blog/ep/cognos-enterprise-planning-10-1-is-out</link>
		<comments>http://ykud.com/blog/ep/cognos-enterprise-planning-10-1-is-out#comments</comments>
		<pubDate>Fri, 12 Nov 2010 15:04:52 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=472</guid>
		<description><![CDATA[What&#8217;s new Fix list Nothing revolutionary, performance improvements, fighting with Java-based Rich Client memory footprint and performance. Publishing enhancements seem interesting. Since BI upgrade is required as well, I&#8217;d wait for first couple of BI service packs before trying this one out.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www-01.ibm.com/common/ssi/cgi-bin/ssialias?infotype=AN&#038;subtype=CA&#038;htmlfid=897/ENUS210-349&#038;appname=USN">What&#8217;s new<br />
</a><br />
<a href="http://www-01.ibm.com/support/docview.wss?uid=swg27019176">Fix list</a></p>
<p>Nothing revolutionary, performance improvements, fighting with Java-based Rich Client memory footprint and performance. Publishing enhancements seem interesting.</p>
<p>Since BI upgrade is required as well, I&#8217;d wait for first couple of BI service packs before trying this one out.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/ep/cognos-enterprise-planning-10-1-is-out/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuring Ms SQL databases for Cognos Enterprise Planning</title>
		<link>http://ykud.com/blog/ep/configuring-ms-sql-databases-for-cognos-enterprise-planning</link>
		<comments>http://ykud.com/blog/ep/configuring-ms-sql-databases-for-cognos-enterprise-planning#comments</comments>
		<pubDate>Thu, 02 Sep 2010 14:14:12 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=389</guid>
		<description><![CDATA[Just a quick side note &#8212; I usually use simple recovery mode in Ms SQL installations because: application databases become inconsistent during administration tasks so having a backup of database in a middle of GTP crash doesn&#8217;t give you anything, you&#8217;ll have to roll back to GTP start time. So backing up before and after [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick side note &#8212; I usually use simple recovery mode in Ms SQL installations because:</p>
<ul>
<li>application databases become inconsistent during administration tasks so having a backup of database in a middle of GTP crash doesn&#8217;t give you anything, you&#8217;ll have to roll back to GTP start time. So backing up before and after administrative task is better.</li>
<li>publish databases are created via bulk load, which gets rather slow with full logging as log files grow very fast.</li>
</ul>
<p>In ideal situations, application databases should be in Full Recovery Mode not to lose contributor input and publish databases should be in Simple Recovery mode. But in most cases Simple Recovery Mode and daily backups suffice.</p>
<p>Because otherwise &#8212; and it&#8217;s oh so common situations &#8212; I arrive at the sites with planning databases occupying hundreds of Gb (no, really, I&#8217;ve seen another such case just yesterday).</p>
<p>Here&#8217;s a simple script that turns all planning databases (selected by cognos_ep prefix) into Simple Recovery Mode and then shrinks them.</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="tsql"><pre class="de1"><span class="kw1">USE</span> master;
&nbsp;
<span class="kw1">DECLARE</span> 
    DBNames <span class="kw1">CURSOR</span>
<span class="kw1">FOR</span>
    <span class="kw1">SELECT</span>
	  NAME 
    <span class="kw1">FROM</span> sysdatabases
<span class="kw1">where</span> name like <span class="st0">'cognos_ep%'</span>
&nbsp;
<span class="kw1">OPEN</span> DBNames
&nbsp;
<span class="kw1">DECLARE</span> @Name <span class="kw1">varchar</span><span class="br0">&#40;</span><span class="nu0">50</span><span class="br0">&#41;</span>
&nbsp;
<span class="kw1">FETCH</span> <span class="kw1">NEXT</span> <span class="kw1">FROM</span> DBNames
<span class="kw1">INTO</span> @Name
&nbsp;
<span class="kw1">WHILE</span> <span class="br0">&#40;</span><span class="kw2">@@FETCH_STATUS</span> <span class="sy0">&lt;&gt;</span> <span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span>
<span class="kw1">BEGIN</span>
	<span class="kw1">print</span> @Name
	<span class="kw1">exec</span> <span class="br0">&#40;</span><span class="st0">'ALTER DATABASE '</span><span class="sy0">+</span> @Name <span class="sy0">+</span> <span class="st0">' SET AUTO_SHRINK ON WITH NO_WAIT'</span><span class="br0">&#41;</span>
&nbsp;
	<span class="kw1">exec</span><span class="br0">&#40;</span><span class="st0">'ALTER DATABASE '</span> <span class="sy0">+</span>  @Name <span class="sy0">+</span> <span class="st0">' SET RECOVERY SIMPLE WITH NO_WAIT'</span><span class="br0">&#41;</span>
	<span class="kw1">exec</span><span class="br0">&#40;</span><span class="st0">'ALTER DATABASE '</span> <span class="sy0">+</span> @Name <span class="sy0">+</span> <span class="st0">' SET AUTO_SHRINK ON'</span><span class="br0">&#41;</span>
	<span class="kw1">exec</span><span class="br0">&#40;</span><span class="st0">'ALTER DATABASE '</span> <span class="sy0">+</span> @Name <span class="sy0">+</span><span class="st0">' SET RECOVERY SIMPLE'</span><span class="br0">&#41;</span> 
&nbsp;
    <span class="kw1">DBCC</span> SHR<span class="sy0">IN</span>KDATABASE<span class="br0">&#40;</span> @Name , <span class="nu0">0</span><span class="br0">&#41;</span>
&nbsp;
    <span class="kw1">FETCH</span> <span class="kw1">NEXT</span> <span class="kw1">FROM</span> DBNames
    <span class="kw1">INTO</span> @Name
&nbsp;
<span class="kw1">END</span>
&nbsp;
<span class="kw1">CLOSE</span> DBNames
<span class="kw1">DEALLOCATE</span> DBNames</pre></div></div></div></div></div></div></div>


<p><strong>And a bottom line: Worry about backups! Hire a DBA (setting up backups is a one day job &#8212; pay part-time)</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/ep/configuring-ms-sql-databases-for-cognos-enterprise-planning/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Back from winter-sleep</title>
		<link>http://ykud.com/blog/bicpm/back-from-winter-sleep</link>
		<comments>http://ykud.com/blog/bicpm/back-from-winter-sleep#comments</comments>
		<pubDate>Sun, 01 Mar 2009 09:04:38 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[BI&CPM]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep]]></category>
		<category><![CDATA[hyperion]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[cognos certification]]></category>
		<category><![CDATA[essbase]]></category>
		<category><![CDATA[tm1]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=176</guid>
		<description><![CDATA[Okay, it has been almost half-a-year (oh, dears) since the last decent post on this blog. Russian one has suffered as well, I must note. Reasons vary, but mostly it&#8217;s that I&#8217;ve been, you know, busy-busy. As I now start to reflect on it, it&#8217;s always a point of view thing and a question of [...]]]></description>
			<content:encoded><![CDATA[<p>Okay, it has been almost half-a-year (oh, dears) since the last decent post on this blog. Russian one has suffered as well, I must note.</p>
<p>Reasons vary, but mostly it&#8217;s that I&#8217;ve been, you know, busy-busy. As I now start to reflect on it, it&#8217;s always a point of view thing and a question of self-control and ability to say no )</p>
<p>But enough philosphy, brief recap on what happend while I was out &#8220;there&#8221; in real world. I&#8217;ll divide this into two parts (by vendors ))</p>
<p><span id="more-176"></span></p>
<h2>Big Blue</h2>
<p>Made some POCs in autumn, nothing that special (some neat integration, but not cognos-related). Carried on a couple of projects with  EP+BI typicalities. All in all, nothing that new.</p>
<p>BUT I&#8217;ve finally completed the other certification path there is at Cognos\IBM, notably, the &#8220;BI Professional&#8221; road. It&#8217;s a deal longer, as of now, you have to pass 3 &#8220;<a href="http://support.cognos.com/en/training/certification/role-based.html">role-based</a>&#8221; exams, 2 mandatory (Report Author and Metadata Model Developer) and one of you choice to get a chance of passing BI Pro exam. It&#8217;s used to coast 10k, which could be cut down to reasonable 200$ if you attended a Cognos Workshop (which costed 2,5k), but thanks to IBM that&#8217;s gone and now it&#8217;s 200$ from the start. Just opened certifications link and I&#8217;m, frankly, quite surprised with new IBM names for old Cognos certifications. According to this I&#8217;m:</p>
<ul>
<li>IBM Certified Designer &#8212; Cognos 8 BI Reports</li>
<li>IBM Certified Developer &#8212; Cognos 8 BI Metadata Models</li>
<li>IBM Certified Developer &#8212; Cognos 8 BI OLAP Models</li>
<li>IBM Certified Solution Expert &#8212; Cognos 8 BI</li>
</ul>
<p>and it turns out I was an</p>
<ul>
<li>IBM Certified Solution Expert &#8212; Cognos 8 Enterprise Planning</li>
</ul>
<p>instead of Cognos EP Professional.</p>
<p>Wording is something you cannot easily take from IBM ) Will put that list in about page, just to get more mail asking for exam questions.</p>
<p>Hint: In comparison with the old Modeler exam, current one is easier.</p>
<p>And in the first 2 months of this year we did a &#8220;nightmare-style&#8221; POC with EP + TM1 + BI, where I could finally get an idea of what TM1 really is and fully realize some ideas like incremental administration links and, therefore, &#8220;real-time&#8221; EP -&gt; TM1  data propagation. I&#8217;m planning to write about this in separate posts, though. And, boy, it was hard, and we flanked the final presentation due to me being ill and bla-bla, and I&#8217;m still recovering breath from this.</p>
<p>But enough about IBM, let&#8217;s turn to</p>
<h2>Oracle</h2>
<p>We&#8217;ve made a really nice billion-facts cube with our colleagues from &#8220;SportMaster&#8221; and talked about it in exceeding detail on <a href="http://www.oracleclub.ru/techforum/">Russian Oracle Technical Forum 2008 </a>and Oracle BI Forum 2009. Essbase turned out to be a good engine for this kind of task and the moment when it finally kicked-in on 100gb dataset will retain as one of best in 2008. The fact that one of dimensions was a million rows parent-child didn&#8217;t raise that much of a problem.</p>
<p>Moreover on another site we duly built dimension outline with around 30 mln members. Although duly is not the right word, &#8220;kicking and screaming&#8221; would be a better wording ) And the whole area of trying to tune something in underlying Berkeley DB is still open. But I must admit, an 8 gb outline file is really impressive.</p>
<p>So I&#8217;ve spent pretty much time toying around with essbase (except when I wasn&#8217;t with TM1)). And I&#8217;m also a Hyperion Essbase 9.3 Developer Certified Expert (I won&#8217;t enter Prometric for a while, I hope).</p>
<p>So it was a rather crowded time and I hope that nothing will stop me from blogging some details and future encounters. At least, I&#8217;d try my best to. Cheers to your patience, folks )</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/back-from-winter-sleep/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cognos EP Cut-down models</title>
		<link>http://ykud.com/blog/cognos/cognos-ep-cut-down-models</link>
		<comments>http://ykud.com/blog/cognos/cognos-ep-cut-down-models#comments</comments>
		<pubDate>Tue, 27 Jan 2009 11:16:46 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=172</guid>
		<description><![CDATA[Just a quick tip: read this cognoise thread thoroughly &#8212; really in-depth discussion.]]></description>
			<content:encoded><![CDATA[<p>Just a quick tip: read this <a href="http://www.cognoise.com/community/index.php?topic=5604.0">cognoise thread</a> thoroughly &#8212; really in-depth discussion.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-ep-cut-down-models/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cognos 8.4 is finally out</title>
		<link>http://ykud.com/blog/cognos/cognos-84-is-finally-out</link>
		<comments>http://ykud.com/blog/cognos/cognos-84-is-finally-out#comments</comments>
		<pubDate>Thu, 27 Nov 2008 09:16:30 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=166</guid>
		<description><![CDATA[Go check the download page. One wonders, what&#8217;s that 64-bit BI server is all about &#8212; they&#8217;ve really pushed the report server further, or that&#8217;s just compatability release.]]></description>
			<content:encoded><![CDATA[<p>Go check the <a href="http://support.cognos.com/supported/en/support/downloads/index.html">download page</a>.<br />
One wonders, what&#8217;s that 64-bit BI server is all about &#8212; they&#8217;ve really pushed the report server further, or that&#8217;s just compatability release.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-84-is-finally-out/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A couple of small, but oh-so vital Cognos Enterprise Planning Enchancements</title>
		<link>http://ykud.com/blog/analyst/a-couple-of-small-but-oh-so-vital-cognos-enterprise-planning-enchancements</link>
		<comments>http://ykud.com/blog/analyst/a-couple-of-small-but-oh-so-vital-cognos-enterprise-planning-enchancements#comments</comments>
		<pubDate>Thu, 11 Sep 2008 06:19:10 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[analyst]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep]]></category>
		<category><![CDATA[enchancements]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=150</guid>
		<description><![CDATA[Why am I writing this? Well, sometime it helped and we now have allocation tables in administration links. Although I&#8217;m sure my post didn&#8217;t have any impact, some deem hope remains I&#8217;m going to repost this into Communities and into Insight. And, maybe, we can create some noise by voting for these enchancements in Insight [...]]]></description>
			<content:encoded><![CDATA[<p>Why am I writing this?</p>
<p>Well, sometime it helped and we now have <a href="http://ykud.com/blog/cognos/more-on-contrib-aps">allocation tables</a> in administration links. Although I&#8217;m sure my post didn&#8217;t have any impact, some deem hope remains</p>
<p>I&#8217;m going to repost this into Communities and into Insight. And, maybe, we can create some noise by voting for these enchancements in Insight aka registering those enchancements again (they get piled up together, as I&#8217;ve found out).</p>
<p>Some those two echs are:</p>
<p>1) Easy as: &#8220;<strong>Add the ability to import Calculation Options and Weighting while importing a dlist</strong>&#8221;</p>
<p>If you&#8217;ve ever done some external dimension management, you know that:</p>
<p>- you have to use unique names to keep dlist IID the same when names (but not unique codes) of items change</p>
<p>- you can import formulas as calculation text, just put item names in curly brackets )</p>
<p>- if you use Update\Remove obsolete it always deletes all Calc Options and Weighting from dlist. That means that you cannot update any cacluation dimensions, such as Accounts. </p>
<p>So you manage all simlple dimensions by updating them (with Remove Obsolete selected) and unique names, and you manage all dimensions with weighting by <strong>manually changing them</strong>. </p>
<p>Shouldn&#8217;t be like that.</p>
<p>2) Even simpler: <strong>Add a Contributor macro for importing translations</strong></p>
<p>It seems weird to have a single table with translations for Cognos BI and then to manually (or semi-automatically by text import) copy it into Contirbutor application. Shouldn&#8217;t be hard, ability to import translation text is already there, just need a macro step</p>
<p>3) And another one (maybe no one will notice): <strong>Import deployment packages as a macro step too</strong>  </p>
<p>Automating dev-prod. backup-restore &#8212; all those things that should be automagical</p>
<p> </p>
<p>So, if these things annoy you as well &#8212; drop me a line, and I&#8217;ll send you Cognos Insight ench numbers to vote for.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/analyst/a-couple-of-small-but-oh-so-vital-cognos-enterprise-planning-enchancements/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Cognos Planning is finally out</title>
		<link>http://ykud.com/blog/bicpm/new-cognosplanning-is-finally-out</link>
		<comments>http://ykud.com/blog/bicpm/new-cognosplanning-is-finally-out#comments</comments>
		<pubDate>Thu, 31 Jul 2008 19:53:07 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[BI&CPM]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[ep]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=146</guid>
		<description><![CDATA[With so-long waited new Contributor client, with expand\collapse and nest dimensions features. And a lot, lot more. ActiveX free ) Actually, as long as I&#8217;m with cognos ep (since adaytum 2.4), contributor was always the same good-old-rigid tool, so it&#8217;s a revolution indeed. Well, with a huge lot of bugs inside, it&#8217;s time, gentlemen, to [...]]]></description>
			<content:encoded><![CDATA[<p>With so-long waited new Contributor client, with expand\collapse and nest dimensions features. And a lot, lot more. ActiveX free ) Actually, as long as I&#8217;m with cognos ep (since adaytum 2.4), contributor was always the same good-old-rigid tool, so it&#8217;s a revolution indeed.</p>
<p>Well, with a huge lot of bugs inside, it&#8217;s time, gentlemen, to power up virtual machines and start testing it all over. We need to log on maximum of bugs before sp1.</p>
<p>New enterprise planning goes under Cognos 8.4 (BI version was out a month earlier), and this minor number increase doesn&#8217;t reflect the amount of changes. They&#8217;d better start it of with 9.0 it seems. </p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/new-cognosplanning-is-finally-out/feed</wfw:commentRss>
		<slash:comments>1</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>
	</channel>
</rss>

