<?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; bi</title>
	<atom:link href="http://ykud.com/blog/category/cognos/bi/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 Content Store Security Overview in SQL</title>
		<link>http://ykud.com/blog/cognos/cognos-content-store-security-overview-in-sql</link>
		<comments>http://ykud.com/blog/cognos/cognos-content-store-security-overview-in-sql#comments</comments>
		<pubDate>Mon, 23 Jan 2012 04:22:32 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=785</guid>
		<description><![CDATA[Ever found yourself wondering what users are really there in your BI Consumers or any other group? Sure, you&#8217;ve got a few of them explicitly listed there (bad practice) but mostly you&#8217;ve got just a list of other groups like “Western Division”, “Marketing” and all those (good practice). And they&#8217;re, most likely, nested into each [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ykud.com/blog/wp-content/uploads/2012/01/looking_in_box.jpg"><img class="alignleft  wp-image-784" title="looking_in_box" src="http://ykud.com/blog/wp-content/uploads/2012/01/looking_in_box-253x300.jpg" alt="" width="202" height="240" /></a>Ever found yourself wondering what users are really there in your BI Consumers or any other group? Sure, you&#8217;ve got a few of them explicitly listed there (bad practice) but mostly you&#8217;ve got just a list of other groups like “Western Division”, “Marketing” and all those (good practice). And they&#8217;re, most likely, nested into each other a few times (like Western Division OpEx and Marketing Asia).  Or, looking at it from totally other point of view — what groups Jack Smith is really in (again, with all these nesting ones)? Is he a member of Western Division or what?</p>
<p>&nbsp;</p>
<p>Built-in Cognos Security administration is quite awkward (compared to so long gone Access Manager, sigh), so questions like above are so frequent. There are 3 main solutions:</p>
<p>1) Buy an externally developed tool from <a href="http://www.bspsoftware.com/Products/tabid/58/Default.aspx">BSP</a> or <a href="http://www.motio.com/products.do">Motio</a>. I had a chance to look at BSP MetaManager recently and it does a whole lot of stuff to make your administration life easy. Bit of an overkill to just ask “who&#8217;s there”, but totally worth it if you&#8217;re going big scale \ long term.</p>
<p>2) Buy an SDK license and use the <a href="http://www-01.ibm.com/support/docview.wss?uid=swg21335670">sample script from IBM</a> as a base and extend it just for this task and then use SDK left and right to do anything you want in Cognos. If you have an SDK license through some global license deal — the sample script maybe just what you need to get the job done.</p>
<p>3) Write SQL queries to Content Store database to return just this info. It&#8217;s an unsupported (I&#8217;ll even stress this) <strong>unsupported</strong> way of doing it, but if you just want to have a quick look or are happy to loose it at some upgrade point (although it works on both 8.4 and 10.1, CS database schema isn&#8217;t changing that much), here are the scripts for both MS SQL Server and Oracle.</p>
<p>&nbsp;</p>
<p>I used the script from <a href="http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&amp;tid=910911&amp;msg=11929173">this SQL.RU topic</a> as a base and added group nesting unwrapping with Connect By in Oracle and CTE&#8217;s in SQL Server. You can turn this SQL into FM query subject and have a nifty report.</p>
<div id='toc' class='post-785'><div id='toc_title'></div>
<ul><li><a href="#Oracle">Oracle</a></li>
<li><a href="#MS-SQL-Server">MS SQL Server</a></li>
</ul>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span id="more-785"></span></p>
<h3 id='Oracle'>Oracle</h3>
<p>&nbsp;</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="kw1">DISTINCT</span> parent_group_id<span class="sy0">,</span>
                  group_info<span class="sy0">.</span>name group_name<span class="sy0">,</span>
                  user_info<span class="sy0">.</span>ldap_id<span class="sy0">,</span>
                  user_info<span class="sy0">.</span>last_name<span class="sy0">,</span>
                  user_info<span class="sy0">.</span>first_name<span class="sy0">,</span>
                  user_info<span class="sy0">.</span>email<span class="sy0">,</span>
                  user_info<span class="sy0">.</span>user_id
                  <span class="kw1">FROM</span>
    <span class="br0">&#40;</span> <span class="co1">--unwrapping groups and roles hierarchy, by recursively connecting all child roles or groups to parent</span>
    <span class="kw1">SELECT</span> rel<span class="sy0">.</span>cmid parent_group_id<span class="sy0">,</span> grp<span class="sy0">.</span>cmid child_group_id  <span class="kw1">FROM</span>
    cmreford1 rel<span class="sy0">,</span> cmobjects grp
    <span class="kw1">WHERE</span>
    rel<span class="sy0">.</span>refcmid <span class="sy0">=</span> grp<span class="sy0">.</span>cmid
   <span class="kw1">AND</span> grp<span class="sy0">.</span>classid <span class="kw1">IN</span> <span class="br0">&#40;</span><span class="nu0">26</span><span class="sy0">,</span> <span class="nu0">54</span><span class="br0">&#41;</span> <span class="co1">-- groups and roles</span>
    <span class="kw1">CONNECT</span> <span class="kw1">BY</span> PRIOR  rel<span class="sy0">.</span>cmid <span class="sy0">=</span> grp<span class="sy0">.</span>cmid
    <span class="co1">-- adding groups that just have users directly without any parent groups</span>
    <span class="kw1">UNION</span> <span class="kw1">ALL</span>
    <span class="kw1">SELECT</span> rel<span class="sy0">.</span>cmid parent_group_id<span class="sy0">,</span> rel<span class="sy0">.</span>cmid child_group_id  <span class="kw1">FROM</span>
    cmreford1 rel<span class="sy0">,</span> cmobjects grp
    <span class="kw1">WHERE</span>
    rel<span class="sy0">.</span>refcmid <span class="sy0">=</span> grp<span class="sy0">.</span>cmid
    <span class="co1">-- users</span>
   <span class="kw1">AND</span> grp<span class="sy0">.</span>classid <span class="kw1">IN</span> <span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span>
   <span class="co1">-- no parents</span>
   <span class="kw1">AND</span> rel<span class="sy0">.</span>cmid <span class="kw1">NOT</span> <span class="kw1">IN</span>
   <span class="br0">&#40;</span>
    <span class="kw1">SELECT</span> rel<span class="sy0">.</span>refcmid child_group_id  <span class="kw1">FROM</span>
    cmreford1 rel
   <span class="br0">&#41;</span>
    <span class="br0">&#41;</span> grp_unwrapped<span class="sy0">,</span>
    cmreford1 user_group_relation<span class="sy0">,</span>
    <span class="br0">&#40;</span> <span class="co1">-- user information</span>
    <span class="kw1">SELECT</span> c33<span class="sy0">.</span>cmid user_id<span class="sy0">,</span> c33<span class="sy0">.</span>NAME <span class="kw1">AS</span> ldap_id<span class="sy0">,</span>
                     c1<span class="sy0">.</span>surname last_name<span class="sy0">,</span> c1<span class="sy0">.</span>givenname first_name<span class="sy0">,</span>
                     c1<span class="sy0">.</span>email email<span class="sy0">,</span> c1<span class="sy0">.</span>objid
               <span class="kw1">FROM</span> cmobjprops1 c1
               <span class="kw1">LEFT</span> <span class="kw1">JOIN</span> cmobjprops33 c33 <span class="kw1">ON</span> c33<span class="sy0">.</span>cmid <span class="sy0">=</span> c1<span class="sy0">.</span>cmid
               <span class="kw1">UNION</span>
               <span class="kw1">SELECT</span> cmobjprops1<span class="sy0">.</span>cmid user_id<span class="sy0">,</span> cmobjprops33<span class="sy0">.</span>NAME <span class="kw1">AS</span> ldap_id<span class="sy0">,</span>
                      cmobjprops1<span class="sy0">.</span>surname last_name<span class="sy0">,</span>
                      cmobjprops1<span class="sy0">.</span>givenname first_name<span class="sy0">,</span> cmobjprops1<span class="sy0">.</span>email<span class="sy0">,</span>
                      cmobjprops1<span class="sy0">.</span>objid
                 <span class="kw1">FROM</span> cmobjprops1<span class="sy0">,</span> cmobjprops33
                 <span class="kw1">WHERE</span> cmobjprops1<span class="sy0">.</span>cmid <span class="sy0">=</span> cmobjprops33<span class="sy0">.</span>cmid
             <span class="br0">&#41;</span> user_info<span class="sy0">,</span>
    <span class="br0">&#40;</span> <span class="co1">-- group_information</span>
      <span class="kw1">SELECT</span> cmobjnames<span class="sy0">.</span>cmid cmid<span class="sy0">,</span> cmobjnames<span class="sy0">.</span>NAME <span class="kw1">AS</span> NAME<span class="sy0">,</span>
                    cmobjects<span class="sy0">.</span>created created<span class="sy0">,</span> cmobjects<span class="sy0">.</span>modified modified<span class="sy0">,</span>
                    cmobjects<span class="sy0">.</span>disabled disabled<span class="sy0">,</span>
                    cmobjects<span class="sy0">.</span>classid
               <span class="kw1">FROM</span> cmobjects<span class="sy0">,</span> cmobjnames
               <span class="kw1">WHERE</span> cmobjects<span class="sy0">.</span>cmid <span class="sy0">=</span> cmobjnames<span class="sy0">.</span>cmid
                    <span class="kw1">AND</span> cmobjects<span class="sy0">.</span>classid <span class="kw1">IN</span> <span class="br0">&#40;</span><span class="nu0">26</span><span class="sy0">,</span> <span class="nu0">54</span><span class="br0">&#41;</span>
                     <span class="co1">--search in english groupnames only, remove this filter to search any language</span>
                     <span class="kw1">AND</span>  cmobjnames<span class="sy0">.</span>mapdlocaleid <span class="sy0">=</span> <span class="nu0">24</span>
    <span class="br0">&#41;</span> group_info
  <span class="kw1">WHERE</span> <span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">=</span><span class="nu0">1</span><span class="br0">&#41;</span>
  <span class="kw1">AND</span> user_group_relation<span class="sy0">.</span>cmid <span class="sy0">=</span> grp_unwrapped<span class="sy0">.</span>child_group_id
  <span class="kw1">AND</span> user_group_relation<span class="sy0">.</span>refcmid <span class="sy0">=</span> user_info<span class="sy0">.</span>user_id
  <span class="kw1">AND</span> group_info<span class="sy0">.</span>cmid <span class="sy0">=</span> grp_unwrapped<span class="sy0">.</span>parent_group_id
