<?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; cognos</title>
	<atom:link href="http://ykud.com/blog/category/cognos/feed" rel="self" type="application/rss+xml" />
	<link>http://ykud.com/blog</link>
	<description></description>
	<lastBuildDate>Mon, 30 Apr 2012 06:10:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Cognos Transformer multi-server cube building revisited</title>
		<link>http://ykud.com/blog/cognos/cognos-transformer-multi-server-cube-building-revisited</link>
		<comments>http://ykud.com/blog/cognos/cognos-transformer-multi-server-cube-building-revisited#comments</comments>
		<pubDate>Mon, 30 Apr 2012 06:10:53 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[bi]]></category>
		<category><![CDATA[cognos]]></category>
		<category><![CDATA[transfomer]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=821</guid>
		<description><![CDATA[I was decribing the 4-year old trick of using Cognos server cluster to build powercubes and got a new idea. Really, PowerPlay cubes building via scripts is a so 1990s, 21st century is for enterprise scale, failover, monitoring and you-know-the-pitch. If we make Transformer cube build a Report/Job in Cognos Connection, we get: load-balanced cluster [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ykud.com/blog/wp-content/uploads/2012/04/0918-laying-bricks-2-sm2.jpeg"><img class="alignleft  wp-image-825" title="0918-laying-bricks-2-sm" src="http://ykud.com/blog/wp-content/uploads/2012/04/0918-laying-bricks-2-sm2.jpeg" alt="" width="210" height="140" /></a>I was decribing the <a href="http://ykud.com/blog/cognos/creating-a-transformer-task-balancing-cluster-using-cognos-8-balancer">4-year old trick of using Cognos server cluster to build powercubes</a> and got a new idea.</p>
<p>Really, PowerPlay cubes building via scripts is a so 1990s, 21st century is for enterprise scale, failover, monitoring and you-know-the-pitch.</p>
<p>If we make Transformer cube build a Report/Job in Cognos Connection, we get:</p>
<ul>
<li>load-balanced cluster builds (cube building task will start on any avalaible server, we need to ensure server will be able to run the build script)</li>
<li>monitoring (the same Cognos System \ Schedule pane in Administration) and build history</li>
<li>event-management (builds will be recorded in audit tables and we can do notifications, restarts and scheduling in Event Studio)</li>
</ul>
<p>The question is how to make cube build a Job / Report run with minimum of hassle. I was originally thinking of a simple ASP page, running a cube build batch script, used as a web-service datasource with cubename as parameter, but (that&#8217;s the a-ha moment) you can use a simple Java application, running in the same application server as Cognos itself. That&#8217;ll give platform independance and nice url (ibmcognos/buildcube.jsp?cubename=&#8230;).</p>
<p>Moreover, you can package cube build scripts into the application itself, make them configurable (model location, backup location, number of copies to retain, etc), make the application detect Cognos version (to know how to swap cubes) and detect operating system (what scripts to use) and you&#8217;ll have all the cube build logic packed into a neat single file container that you just copy accros all servers in cluster. That&#8217;ll take away all script maintenance burden and give all the benefits of centralized enterprise way. And it&#8217;s not a big development effort, I&#8217;d estimate it a couple of weeks spent with coding hat on.</p>
<p>Strangely that neither of big “all-things Cognos” shops (BSP or Motio) didn&#8217;t do something like that, there&#8217;s still a huge lot of PowerPlay shops around that&#8217;d love something like this. And some of them are going from 8 to 10 right now and that requires rewriting parts of cube-building scripts <img src='http://ykud.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-transformer-multi-server-cube-building-revisited/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TM1 MDX querying snippet</title>
		<link>http://ykud.com/blog/cognos/tm1-cognos/tm1mdx</link>
		<comments>http://ykud.com/blog/cognos/tm1-cognos/tm1mdx#comments</comments>
		<pubDate>Sat, 18 Feb 2012 09:16:40 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[tm1]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mdx]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=799</guid>
		<description><![CDATA[I&#8217;m playing around with some TM1 ideas and all of them require some sort of sparsity analysis. And since TM1 supports MDX (to some extent, to say it mildly) and I like MDX and used it a lot with Essbase, I thought it&#8217;d be wonderful to use MDX. And any post is better with a cat [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ykud.com/blog/wp-content/uploads/2012/02/cat-catching-fish.jpg"><img class="alignleft  wp-image-807" title="cat catching fish" src="http://ykud.com/blog/wp-content/uploads/2012/02/cat-catching-fish-300x300.jpg" alt="" width="210" height="210" /></a>I&#8217;m playing around with some TM1 ideas and all of them require some sort of sparsity analysis. And since TM1 supports MDX (to some extent, to say it mildly) and I like MDX and used it a lot with Essbase, I thought it&#8217;d be wonderful to use MDX.</p>
<p>And any post is better with a cat picture in it, don&#8217;t you agree? This one is about a casual TM1 developer embrasing the ocean of MDX possibilities.</p>
<p>But MDX-dialect of TM1 isn&#8217;t well-documented (again, being very polite), so learning it&#8217;s intricacies is mostly trial and error and an open field for experiments. And whilst you can write MDX-driven subset definitions (<a href="http://www.bihints.com/book/export/html/68">wonderfully described</a> by Phillip Bichard and Martin Findon) in Architect, there&#8217;s no actual tool where you can write “select years on rows, measures on columns from sales” and see you table (all the Cognos studios do that, but in background and with quite inefficient way of writing you own). You can go wild on the ODBO page of a TI process as well, but that&#8217;s a bit hard from error handling and results viewing.</p>
<p>&nbsp;</p>
<p>So at the end of a day I wrote a small Java based script that allows you to write MDX queries to your TM1 server and get result back as a csv file (there&#8217;s an <a href="http://bihints.com/tm1_sdk">Excel workbook doing the same thing</a>, but I&#8217;m a Java guy and I needed the querying code <del>to conquer the universe</del> anyway).</p>
<p>&nbsp;</p>
<h4>How does it work?</h4>
<p>1) You fill in a query you want to fire in an xml file with some additional options (admin server, login/password, file to write query results to, will you need headers and all that)</p>
<p><a href="http://ykud.com/blog/wp-content/uploads/2012/02/Screen-Shot-2012-02-18-at-7.50.47-PM.png"><img class="aligncenter size-full wp-image-801" title="Screen Shot 2012-02-18 at 7.50.47 PM" src="http://ykud.com/blog/wp-content/uploads/2012/02/Screen-Shot-2012-02-18-at-7.50.47-PM.png" alt="" width="803" height="456" /></a></p>
<p>2) Run java tm1_mdx your_query_file.xml and get either an incorrect MDX syntax error (bad, I get this often) or results in a CSV file (good)</p>
<p>&nbsp;</p>
<p><a href="http://ykud.com/blog/wp-content/uploads/2012/02/Screen-Shot-2012-02-18-at-7.51.21-PM.png"><img class="aligncenter size-large wp-image-806" title="Screen Shot 2012-02-18 at 7.51.21 PM" src="http://ykud.com/blog/wp-content/uploads/2012/02/Screen-Shot-2012-02-18-at-7.51.21-PM-e1329556256806.png" alt="" width="907" height="457" /></a></p>
<p>As usual, there&#8217;s source code in the package, so you can adjust it \ use it as a base for something bigger.</p>
<h4>How to install it?</h4>
<ol>
<li>You will need  Java runtime engine (jre). This the only requirement, there’s no need to have TM1 installed or anything.</li>
<li><a href="http://ykud.com/misc/tm1mdx.zip">Download the tool</a> (this package is for 9.5.2, ping me if you want it for some newer\older version, it&#8217;s just a matter of recompiling), unpack to some directory (c:\tm1mdx, for example)</li>
<li><a href="http://publib.boulder.ibm.com/infocenter/ctm1/v9r4m1/topic/com.ibm.swg.im.cognos.tm1_op.9.4.1.doc/tm1_op_id10799ConfiguringtheTM1JavaAPItoUseSSL_N1206FD.html?resultof=%22%6a%61%76%61%22%20%22%73%73%6c%22%20">Cryptic step of adding security certificate to your Java</a>.</li>
<ol>
<li>Find jre\bin\keytool.exe utility on your computer</li>
<li>Open the command line and navigate to jre\bin</li>
<li>Run command line keytool -keystore ..\lib\security\cacerts -alias Company -import -file c:\tm1mdx\applixca.der</li>
<li>Enter ‘changeit’ as password</li>
<li>Type yes</li>
</ol>
<li>Fill in the mdx_query.xml</li>
<li>Open command line, navigate to c:\tm1mdx, run java tm1_mdx mdx_query.xml</li>
</ol>
<p>&nbsp;</p>
<p>PS: By the way, I glimpsed into TM1 10.1 API docs and all the APIs were greatly enhanced in this version (mostly for <a href="http://publib.boulder.ibm.com/infocenter/ctm1/v10r1m0/nav/3_0">Performance Modeler</a>, it seems), so you finally have a per line grained access to rule files and such. It&#8217;s obvious that Performance Modeler uses Java API (it&#8217;s using Cognos Rich Client Platform, it&#8217;s inevitable),  so it&#8217;s extensively used and developed and might even get documented at some point )</p>
<p>PSPS: It&#8217;s interesting whether there&#8217;ll be any IBM-made XML/A driver for TM1 at some stage. It seems possible to do a  straw <a href="http://www.olap4j.org/">olap4j</a> driver for TM1 even now and that&#8217;d be a funny way of opening it up a bit further.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/tm1-cognos/tm1mdx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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 Express and BI free trials</title>
		<link>http://ykud.com/blog/cognos/cognos-express-and-bi-free-trials</link>
		<comments>http://ykud.com/blog/cognos/cognos-express-and-bi-free-trials#comments</comments>
		<pubDate>Sun, 11 Dec 2011 03:42:19 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[cognos]]></category>
		<category><![CDATA[bi]]></category>
		<category><![CDATA[express]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=761</guid>
		<description><![CDATA[I must be the last one to notice, but you can actually try out Cognos 10.1 BI and Cognos Express for free (time limited trial). That&#8217;s very convenient and is totally a major shift from usual &#8216;we have products soooo good that you have to ask partners to show them&#8217; policy. &#8216;Open download and use [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ykud.com/blog/wp-content/uploads/2011/12/free_stuff.jpg"><img class="alignleft size-medium wp-image-762" title="free_stuff" src="http://ykud.com/blog/wp-content/uploads/2011/12/free_stuff-292x300.jpg" alt="" width="175" height="180" /></a>I must be the last one to notice, but you can actually try out <a href="http://www.ibm.com/developerworks/downloads/im/cognosbi/index.html?mc=-web_ibm_products#restrictions">Cognos 10.1 BI </a>and <a href="http://www.ibm.com/developerworks/downloads/im/cognosexpress/">Cognos Express</a> for free (time limited trial). That&#8217;s very convenient and is totally a major shift from usual &#8216;we have products soooo good that you have to ask partners to show them&#8217; policy.</p>
<p>&#8216;Open download and use but paid support&#8217; policy advocated by Oracle (for example) can actually attract more people to work with the products and to buy them eventually, even when they are already at a different company. It really worked well on russian DBMS market, where Oracle is the only &#8216;big enterprise&#8217; choice.</p>
<p>On the other hand, both BI and Express are quite complex products, so mere effort of trying to make them work in non-obvious tasks can lead to utmost frustration. But both of them are packed with demos and samples, so that should make life a bit easier.</p>
<p>All in all, I&#8217;m really glad this is happening and am rooting for time-unlimited trials. You won&#8217;t build a serious system without fix packs anyway )</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/cognos-express-and-bi-free-trials/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do you want your TM1 go twice faster on Intel-box? Turn HyperThreading off</title>
		<link>http://ykud.com/blog/cognos/tm1-cognos/do-you-want-your-tm1-go-twice-faster-on-intel-box-turn-hyperthreading-off</link>
		<comments>http://ykud.com/blog/cognos/tm1-cognos/do-you-want-your-tm1-go-twice-faster-on-intel-box-turn-hyperthreading-off#comments</comments>
		<pubDate>Thu, 24 Nov 2011 03:24:05 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[tm1]]></category>
		<category><![CDATA[cpu]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[jobservers]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=746</guid>
		<description><![CDATA[This&#8217;ll be a bit long (but with a hidden bonus for attentive reader), so I&#8217;ll start from conclusions. If you&#8217;re using a recent server with Intel CPUs, you&#8217;d better check whether they have Hyper-Threading (HT) and try turning it off to gain 2x speed boost. How to do it: 1) go to server, open command [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ykud.com/blog/wp-content/uploads/2011/11/Skinny_Fat_Cat.gif"><img class="alignleft size-medium wp-image-754" title="Skinny_Fat_Cat" src="http://ykud.com/blog/wp-content/uploads/2011/11/Skinny_Fat_Cat-300x200.gif" alt="" width="300" height="200" /></a>This&#8217;ll be a bit long (but with a hidden bonus for attentive reader), so I&#8217;ll start from conclusions. If you&#8217;re using a recent server with Intel CPUs, you&#8217;d better check whether they have Hyper-Threading (HT) and try turning it off to gain 2x speed boost.</p>
<p>How to do it:</p>
<p>1) go to server, open command line, type systeminfo (processor info will be in first ten lines). Or if you don&#8217;t like it cool, open Control Panel, CPUs are described on second pane )</p>
<p>2) check whether your CPU&#8217;s are in <a href="http://ark.intel.com/search/advanced?HyperThreading=true">this list</a></p>
<p>3) ask you server admin, or manually reboot server, look into BIOS and turn HyperThreading off</p>
<p>4) Test your TM1 processes, they may speed up considerably</p>
<p>&nbsp;</p>
<h2><strong>What&#8217;s behind the scenes.</strong></h2>
<p><a href="http://software.intel.com/en-us/articles/multi-core-processor-architecture-explained/"><img class="alignleft size-medium wp-image-747" title="3966" src="http://ykud.com/blog/wp-content/uploads/2011/11/3966-300x228.gif" alt="" width="300" height="228" /></a></p>
<p><a href="http://en.wikipedia.org/wiki/Hyper-threading">Hyper-threading</a>, in a nutshell, is a technique showing each physical CPU core as 2 logical ones. Since during normal work a lot of time is spent in thread switching and related registry load/unload and yada yada, physical cores actually are underloaded in common multithreaded system. Adding a duplicate registry set and a &#8216;virtual&#8217; core allows to utilise physical core up to 20-40% more, earning throughput benefits.</p>
<p>Key words here are “threading” and “throughput”, meaning that HT benefit multithreaded applications where lots of small request are processed at the same time. OLTP databases are a prominent example.</p>
<p>But most of the systems I work with, almost all OLAP engines and even DWH-tuned DBMSes, actually suffer in this scenario.</p>
<p>For example, TM1 calculations are executed in a single thread, so if this thread is assigned half an CPU core, speed drops significantly. The same logic goes for Essbase metadata update process, for example, or for Cognos Enterprise Planning Job processing.</p>
<p>I&#8217;ve seen significant performance degradation (30%) in Cognos EP job processing due to HT context switching and have advised turning HT off on all Cognos EP Job servers.</p>
<p>Encountering the same issue with TM1 recently left me puzzled, since there was plenty of empty CPUs on server and there shouldn&#8217;t be any thread switching. But we&#8217;ve got 2+ time speedup after flickering the switch anyhow )</p>
<p>&nbsp;</p>
<p>I promised a bonus and here it goes:</p>
<p><em>When buying a TM1 server with Intel CPUs, buy way more cores than you&#8217;ll license</em>. Physical cores, not logical.</p>
<p>This will turn on <a href="http://en.wikipedia.org/wiki/Intel_Turbo_Boost">Intel Turbo-Boost</a> and it might give you another 30-40% speed boost. I haven&#8217;t tried that yet and there&#8217;s a bit of scepticism of current boost-detection approach in Wikipedia, but it&#8217;s definitely worth testing in a lab before you buy hardware. Cores are cheap compared to licence costs, so you may save yourself a ton of money by having a faster system. As in wikipedia example, for Core i7-2920XM you can boost up to 3,5 Ghz per core with 2,5 Ghz base speed. That&#8217;s a hefty speed up for a good old one-threaded TM1.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/tm1-cognos/do-you-want-your-tm1-go-twice-faster-on-intel-box-turn-hyperthreading-off/feed</wfw:commentRss>
		<slash:comments>3</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>BedRockTM1: code samples and methodology</title>
		<link>http://ykud.com/blog/cognos/tm1-cognos/bedrocktm1-code-samples-and-methodology</link>
		<comments>http://ykud.com/blog/cognos/tm1-cognos/bedrocktm1-code-samples-and-methodology#comments</comments>
		<pubDate>Fri, 05 Aug 2011 10:28:08 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[tm1]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=649</guid>
		<description><![CDATA[A new TM1 resource just popped up on my radar. Take a close look at bedrocktm1.org. Overall approach excites coder part of me: modular development, agile, best practice source code &#8212; all this is actually very helpful. Having so much Turbo Integrator &#8216;how-to&#8217;s solves a lot of &#8216;re-inventing the bicycle&#8217; cases. As far as I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://bedrocktm1.org/"><img class="alignleft size-full wp-image-653" title="img_build_on_bedrock_shadow" src="http://ykud.com/blog/wp-content/uploads/2011/08/img_build_on_bedrock_shadow.png" alt="" width="150" height="100" /></a>A new TM1 resource just popped up on my radar. Take a close look at <a href="http://bedrocktm1.org/">bedrocktm1.org</a>.</p>
<p>Overall approach excites coder part of me: modular development, agile, best practice source code &#8212; all this is actually very helpful. Having so much Turbo Integrator &#8216;how-to&#8217;s solves a lot of &#8216;re-inventing the bicycle&#8217; cases.</p>
<p>As far as I understand bulk of this project&#8217;s code is developed by <a href="http://cubewise.com/">CubeWise</a>. Hats of to them for being so open and willing to push all TM1 community further.</p>
<p>It&#8217;s interesting to see whether this site will gain momentum &#8212; whether there&#8217;ll be non-CubeWise commiters, how will adoption go and etc.</p>
<p>I would be proud to contribute some code there someday, if I&#8217;ll be doing TM1 related stuff. Maybe they will accept my small utilities for start&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/cognos/tm1-cognos/bedrocktm1-code-samples-and-methodology/feed</wfw:commentRss>
		<slash:comments>1</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>
	</channel>
</rss>