&nbsp;
<span class="co1">-- add your filters here</span>
<span class="co1">-- search by group name like</span>
&nbsp;
<span class="kw1">AND</span> group_info<span class="sy0">.</span>name <span class="kw1">LIKE</span> <span class="st0">'%Planning%Users%'</span>
&nbsp;
<span class="co1">-- or search by user name like</span>
 <span class="co1">-- and user_info.ldap_id like '%Jack%Smith%'</span></pre></div></div></div></div></div></div></div>


<p>&nbsp;</p>
<h3 id='MS-SQL-Server'>MS SQL Server</h3>
<p>&nbsp;</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> groups_unwrapped <span class="br0">&#40;</span>parent_group_id<span class="sy0">,</span> child_group_id<span class="sy0">,</span> lvl<span class="br0">&#41;</span>
<span class="kw1">AS</span>
<span class="br0">&#40;</span>
<span class="kw1">SELECT</span> rel<span class="sy0">.</span>cmid parent_group_id<span class="sy0">,</span> grp<span class="sy0">.</span>cmid child_group_id<span class="sy0">,</span> <span class="nu0">0</span> lvl <span class="kw1">FROM</span>
cmreford1 rel<span class="sy0">,</span> cmobjects grp
<span class="kw1">WHERE</span>
rel<span class="sy0">.</span>refcmid <span class="sy0">=</span> grp<span class="sy0">.</span>cmid
<span class="kw1">AND</span> grp<span class="sy0">.</span>classid <span class="kw1">IN</span> <span class="br0">&#40;</span><span class="nu0">26</span><span class="sy0">,</span> <span class="nu0">54</span><span class="br0">&#41;</span>
<span class="co1">-- highest ranking groups, without any parents for anchor expression</span>
<span class="kw1">AND</span> rel<span class="sy0">.</span>cmid <span class="kw1">NOT</span> <span class="kw1">IN</span>
<span class="br0">&#40;</span><span class="kw1">SELECT</span> grp<span class="sy0">.</span>cmid child_group_id <span class="kw1">FROM</span>
cmreford1 rel<span class="sy0">,</span> cmobjects grp
<span class="kw1">WHERE</span>
rel<span class="sy0">.</span>refcmid <span class="sy0">=</span> grp<span class="sy0">.</span>cmid
<span class="kw1">AND</span> grp<span class="sy0">.</span>classid <span class="kw1">IN</span> <span class="br0">&#40;</span><span class="nu0">26</span><span class="sy0">,</span> <span class="nu0">54</span><span class="br0">&#41;</span>
<span class="br0">&#41;</span>
<span class="kw1">UNION</span> <span class="kw1">ALL</span>
<span class="kw1">SELECT</span> rel<span class="sy0">.</span>cmid parent_group_id<span class="sy0">,</span> grp<span class="sy0">.</span>cmid child_group_id<span class="sy0">,</span> lvl <span class="sy0">+</span> <span class="nu0">1</span> <span class="kw1">FROM</span>
cmreford1 rel<span class="sy0">,</span> cmobjects grp<span class="sy0">,</span> groups_unwrapped unwp
<span class="kw1">WHERE</span>
rel<span class="sy0">.</span>refcmid <span class="sy0">=</span> grp<span class="sy0">.</span>cmid
<span class="kw1">AND</span> grp<span class="sy0">.</span>classid <span class="kw1">IN</span> <span class="br0">&#40;</span><span class="nu0">26</span><span class="sy0">,</span> <span class="nu0">54</span><span class="br0">&#41;</span>
<span class="kw1">AND</span> rel<span class="sy0">.</span>CMID <span class="sy0">=</span> unwp<span class="sy0">.</span>child_group_id
<span class="br0">&#41;</span>
<span class="kw1">SELECT</span> <span class="kw1">DISTINCT</span> parent_group_id<span class="sy0">,</span>
group_info<span class="sy0">.</span>name group_name<span class="sy0">,</span>
user_info<span class="sy0">.</span>ldap_id<span class="sy0">,</span>
user_info<span class="sy0">.</span>last_name<span class="sy0">,</span>
user_info<span class="sy0">.</span>first_name<span class="sy0">,</span>
user_info<span class="sy0">.</span>email<span class="sy0">,</span>
user_info<span class="sy0">.</span>user_id
<span class="kw1">FROM</span>
<span class="br0">&#40;</span>
<span class="kw1">SELECT</span> <span class="sy0">*</span> <span class="kw1">FROM</span> groups_unwrapped
<span class="co1">-- adding just groups with users, without parents</span>
<span class="kw1">UNION</span> <span class="kw1">ALL</span>
<span class="kw1">SELECT</span> rel<span class="sy0">.</span>cmid parent_group_id<span class="sy0">,</span> rel<span class="sy0">.</span>cmid child_group_id<span class="sy0">,</span> <span class="nu0">0</span> lvl <span class="kw1">FROM</span>
 cmreford1 rel<span class="sy0">,</span> cmobjects grp
 <span class="kw1">WHERE</span>
 rel<span class="sy0">.</span>refcmid <span class="sy0">=</span> grp<span class="sy0">.</span>cmid
 <span class="co1">-- users</span>
 <span class="kw1">AND</span> grp<span class="sy0">.</span>classid <span class="kw1">IN</span> <span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span>
 <span class="co1">-- without any parent groups</span>
 <span class="kw1">AND</span> rel<span class="sy0">.</span>cmid <span class="kw1">NOT</span> <span class="kw1">IN</span>
 <span class="br0">&#40;</span><span class="kw1">SELECT</span> rel<span class="sy0">.</span>refcmid child_group_id <span class="kw1">FROM</span>
 cmreford1 rel
 <span class="br0">&#41;</span>
<span class="br0">&#41;</span>
grp_unwrapped<span class="sy0">,</span>
cmreford1 user_group_relation<span class="sy0">,</span>
<span class="br0">&#40;</span> <span class="co1">-- user information</span>
<span class="kw1">SELECT</span> c33<span class="sy0">.</span>cmid user_id<span class="sy0">,</span> c33<span class="sy0">.</span>NAME <span class="kw1">AS</span> ldap_id<span class="sy0">,</span>
c1<span class="sy0">.</span>surname last_name<span class="sy0">,</span> c1<span class="sy0">.</span>givenname first_name<span class="sy0">,</span>
c1<span class="sy0">.</span>email email<span class="sy0">,</span> c1<span class="sy0">.</span>objid
<span class="kw1">FROM</span> cmobjprops1 c1
<span class="kw1">LEFT</span> <span class="kw1">JOIN</span> cmobjprops33 c33 <span class="kw1">ON</span> c33<span class="sy0">.</span>cmid <span class="sy0">=</span> c1<span class="sy0">.</span>cmid
<span class="kw1">UNION</span>
<span class="kw1">SELECT</span> cmobjprops1<span class="sy0">.</span>cmid user_id<span class="sy0">,</span> cmobjprops33<span class="sy0">.</span>NAME <span class="kw1">AS</span> ldap_id<span class="sy0">,</span>
cmobjprops1<span class="sy0">.</span>surname last_name<span class="sy0">,</span>
cmobjprops1<span class="sy0">.</span>givenname first_name<span class="sy0">,</span> cmobjprops1<span class="sy0">.</span>email<span class="sy0">,</span>
cmobjprops1<span class="sy0">.</span>objid
<span class="kw1">FROM</span> cmobjprops1<span class="sy0">,</span> cmobjprops33
<span class="kw1">WHERE</span> cmobjprops1<span class="sy0">.</span>cmid <span class="sy0">=</span> cmobjprops33<span class="sy0">.</span>cmid
<span class="br0">&#41;</span> user_info<span class="sy0">,</span>
<span class="br0">&#40;</span> <span class="co1">-- group_information</span>
<span class="kw1">SELECT</span> cmobjnames<span class="sy0">.</span>cmid cmid<span class="sy0">,</span> cmobjnames<span class="sy0">.</span>NAME <span class="kw1">AS</span> NAME<span class="sy0">,</span>
cmobjects<span class="sy0">.</span>created created<span class="sy0">,</span> cmobjects<span class="sy0">.</span>modified modified<span class="sy0">,</span>
cmobjects<span class="sy0">.</span>disabled disabled<span class="sy0">,</span>
cmobjects<span class="sy0">.</span>classid
<span class="kw1">FROM</span> cmobjects<span class="sy0">,</span> cmobjnames
<span class="kw1">WHERE</span> cmobjects<span class="sy0">.</span>cmid <span class="sy0">=</span> cmobjnames<span class="sy0">.</span>cmid
<span class="kw1">AND</span> cmobjects<span class="sy0">.</span>classid <span class="kw1">IN</span> <span class="br0">&#40;</span><span class="nu0">26</span><span class="sy0">,</span> <span class="nu0">54</span><span class="br0">&#41;</span>
<span class="co1">--search in english groupnames only, remove this filter to search any language</span>
<span class="kw1">AND</span> cmobjnames<span class="sy0">.</span>mapdlocaleid <span class="sy0">=</span> <span class="nu0">24</span>
<span class="br0">&#41;</span> group_info
<span class="kw1">WHERE</span> <span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">=</span><span class="nu0">1</span><span class="br0">&#41;</span>
<span class="kw1">AND</span> user_group_relation<span class="sy0">.</span>cmid <span class="sy0">=</span> grp_unwrapped<span class="sy0">.</span>child_group_id
<span class="kw1">AND</span> user_group_relation<span class="sy0">.</span>refcmid <span class="sy0">=</span> user_info<span class="sy0">.</span>user_id
<span class="kw1">AND</span> group_info<span class="sy0">.</span>cmid <span class="sy0">=</span> grp_unwrapped<span class="sy0">.</span>parent_group_id
&nbsp;
<span class="co1">-- add your filters here</span>
<span class="co1">-- search by group name like</span>
&nbsp;
<span class="kw1">AND</span> group_info<span class="sy0">.</span>name <span class="kw1">LIKE</span> <span class="st0">'%Consumer%'</span>
&nbsp;
<span class="co1">-- or search by user name like</span>
<span class="co1">-- and user_info.ldap_id like '%Jack%'</span></pre></div></div></div></div></div></div></div>


]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-content-store-security-overview-in-sql/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cognos BI SDK revisited</title>
		<link>http://ykud.com/blog/cognos/cognos-bi-sdk-revisited</link>
		<comments>http://ykud.com/blog/cognos/cognos-bi-sdk-revisited#comments</comments>
		<pubDate>Sun, 09 Oct 2011 19:22:09 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[cognos sdk]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=690</guid>
		<description><![CDATA[After, oh my god, 4 years, I&#8217;ve spent a couple of days typing Cognos 10 SDK Java code. What changed in BI automating during this period? Well, the biggest change was trivial: I&#8217;ve forgot everything But that turned out to be good news, since version 8.3 to version 10 changes are huge. I remember reading SDK [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ykud.com/blog/wp-content/uploads/2011/10/owl-and-computer-640.jpg"><img class="alignleft size-medium wp-image-697" title="owl and computer 640" src="http://ykud.com/blog/wp-content/uploads/2011/10/owl-and-computer-640-225x300.jpg" alt="" width="225" height="300" /></a>After, oh my god, <a href="http://ykud.com/blog/cognos/security-in-cognos-83">4 years</a>, I&#8217;ve spent a couple of days typing Cognos 10 SDK Java code. What changed in BI automating during this period?</p>
<div>Well, the biggest change was trivial: I&#8217;ve forgot everything <img src='http://ykud.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </div>
<p>But that turned out to be good news, since version 8.3 to version 10 changes are huge. I remember reading SDK Developer Guide overnight for 8.3, but now it&#8217;s 3,500+ pages long! As it turns out, you can still read all the needed stuff in a short time period, but understanding what to read is a challenge.</p>
<p>So it&#8217;s best to start with <a href="http://www.ibm.com/developerworks/data/library/cognos/development/how_to/page129.html">this proven practice article</a>, providing some kind of helicopter view of what can be achieved by what parts of SDK.</p>
<div>Also take a look on <a href="http://www.biprofessional.com/tag/cognos-sdk/">this 4 part blog series</a> by Peter Beck of <a href="http://www.biprofessional.com/">BI Professional</a> site.</div>
<p>From there, I suggest you dive into sdk\samples folder and look through the code provided there. However complicated it may look, it&#8217;s actually way more integrated than any Knowledge Base\Technote code sample you can download, since extending those turns into rewriting the built-in samples functionality. Trust me on this, I&#8217;ve spent half a day doing exactly that before giving up and building upon existing samples.</p>
<p>Where to look when you&#8217;re stuck trying to understand a code piece or function? I used javadoc generated documentation instead of Developer Guide, because it&#8217;s Java-specific. I used Developer Guide just like an overall Class&amp;Methods reference.</p>
<div>As for packing samples content: minimum required set for content store manipulation (add\remove group, members etc) is (all paths are from sdk\java\):</div>
<div>Common\CRNConnect.java &#8212; connecting to Cognos Services</div>
<div>Secuity\Logon.java &#8212; you&#8217;re not using Anonymous  logon, do you?</div>
<div>HandlerCS\CSHandler.java &#8212; all Content store manipulation wrap-ups</div>
<p>Some more SDK sample links:</p>
<p><a href="http://www.cognoise.com/community/index.php?board=77.0">Cognoise SDK for Cognos 8 forum</a></p>
<p><a href="http://www.cognoise.com/community/index.php?board=136.0">Cognoise SDK for Cognos 10 forum</a></p>
<p><a href="http://www.ibm.com/search/csass/search?sn=mh&amp;q=cognos%20sdk&amp;lang=en&amp;cc=us&amp;en=utf">IBM SDK-related articles and Technotes</a></p>
<p>&nbsp;</p>
<p>PS: It&#8217;s funny, I&#8217;ve wrote both <a href="http://ykud.com/blog/cognos/tm1-cognos/stress-testing-tm1-models">TM1 Java API code</a> and BI 10 SDK in last three months ) Can&#8217;t think about any combined methods that&#8217;d be useful. Any ideas?</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-bi-sdk-revisited/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using session variables in Cognos BI</title>
		<link>http://ykud.com/blog/ibm/using-session-variables-in-cognos-bi</link>
		<comments>http://ykud.com/blog/ibm/using-session-variables-in-cognos-bi#comments</comments>
		<pubDate>Mon, 22 Aug 2011 15:52:14 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[etl]]></category>
		<category><![CDATA[ibm]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=676</guid>
		<description><![CDATA[Just a quick Cognos BI hint: you can use session variables to store project-level constant values. I&#8217;m a big fan of &#8216;feature-rich&#8217; ETL reports showing not only what dimension element mismatch between systems, but also allowing seamless editing of element mapping. This usually means drilling down from report into external application for dimension mapping. Parameters [...]]]></description>
			<content:encoded><![CDATA[<div>
<p><a href="http://ykud.com/blog/wp-content/uploads/2011/08/owl_wink.jpg"><img class="alignleft size-medium wp-image-677" title="owl_wink" src="http://ykud.com/blog/wp-content/uploads/2011/08/owl_wink-300x233.jpg" alt="" width="126" height="98" /></a>Just a quick Cognos BI hint: you can use session variables to store project-level constant values.</p>
</div>
<div>I&#8217;m a big fan of &#8216;feature-rich&#8217; ETL reports showing not only what dimension element mismatch between systems, but also allowing seamless editing of element mapping. This usually means drilling down from report into external application for dimension mapping. Parameters are usually passed via URL (easiest possible way).</div>
<div>After server name and, therefore, URL changed for a second time in current project, I&#8217;ve set up a project level &#8216;severname&#8217; constant to avoid XML find\replace for each report.</div>
<div>It&#8217;s really easy:</div>
<p>1) Add a session variable to your Framework project, write your required constant value there. Like &#8216;servername&#8217; = &#8216;awesomebi&#8217;</p>
<p>2) Use it in Report Studio, just type</p>
<p>#sq($variable_name)#</p>
<p>in expression editor. sq encloses string in single quotes.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/ibm/using-session-variables-in-cognos-bi/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cognos BI OLAP querying</title>
		<link>http://ykud.com/blog/cognos/cognos-bi-olap-querying</link>
		<comments>http://ykud.com/blog/cognos/cognos-bi-olap-querying#comments</comments>
		<pubDate>Fri, 19 Aug 2011 16:10:42 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[essbase]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=660</guid>
		<description><![CDATA[Sometimes it&#8217;s best to be late with fulfilling promises. Was I to write this post a month earlier, I wouldn&#8217;t be able to give people using Cognos BI with Microsoft Analysis Services and Oracle Essbase a life-saving advice. At least, the advice that I&#8217;d be really grateful a couple of years ago. &#160; A month [...]]]></description>
			<content:encoded><![CDATA[<div><a href="http://ykud.com/blog/wp-content/uploads/2011/08/sisyphus.jpg"><img class="alignleft size-medium wp-image-661" title="sisyphus" src="http://ykud.com/blog/wp-content/uploads/2011/08/sisyphus-300x244.jpg" alt="" width="210" height="171" /></a>Sometimes it&#8217;s best to be late with fulfilling promises. Was I to write this post a month earlier, I wouldn&#8217;t be able to give people using Cognos BI with Microsoft Analysis Services and Oracle Essbase a life-saving advice. At least, the advice that I&#8217;d be really grateful a couple of years ago.</div>
<p>&nbsp;</p>
<div>A month ago I <a href="http://ykud.com/blog/bicpm/oracle/oracle-essbase-and-oracle-bi-11">talked about how Oracle BI interacts with OLAP servers</a> and promised a write-up on Cognos. Here it comes.</div>
<p>&nbsp;</p>
<div>Let&#8217;s start with some obvious history. In dinosaur era, Cognos became popular mostly due to it&#8217;s OLAP server PowerPlay. And during development of unified reporting platform that we now know as Cognos 8 or 10, special attention was paid to integrating PowerPlay cubes.</div>
<p>&nbsp;</p>
<div>In the nutshell, there are a few major architectural decisions:</div>
<div>1) There&#8217;s almost no meta data stored in Framework models for OLAP cubes. Really, it&#8217;s just a connection string, you will not see dimensions or measures when you plug an OLAP source into FM model. Cube metadata is accessed by each studio\report at runtime (not strictly true &#8212; there&#8217;s caching, but that&#8217;s insignificant in this context) and stored in reports definition. So when you change cube dimensional structure (add\remove levels or dimensions) &#8212; there&#8217;s a possibility your reports will break. But contrary to Oracle BI, you&#8217;ll be fixing that in reports themselves rather than in Framework model (I&#8217;m not sure if that&#8217;s good news)</div>
<div>2) To make OLAP reports more durable, all references to data elements in reports are based on dimension <a href="http://publib.boulder.ibm.com/infocenter/caapps/v8r4m0/index.jsp?topic=/com.ibm.swg.im.cognos.ug_cc.8.4.1.doc/ug_cc_i_mun_concept.html">Member Unique Names</a> (MUNs) that can be made less prone to change than just element names or paths. If you&#8217;re playing your cards well, all adding structural changes (add dimension, hierarchy or level to existing one) will not break any existing report.</div>
<div>3) Since PowerPlay was a desktop solution it had an interesting approach to zero suppression &#8212; it was done on client machine. When this approach migrated to unified Cognos platform, Cognos server became the client doing all suppression (I ranted about this in <a href="http://ykud.com/blog/cognos/cognos-powerplay-zero-suppression">this post</a>). But I couldn&#8217;t understand why the same approach (server-side suppression) was used when connecting to Essbase or Ms Analysis Services.  It took me quite a while to build some workarounds in the project where I used Cognos BI with Essbase. <strong>But not anymore</strong> &#8212; <a href="https://www-304.ibm.com/support/docview.wss?uid=swg21503599">there&#8217;s a solution</a> (where it was 3 years ago, one wonders)</div>
<p>&nbsp;</p>
<div>And there&#8217;s a whole new Dynamic Query Engine mode in Cognos 10 devoted to OLAP querying. It can be used with SAP BW (main pain-point it seems), Essbase, TM1 and, interestingly, Netezza (see <a href="https://www-304.ibm.com/support/docview.wss?uid=swg27019126#dqm">software environments</a> page). Dynamic Query mode provides <a href="http://publib.boulder.ibm.com/infocenter/cbi/v10r1m0/topic/com.ibm.swg.im.cognos.dyn_query.10.1.0.doc/dyn_query_id134query_optimization.html#query_optimization">64 bit in-memory security aware caching, null-suppression</a> and a nice looking <a href="http://publib.boulder.ibm.com/infocenter/cbi/v10r1m0/topic/com.ibm.swg.im.cognos.dyn_query.10.1.0.doc/dyn_query_id286query_visualization.html#query_visualization">query analyzer</a>.</div>
<p>&nbsp;</p>
<div>As it sometimes happens &#8212; I suggest you to read first 5 pages of <a href="http://www.ibm.com/developerworks/data/library/cognos/infrastructure/cognos_specific/page529.html?ca=drs-">Dynamic Query Cookbook</a> even if you&#8217;re not using Cognos 10, since they describe how original query execution (meaning, Cognos 8 ) works. It&#8217;s actually the first document I&#8217;ve seen  clearly stating that temporary micro-cubes are created for each DMR request (these are dmc files appearing in temp folder).</div>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-bi-olap-querying/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cognos BI Proven Practice articles</title>
		<link>http://ykud.com/blog/cognos/cognos-bi-proven-practice-articles</link>
		<comments>http://ykud.com/blog/cognos/cognos-bi-proven-practice-articles#comments</comments>
		<pubDate>Mon, 25 Jul 2011 12:30:18 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=644</guid>
		<description><![CDATA[If you&#8217;re a serious Cognos BI shop with Dev-Test-Prod migration and release management, you definitely have to read this Proven Practice article. Overall, proven practice articles are very good, I&#8217;ve skimmed through half a dozen of them. It seems that the easiest way to gain full article list is to filter by cognos_business_intelligence tag. This [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re a serious Cognos BI shop with Dev-Test-Prod migration and release management, you definitely have to read this <a href="http://www.ibm.com/developerworks/data/library/cognos/infrastructure/cognos_specific/page581.html">Proven Practice article</a>. Overall, proven practice articles are very good, I&#8217;ve skimmed through half a dozen of them.</p>
<p>It seems that the easiest way to gain full article list is to <a href="https://www.ibm.com/developerworks/mydeveloperworks/bookmarks/html?base=http%3A%2F%2Fwww.ibm.com%2Fdeveloperworks%2Fdata%2F&#038;ps=50&#038;sortBy=created&#038;sortOrder=desc&#038;tag=cognos_business_intelligence&#038;lang=en">filter by cognos_business_intelligence tag</a>. This reminds of one of my former bosses who inquired Oracle, whether they had special training on how to find content on their site.</p>
<p> I ended throwing <a href="https://www.ibm.com/developerworks/mydeveloperworks/bookmarks/atom?base=%25http%3A%2F%2Fwww.ibm.com%2Fdeveloperworks%2Fdata%2F%25&#038;ps=50&#038;sortBy=created&#038;sortOrder=desc&#038;tag=cognos_business_intelligence&#038;lang=en">RSS-feed for this search</a> in my reader, so I hope not to miss any updates.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-bi-proven-practice-articles/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cognos 8 BI process architecture and capacity planning</title>
		<link>http://ykud.com/blog/cognos/bi/cognos-8-bi-process-architecture-and-capacity-planning</link>
		<comments>http://ykud.com/blog/cognos/bi/cognos-8-bi-process-architecture-and-capacity-planning#comments</comments>
		<pubDate>Sat, 25 Jun 2011 09:59:39 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=616</guid>
		<description><![CDATA[Spent half an hour sketching up Cognos process architecture &#8212; what goes where and when. Will refer to this drawing in my future hardware planning assigments &#160; Comments: You can separate all components (Gateway, Application Server, Content Manager) into separate machines There can be only one Content Manager service active in cluster at a time [...]]]></description>
			<content:encoded><![CDATA[<p>Spent half an hour sketching up Cognos process architecture &#8212; what goes where and when. Will refer to this drawing in my future hardware planning assigments <img src='http://ykud.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://ykud.com/blog/wp-content/uploads/2011/06/Cognos-Architecture-page-3-20110625_132852.jpg"><img class="aligncenter size-large wp-image-618" title="Cognos Architecture" src="http://ykud.com/blog/wp-content/uploads/2011/06/Cognos-Architecture-page-3-20110625_132852-768x1024.jpg" alt="" width="768" height="1024" /></a></p>
<p>&nbsp;</p>
<p>Comments:</p>
<ol>
<li>You can separate all components (Gateway, Application Server, Content Manager) into separate machines</li>
<li>There can be only one Content Manager service active in cluster at a time</li>
<li>There may be multiple gateway servers, as I was corrected. What I originally meant was close to something like &#8216;if you give user a cognos url, that url points to one specific gateway server&#8217;, so you have to do clustered web-server and application server installation for gateway fault-tolerance.</li>
<li>There may be multiple active dispatchers in cluster</li>
<li>Each dispatcher consists of <a href="http://publib.boulder.ibm.com/infocenter/c8bi/v8r4m0/topic/com.ibm.swg.im.cognos.crn_arch.8.4.0.doc/crn_arch_id570arch_Dispatcher.html#arch_Dispatcher">multiple services</a>, that may be turned off or on for a specific server in cluster.</li>
<li>Most dispatcher services are processed in application server (Tomcat by default and almost any other of your choice), which can use either 32 or 64 bit java machine</li>
<li>Reports (interactive and batch) are processed by a special process &#8216;BIBus&#8217;, which is a C++ 32 bit application (hence the 2Gb cap for each process and <a href="http://www.google.ru/search?aq=f&amp;sourceid=chrome&amp;ie=UTF-8&amp;q=CCLOutOfMemory">CCLOutOfMemory</a> errors). Number of such processes depends on Dispatcher service settings, load on each process depends on affinity connection settings.</li>
<li>BIBus processes generate temporary files if they require significant amount of local processing (hence UDA files problems)</li>
<li>Each BIBus process can occupy up to 2Gb RAM and 1 CPU Core</li>
</ol>
<p>Basic rules for capacity planning I use (your mileage may vary greatly, it depends on reports design, size and calculation complexity in first hand):</p>
<ol>
<li><a href="http://publib.boulder.ibm.com/infocenter/c8bi/v8r4m0/topic/com.ibm.swg.im.cognos.crn_arch.8.4.0.doc/crn_arch_id2479EstimatingIBMCognos8UserLoad.html#id2479EstimatingIBMCognos8UserLoad">Estimate number of concurrent users</a></li>
<li>There should be a BIBus process for each couple concurrent users</li>
<li>There should be at least 1 or 2 cores for all other dispatcher services</li>
<li>There should be at least 1-2 Gb of RAM for Application Server</li>
<li>There should be at least 2-3 Gb for Operation System (it depends on operation system greatly)</li>
<li>There should be a separate database instance for Content Store and Audit database</li>
</ol>
<p>For example, if we&#8217;re talking about 20 concurrent users (mind that it&#8217;s 2000 named users by basic IBM metrics), we&#8217;ll need:</p>
<ul>
<li>10 BIBus processes, each will take 1 Core and 2 GB Ram</li>
<li>2 cores and 2 Gb ram for dispatcher and application server (for each dispatcher server, if there going to be a cluster environment)</li>
<li>3 Gb for operating system (for each dispatcher server, if there going to be a cluster environment)</li>
</ul>
<p>And it gives us 16 cores, 32 Gb RAM for a single server.</p>
<p>Suggested reading:</p>
<p>&#8211; <a href="http://publib.boulder.ibm.com/infocenter/c8bi/v8r4m0/topic/com.ibm.swg.im.cognos.crn_arch.8.4.0.doc/crn_arch.html">Architecture and Deployment Guide</a> )</p>
<p>&#8211; these threads on DeveloperWorks, where Phil W. describes all this way better than I&#8217;ll ever do:</p>
<p><a href="http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14233120&amp;tstart=0">http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14233120</a></p>
<div><a href="http://www.ibm.com/developerworks/forums/message.jspa?messageID=14490188">http://www.ibm.com/developerworks/forums/message.jspa?messageID=14490188</a></div>
<div><a href="http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14575978">http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14575978</a></div>
<div></div>
<div></div>
<div></div>
<div>Update: That&#8217;s why I like the web &#8212; I <a href="http://ykud.com/blog/cognos/bi/cognos-8-bi-process-architecture-and-capacity-planning#comment-234628521">was corrected by Dave</a> even in the middle of weekend  ) Thanks again, Dave.</div>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/bi/cognos-8-bi-process-architecture-and-capacity-planning/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Fast = True</title>
		<link>http://ykud.com/blog/cognos/bi/fast-true</link>
		<comments>http://ykud.com/blog/cognos/bi/fast-true#comments</comments>
		<pubDate>Sun, 05 Jun 2011 15:21:01 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=604</guid>
		<description><![CDATA[Always thought it was a joke &#8230; Up until today. Really, there is a Speed = True parameter in Transformer MDL.  I adore developer&#8217;s sense of humour ) &#160; PS: There&#8217;s so much going on lately &#8212; hold on for some interesting news &#38; posts.]]></description>
			<content:encoded><![CDATA[<p>Always thought it was a joke &#8230; Up until today.</p>
<p>Really, there is a <a href="http://publib.boulder.ibm.com/infocenter/c8bi/v8r4m0/index.jsp?topic=/com.ibm.swg.im.cognos.dg_cogtr.8.4.0.doc/dg_cogtr_id13088Speed.html">Speed = True</a> parameter in Transformer MDL.  I adore developer&#8217;s sense of humour )</p>
<p>&nbsp;</p>
<p>PS: There&#8217;s so much going on lately &#8212; hold on for some interesting news &amp; posts.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/bi/fast-true/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aggregate awareness and Cognos BI</title>
		<link>http://ykud.com/blog/cognos/aggregate-awareness-and-cognos-bi</link>
		<comments>http://ykud.com/blog/cognos/aggregate-awareness-and-cognos-bi#comments</comments>
		<pubDate>Tue, 10 May 2011 12:24:49 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=594</guid>
		<description><![CDATA[There was yet another discussion on this topic on Cognoise, so I&#8217;ve decided to list all the variants I&#8217;m aware of in this post. What is an aggregate? One of the main ways to speed up your DWH is to use aggregate tables, so that every time you ask about monthly sales per region system [...]]]></description>
			<content:encoded><![CDATA[<div><a href="http://ykud.com/blog/wp-content/uploads/2011/05/owl_1683142i.jpg"><img class="alignleft size-thumbnail wp-image-600" title="owl_1683142i" src="http://ykud.com/blog/wp-content/uploads/2011/05/owl_1683142i-150x150.jpg" alt="" width="150" height="150" /></a>There was yet another <a href="http://www.cognoise.com/community/index.php?topic=13823.0">discussion on this topic on Cognoise</a>, so I&#8217;ve decided to list all the variants I&#8217;m aware <img src='http://ykud.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  of in this post.</div>
<div><strong>What is an aggregate? </strong></div>
<div>One of the main ways to speed up your DWH is to use aggregate tables, so that every time you ask about monthly sales per region system doesn&#8217;t have to sum up individual store daily sales transactions. Since a single aggregate table can speed up multiple queries, designing a set of aggregate tables is a hard task give that you&#8217;re trying to maximize query speed with limited resources for aggregate storage and processing. There&#8217;s a very good book on the topic that I highly recommend.</div>
<div><strong>Ok, we have aggregates &#8212; how to use them?</strong></div>
<div><strong><br />
</strong></div>
<div>Once you&#8217;ve populated your aggregate tables, you need to use them to answer the queries, i.e. select possible aggregates for a given query, substitute base table references with aggregate tables reference in SQL and then fire the query to DBMS. To do this efficiently you need to know which aggregates are available for what levels.</div>
<div>Tool which does it is called aggregate navigator and it can be implemented in a number of ways:</div>
<div>1) Human-based: you just tell your analysts to use new tables in their SQL or BI tool. No comments, but I&#8217;ve seen this working )</div>
<div>2) RDBMS-based: query rewrite techniques (<a href="http://www.ibm.com/developerworks/data/library/techarticle/dm-0509melnyk/">Materialized Query Tables in DB2</a>, <a href="http://download.oracle.com/docs/cd/B28359_01/server.111/b28313/basicmv.htm#i1007299">Materialized Views in Oracle</a>, <a href="http://msdn.microsoft.com/en-us/library/dd171921(v=sql.100).aspx">Indexed Views in Microsoft SQL Server</a> to some extent)</div>
<div>3) BI tool based: this case is commonly called aggregate awareness. You specify aggregates for levels in BI metadata modeling tool and then BI tool constructs appropriate SQL</div>
<div>As of Cognos 10 &#8212; there&#8217;s no such option as aggregate awareness. But since I&#8217;m already an option 2 fan, here&#8217;s the code showing how to use Oracle Materialized Views for this.</div>
<div><strong>Sample solution</strong></div>
<div><strong><br />
</strong></div>
<div>Following forum discussion: aggregates were generated in some external statistics tool (let it be SAS or, even better, SPSS). So we have a base table and an aggregate one.</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="plsql"><pre class="de1"><span class="kw1">ALTER</span> session <span class="kw1">SET</span> query_rewrite_enabled <span class="sy0">=</span> <span class="kw1">TRUE</span><span class="sy0">;</span>
<span class="kw1">ALTER</span> session <span class="kw1">SET</span> query_rewrite_integrity <span class="sy0">=</span> STALE_TOLERATED<span class="sy0">;</span>
&nbsp;
<span class="kw1">SELECT</span> <span class="sy0">*</span> <span class="kw1">FROM</span> f_sales<span class="sy0">;</span>
<span class="coMULTI">/*
1     200101     Canada     Toronto     100,00
2     200101     Canada     Monreal     200,00
3     200101     USA     NY     500,00
4     200101     USA     Buffalo     20,00
*/</span>
&nbsp;
<span class="kw1">SELECT</span> <span class="sy0">*</span> <span class="kw1">FROM</span> f_sales_by_country<span class="sy0">;</span>
<span class="coMULTI">/*
1     201001     Canada     111
2     201001     USA     222
*/</span>
&nbsp;
<span class="kw1">CREATE</span> materialized <span class="kw1">VIEW</span> f_sales_by_country
<span class="kw1">ON</span> prebuilt <span class="kw1">TABLE</span> without reduced precision
enable query rewrite
<span class="kw1">AS</span>
<span class="kw1">SELECT</span> country<span class="sy0">,</span> <span class="kw2">SUM</span><span class="br0">&#40;</span><span class="kw2">VALUE</span><span class="br0">&#41;</span> <span class="kw1">AS</span> sales <span class="kw1">FROM</span> f_sales
<span class="kw1">GROUP</span> <span class="kw1">BY</span> country<span class="sy0">;</span>
&nbsp;
<span class="kw1">SELECT</span> country<span class="sy0">,</span> <span class="kw2">SUM</span><span class="br0">&#40;</span><span class="kw2">VALUE</span><span class="br0">&#41;</span> <span class="kw1">AS</span> sales <span class="kw1">FROM</span> f_sales
<span class="kw1">GROUP</span> <span class="kw1">BY</span> country<span class="sy0">;</span>
<span class="coMULTI">/*
1     Canada     111
2     USA     222
*/</span></pre></div></div></div></div></div></div></div>


]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/aggregate-awareness-and-cognos-bi/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Cognos BI and TM1 content from IBM</title>
		<link>http://ykud.com/blog/ibm/new-cognos-bi-and-tm1-content-from-ibm</link>
		<comments>http://ykud.com/blog/ibm/new-cognos-bi-and-tm1-content-from-ibm#comments</comments>
		<pubDate>Sat, 09 Apr 2011 16:28:18 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[tm1]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=584</guid>
		<description><![CDATA[Cognos 10 Redbook is now avalaible on IBM site. I always respected RedBooks initiative, because these are actual books with lots of practical knowledge, not just product documentation. I&#8217;ve only skimmed through this book, it seems less tips&#8217;n'tricks than Packt one about Cognos 8 Report Studio. But it&#8217;s a very good overall coverage of what [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.redbooks.ibm.com/abstracts/sg247912.html">Cognos 10 Redbook</a> is now avalaible on IBM site. I always respected RedBooks initiative, because these are actual books with lots of practical knowledge, not just product documentation. I&#8217;ve only skimmed through this book, it seems less tips&#8217;n'tricks than <a href="http://www.packtpub.com/ibm-cognos-8-report-studio-cookbook/book">Packt one about Cognos 8 Report Studio</a>. But it&#8217;s a very good overall coverage of what Cognos BI is and how all parts fit together.</p>
<p>And there&#8217;s an absolute <a href="https://www-304.ibm.com/support/docview.wss?uid=swg21460595">must-read article about new TM1 9.5.2 Parallel Interaction feature</a>.<br />
I&#8217;m actually asonished to see an article of such depth in support knowledge base. It contains detailed explanation:<br />
- of how things worked before, common problems and workarounds<br />
- what has changed in server engine<br />
- how will this change affect current systems<br />
It&#8217;s actually terrific, I&#8217;d kill to get more of such articles on tools I work with, not just &#8216;try reinstalling ones&#8217;.</p>
<p>On an unrelated note: I&#8217;ve uploaded updated versions of <a href="http://ykud.com/blog/cognos/tm1-cognos/stress-testing-tm1-models">tm1 stress testing tool</a> (with more input parameters) and <a href="http://ykud.com/blog/cognos/tm1-cognos/tm1cmp">tm1 model comparison tool</a> (just some bug fixing).</p>
<p>And on another unrelated note: I was nominated an <a href="http://www-01.ibm.com/software/data/champion/profiles/kudryavcev.html">IBM Information Champion</a> again. Thank you all for reading this blog )</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/ibm/new-cognos-bi-and-tm1-content-from-ibm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cognos PowerPlay Transformer Limitations</title>
		<link>http://ykud.com/blog/cognos/cognos-powerplay-transformer-limitations</link>
		<comments>http://ykud.com/blog/cognos/cognos-powerplay-transformer-limitations#comments</comments>
		<pubDate>Fri, 17 Sep 2010 07:50:54 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[transformer]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=410</guid>
		<description><![CDATA[Just a bullet list of things that separate Cognos Transformer from being a capable OLAP-tool in modern market. Neither of these problems will be solved, I think, and this will lead to Transfomer&#8217;s death in near future (about 5 years, imho, given huge userbase). That&#8217;s a pity, since it&#8217;s a nice tool, absolutely brilliant 10 [...]]]></description>
			<content:encoded><![CDATA[<p>Just a bullet list of things that separate Cognos Transformer from being a capable OLAP-tool in modern market. Neither of these problems will be solved, I think, and this will lead to Transfomer&#8217;s death in near future (about 5 years, imho, given huge userbase). That&#8217;s a pity, since it&#8217;s a nice tool, absolutely brilliant 10 years ago. But as data sizes grow, Transformer just cannot scale. Hyperion did a nice job of inventing ASO option when it faced volume challenges, Cognos decided all was good enough.<br />
List:</p>
<li><strong>No dimension attributes</strong> There&#8217;s no way to add attributes to dimension elements, only to model them as separate dimensions (or alternate hierarchies), which is very inefficient both for modeling and for reporting. For example, try to display all sales in stores with 200-300 m^2 square footage</li>
<li><strong>No multiple languages support</strong> No way to keep a single cube for German and English users, only separate cubes for each language and therefore more processing overhead and administration burden</li>
<li><strong>Very slow zero suppression</strong> See <a href="http://ykud.com/blog/cognos/cognos-powerplay-zero-suppression">this post</a></li>
<li><strong>Very bad hardware resource optimization</strong> Transfomer is essentially a single-threaded application and cannot use more than 2 cores for cube build. Even with top level CPUs it&#8217;s just not enough. You can build multiple cubes in parallel to optimize resource usage, but that doesn&#8217;t help much either (see following point)</li>
<li><strong>No multiple-cubes partitioning</strong> Cube processing limitations could be solved by dividing cube in multiple &#8216;cuboids&#8217; and presenting them a single cube to end-user applications. However, time-partitioning imposes a serious limitation of only one time-dimension in cube and group paritioning doesn&#8217;t present a single cube model for analysis</li>
<li><strong>32bit application</strong>Transformer is a 32bit application and cannot utilize a lot of memory for processing, which could help things a lot. Moreover, famous cube file size limitation comes from this reason as well</li>
<li><strong>Not MDX-complaint</strong> You can&#8217;t use anything except Cognos BI to work with Transformer cubes data. An XML\A provider would be very usefull</li>
<li><strong>No Parent-Child hierarchies</strong> You can model then by dimension views but it requires some serious scripting. A very nice thing to have &#8216;out-of-the-box&#8217;</li>
<p>Given all of the above, powerplay is a nice single-user tool with friendly modeling gui or an OLAP-server in &#8216;small-data&#8217; enviroment. As a single user tool it will be replaced by <a href="http://www.powerpivot.com/">PowerPivot </a>and as an OLAP-server it will be replaced by <a href="http://www.ibm.com/software/data/cognos/products/tm1/">TM1 </a>(which I&#8217;m not happy with &#8212; see following posts) or Microsoft Analysis Services.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-powerplay-transformer-limitations/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

