<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Miky Schreiber's Blog</title>
    <link>http://www.miky-schreiber.com/Blog/</link>
    <description>Business Intelligence, Analysis Services, MDX, DataWarehousing and more...</description>
    <language>en-us</language>
    <copyright>Miky Schreiber</copyright>
    <lastBuildDate>Mon, 09 Nov 2009 14:41:31 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>miky@zahav.net.il</managingEditor>
    <webMaster>miky@zahav.net.il</webMaster>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/MikySchreiberBlog" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=801cefae-7de4-4e1c-9ad4-115c70c2813e</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,801cefae-7de4-4e1c-9ad4-115c70c2813e.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,801cefae-7de4-4e1c-9ad4-115c70c2813e.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=801cefae-7de4-4e1c-9ad4-115c70c2813e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="MARGIN: 0px 1em 1em" height="50%" src="http://www.miky-schreiber.com/blog/content/binary/horseshoe.jpg" width="25%" align="left" />In
both SSIS and Informatica, the union transformation doesn't delete duplicate rows.
In SSIS it's clear because the transformation is called "Union all", which reminds
us the union all statement in SQL which doesn't remove duplicate rows. The confusing
part is in Informatica, where the transformation is called Union although it doesn't
remove duplicates. One of my teammates got confused this week so I thought it's worth
blogging about. 
<br /><br />
One more tip about ETLs with union transformations: When you'll investigate, maintain
or fix ETL it will be much help if you'll know where each row came from. That's why
I recommend adding a column named "src" or something like that and store there the
source of the row before the union happened.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=801cefae-7de4-4e1c-9ad4-115c70c2813e" />
      <xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/tpNgDz3l_lY" height="1" width="1" /></body>
      <title>Union Transformations and Duplicate Rows</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,801cefae-7de4-4e1c-9ad4-115c70c2813e.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/tpNgDz3l_lY/PermaLink,guid,801cefae-7de4-4e1c-9ad4-115c70c2813e.aspx</link>
      <pubDate>Mon, 09 Nov 2009 14:41:31 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="MARGIN: 0px 1em 1em" height="50%" src="http://www.miky-schreiber.com/blog/content/binary/horseshoe.jpg" width="25%" align=left&gt;In
both SSIS and Informatica, the union transformation doesn't delete duplicate rows.
In SSIS it's clear because the transformation is called "Union all", which reminds
us the union all statement in SQL which doesn't remove duplicate rows. The confusing
part is in Informatica, where the transformation is called Union although it doesn't
remove duplicates. One of my teammates got confused this week so I thought it's worth
blogging about. 
&lt;br&gt;
&lt;br&gt;
One more tip about ETLs with union transformations: When you'll investigate, maintain
or fix ETL it will be much help if you'll know where each row came from. That's why
I recommend adding a column named "src" or something like that and store there the
source of the row before the union happened.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=801cefae-7de4-4e1c-9ad4-115c70c2813e" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,801cefae-7de4-4e1c-9ad4-115c70c2813e.aspx</comments>
      <category>BI;BI/Informatica;BI/SQL Server 2005;BI/SQL Server 2005/Integration Services;BI/SQL Server 2008;BI/SQL Server 2008/Integration Services</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,801cefae-7de4-4e1c-9ad4-115c70c2813e.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=03a8f9ca-790a-4e8a-91e3-f25ea1a32c94</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,03a8f9ca-790a-4e8a-91e3-f25ea1a32c94.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,03a8f9ca-790a-4e8a-91e3-f25ea1a32c94.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=03a8f9ca-790a-4e8a-91e3-f25ea1a32c94</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img style="MARGIN: 0px 1em 1em" src="http://www.miky-schreiber.com/blog/content/binary/policeman.jpg" align="left" />
        <p>
Lucky for me, I have the opportunity to work with more than one ETL tool in my daily
work. In the far past, I worked much with DTS and PL/SQL packages (which is an ETL,
but not exactly a tool). Nowadays I work both with SSIS and Informatica so I
can compare them in several aspects. I don't think that one is better than the other.
It's just that they have different approaches to the ETL mechanism. Anyway, I always
expect that the data transformations will behave the same in every tool and I
found one transformation that behaves differently between the tools - the Router.
</p>
        <p>
The Informatica's Router, if you're not familiar with, receives a data row and
routes it a specific data flow. Its parallel transformation in SSIS is the Conditional
Split. As I said, I always thought that they behave the same. In both transformations
you provide boolean expressions that determine where the row will be routed. The difference
is that in SSIS, "<em>each input row can be sent to only one output, that being the
output for the first condition that evaluates to true</em>" (from SSIS's documentation).
In programmer's words, it behaves like switch-case statement with break in each condition.
In Informatica, <em>"If a row meets more than one group filter condition, the Integration
Service passes this row multiple times</em>" (from Informatica's documentation). Back
to the programmer's language, it's like switch-case statement with no break inside
the conditions.
</p>
        <p>
If you know other transformation that behaves different between ETL tools, I'll be
happy to know.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=03a8f9ca-790a-4e8a-91e3-f25ea1a32c94" />
      <xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/ZqREpaaCMuE" height="1" width="1" /></body>
      <title>Different Router behaviour in SSIS and Informatica</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,03a8f9ca-790a-4e8a-91e3-f25ea1a32c94.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/ZqREpaaCMuE/PermaLink,guid,03a8f9ca-790a-4e8a-91e3-f25ea1a32c94.aspx</link>
      <pubDate>Tue, 27 Oct 2009 14:10:34 GMT</pubDate>
      <description>&lt;img style="MARGIN: 0px 1em 1em" src="http://www.miky-schreiber.com/blog/content/binary/policeman.jpg" align=left&gt; 
&lt;p&gt;
Lucky for me, I have the opportunity to work with more than one ETL tool in my daily
work. In the far past, I worked much with DTS and PL/SQL packages (which is an ETL,
but not exactly a tool). Nowadays I work both with&amp;nbsp;SSIS and Informatica so I
can compare them in several aspects. I don't think that one is better than the other.
It's just that they have different approaches to the ETL mechanism. Anyway, I always
expect that the data transformations will behave the same in every tool&amp;nbsp;and I
found one transformation that behaves differently between the tools - the Router.
&lt;/p&gt;
&lt;p&gt;
The&amp;nbsp;Informatica's Router, if you're not familiar with, receives a data row and
routes it a specific data flow. Its parallel transformation in SSIS is the Conditional
Split. As I said, I always thought that they behave the same. In both transformations
you provide boolean expressions that determine where the row will be routed. The difference
is that in SSIS, "&lt;em&gt;each input row can be sent to only one output, that being the
output for the first condition that evaluates to true&lt;/em&gt;" (from SSIS's documentation).
In programmer's words, it behaves like switch-case statement with break in each condition.
In Informatica, &lt;em&gt;"If a row meets more than one group filter condition, the Integration
Service passes this row multiple times&lt;/em&gt;" (from Informatica's documentation). Back
to the programmer's language, it's like switch-case statement with no break inside
the conditions.
&lt;/p&gt;
&lt;p&gt;
If you know other transformation that behaves different between ETL tools, I'll be
happy to know.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=03a8f9ca-790a-4e8a-91e3-f25ea1a32c94" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,03a8f9ca-790a-4e8a-91e3-f25ea1a32c94.aspx</comments>
      <category>BI;BI/Informatica;BI/SQL Server 2005;BI/SQL Server 2005/Integration Services;BI/SQL Server 2008;BI/SQL Server 2008/Integration Services</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,03a8f9ca-790a-4e8a-91e3-f25ea1a32c94.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=a0eb7d43-c389-43fc-90ba-59df85f0f526</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,a0eb7d43-c389-43fc-90ba-59df85f0f526.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,a0eb7d43-c389-43fc-90ba-59df85f0f526.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a0eb7d43-c389-43fc-90ba-59df85f0f526</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img style="MARGIN: 0px 1em 1em" src="http://www.miky-schreiber.com/blog/content/binary/OracleSiebelLogo.jpg" align="left" />
        <p>
We're now starting to work with OBIEE (aka Siebel Analytics) as our main reporting
tool. Our vision is to completely replace it with the old Oracle Discoverer, who will
be soon out of Oracle's support. As I'll go on and on with OBIEE, I'll post here things
you might want to know. Even if you don't work with this tool you can open your mind
and get familiar with new stuff.
</p>
        <p>
My first experience with OBIEE - the installation, was not a great fun. The main problem
was the error: <em>Oracle Business Intelligence is not supported on this Windows version.
Oracle Business Intelligence is only supported on Windows XP x86, Windows 2003 x86,
Windows 2003 AMD64, Windows 2003 EM64T, Windows Vista x86, Windows Vista AMD64, Windows
Vista EM64T, and Windows 2000 x86.</em></p>
        <p>
The problem is that the installation can't find the windows version because systeminfo
is not working. Try to run c:\windows\system32\systeminfo.exe. If you get an
error about framedyn.dll, this is exactly the problem. Copy this file from the wbem
sub-directory to the system32 directory. Try to run again systeminfo and you'll see
it's running. Make sure the PATH environment variable contains the system32 directory
and that's it.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=a0eb7d43-c389-43fc-90ba-59df85f0f526" />
      <xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/wCHUrDHRfuQ" height="1" width="1" /></body>
      <title>OBIEE Installation Windows XP issue</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,a0eb7d43-c389-43fc-90ba-59df85f0f526.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/wCHUrDHRfuQ/PermaLink,guid,a0eb7d43-c389-43fc-90ba-59df85f0f526.aspx</link>
      <pubDate>Sun, 25 Oct 2009 07:44:38 GMT</pubDate>
      <description>&lt;img style="MARGIN: 0px 1em 1em" src="http://www.miky-schreiber.com/blog/content/binary/OracleSiebelLogo.jpg" align=left&gt; 
&lt;p&gt;
We're now starting to work with OBIEE (aka Siebel Analytics) as our main reporting
tool. Our vision is to completely replace it with the old Oracle Discoverer, who will
be soon out of Oracle's support. As I'll go on and on with OBIEE, I'll post here things
you might want to know. Even if you don't work with this tool you can open your mind
and get familiar with new stuff.
&lt;/p&gt;
&lt;p&gt;
My first experience with OBIEE - the installation, was not a great fun. The main problem
was the error: &lt;em&gt;Oracle Business Intelligence is not supported on this Windows version.
Oracle Business Intelligence is only supported on Windows XP x86, Windows 2003 x86,
Windows 2003 AMD64, Windows 2003 EM64T, Windows Vista x86, Windows Vista AMD64, Windows
Vista EM64T, and Windows 2000 x86.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
The problem is that the installation can't find the windows version because systeminfo
is not working.&amp;nbsp;Try to run c:\windows\system32\systeminfo.exe. If you get an
error about framedyn.dll, this is exactly the problem. Copy this file from the wbem
sub-directory to the system32 directory. Try to run again systeminfo and you'll see
it's running. Make sure the PATH environment variable contains the system32 directory
and that's it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=a0eb7d43-c389-43fc-90ba-59df85f0f526" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,a0eb7d43-c389-43fc-90ba-59df85f0f526.aspx</comments>
      <category>BI;BI/Oracle;BI/Oracle/OBIEE</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,a0eb7d43-c389-43fc-90ba-59df85f0f526.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=3ded0f0b-56ab-4086-9a38-8ca0d784b6dd</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,3ded0f0b-56ab-4086-9a38-8ca0d784b6dd.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,3ded0f0b-56ab-4086-9a38-8ca0d784b6dd.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3ded0f0b-56ab-4086-9a38-8ca0d784b6dd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Two weeks ago I did a talk about SCD. <a href="http://www.miky-schreiber.com/Blog/content/binary/Slowly%20Changing%20Dimensions.ppt">Here</a> is
the presentation.<br />
I think that even if you're doing BI (design or development) for quite a while you'll
find this presention resourceful and maybe you'll learn a thing or two...<br />
Have a nice learning!<img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=3ded0f0b-56ab-4086-9a38-8ca0d784b6dd" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/wHA85odiGDw" height="1" width="1" /></body>
      <title>Slowly Changing Dimensions Presentation</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,3ded0f0b-56ab-4086-9a38-8ca0d784b6dd.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/wHA85odiGDw/PermaLink,guid,3ded0f0b-56ab-4086-9a38-8ca0d784b6dd.aspx</link>
      <pubDate>Tue, 13 Oct 2009 14:38:41 GMT</pubDate>
      <description>Two weeks ago I did a talk about SCD. &lt;a href="http://www.miky-schreiber.com/Blog/content/binary/Slowly%20Changing%20Dimensions.ppt"&gt;Here&lt;/a&gt; is
the presentation.&lt;br&gt;
I think that even if you're doing BI (design or development) for quite a while you'll
find this presention resourceful and maybe you'll learn a thing or two...&lt;br&gt;
Have a nice learning!&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=3ded0f0b-56ab-4086-9a38-8ca0d784b6dd" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,3ded0f0b-56ab-4086-9a38-8ca0d784b6dd.aspx</comments>
      <category>BI;BI/DataWarehousing</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,3ded0f0b-56ab-4086-9a38-8ca0d784b6dd.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=d8eb1331-dfd7-4c1a-823d-4e34c20565e3</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,d8eb1331-dfd7-4c1a-823d-4e34c20565e3.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,d8eb1331-dfd7-4c1a-823d-4e34c20565e3.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d8eb1331-dfd7-4c1a-823d-4e34c20565e3</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Last August, I've seen an Informatica webinar featuring Dr. Ralph Kimball (you can
see it <a href="http://www12.informatica.com/livemeetings/Kimball_Webinar_Q109.asx">here</a>).
The topic of the webinar was "Reverse the flow of Data Warehouse Design to Ensure
Success". In order to make long things short, what he says is that in the DWH's first
steps you don't and can't know what are the full requirements. This is quite problematic,
because the first steps of the DWH - its design - are the most crucial steps, where
you take the most important decisions which will be hard to change later. His solution
is revolutionary and sounds a little bit hallucinatory - Start with the website. After
you have the front-end finished, whether it's a dashboard website or just a simple
tabular report, and you have the customer's approval, you can start the DWH design
and you know exactly what you should do and what you should not.
</p>
        <p>
Thinking of that, we decided that he's right but it's too much. The cost of building
a website with a data source behind it which will be changed 100 times in a short
period is very high. Instead, we're working in a defferent method - We are working
with <a href="http://en.wikipedia.org/wiki/Mockup">Mockups</a>.
</p>
        <p>
Our mockups are PowerPoint presentations which mock the dashboard website that will
be the project's front-end. We're using a lot of buttons and hyperlinks between the
different slides in order to create a feeling of a real website with navigation and
interactivity. When we show it to the customer and tell him that this is what his
dashboard will look like, at first he's very happy and then the new requirement's
phase begin: Can I have this button here? This one more slicer there? What about replacing
this chart with this one? etc. In PowerPoint presentation, making these changes is
very easy and after a couple of days we have a good understanding of how our front-end
will look like. Threfore, we fully understand how our DWH will look like. This
is a <strong>great</strong> method, I recommend you'll start using it in your next
project. Try and see for yourself!
</p>
There are some more points you need to know before starting using it: 
<ul><li>
You're not have to use Power Point for this. Visio and even Paint Brush can assist
you. Nevertheless, I recommend you to use a tool for this (remember that the mockup
will be changing a lot). There are <a href="http://www.google.co.il/search?q=visio+open+source+alternative">many
free &amp; open-source tools</a> to do it.</li><li>
You may consider to have the mockup to be your contract with the customer. On the
other hand, the final result may look a little bit different. You can draw everything
in PowerPoint but in the reality things may be hard to implement.</li><li>
After finishing the design phase, don't go over and over to the mockup to keep it
updated. Again - The reality is stronger than the first design. When the project will
be finished, no-one will care about the mockup.</li></ul><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=d8eb1331-dfd7-4c1a-823d-4e34c20565e3" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/JxsvElsO4WA" height="1" width="1" /></body>
      <title>Let's Mockup</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,d8eb1331-dfd7-4c1a-823d-4e34c20565e3.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/JxsvElsO4WA/PermaLink,guid,d8eb1331-dfd7-4c1a-823d-4e34c20565e3.aspx</link>
      <pubDate>Thu, 24 Sep 2009 11:49:44 GMT</pubDate>
      <description>&lt;p&gt;
Last August, I've seen an Informatica webinar featuring Dr. Ralph Kimball (you can
see it &lt;a href="http://www12.informatica.com/livemeetings/Kimball_Webinar_Q109.asx"&gt;here&lt;/a&gt;).
The topic of the webinar was "Reverse the flow of Data Warehouse Design to Ensure
Success". In order to make long things short, what he says is that in the DWH's first
steps you don't and can't know what are the full requirements. This is quite problematic,
because the first steps of the DWH - its design - are the most crucial steps, where
you take the most important decisions which will be hard to change later. His solution
is revolutionary and sounds a little bit hallucinatory - Start with the website. After
you have the front-end finished, whether it's a dashboard website or just a simple
tabular report, and you have the customer's approval, you can start the DWH design
and you know exactly what you should do and what you should not.
&lt;/p&gt;
&lt;p&gt;
Thinking of that, we decided that he's right but it's too much. The cost of building
a website with a data source behind it which will be changed 100 times in a short
period is very high. Instead, we're working in a defferent method - We are working
with &lt;a href="http://en.wikipedia.org/wiki/Mockup"&gt;Mockups&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Our mockups are PowerPoint presentations which mock the dashboard website that will
be the project's front-end. We're using a lot of buttons and hyperlinks between the
different slides in order to create a feeling of a real website with navigation and
interactivity. When we show it to the customer and tell him that this is what his
dashboard will look like, at first he's very happy and then the new requirement's
phase begin: Can I have this button here? This one more slicer there? What about replacing
this chart with this one? etc. In PowerPoint presentation, making these changes is
very easy and after a couple of days we have a good understanding of how our front-end
will look like. Threfore, we&amp;nbsp;fully understand how our DWH will look like. This
is a &lt;strong&gt;great&lt;/strong&gt; method, I recommend you'll start using it in your next
project. Try and see for yourself!
&lt;/p&gt;
There are some more points you need to know before starting using it: 
&lt;ul&gt;
&lt;li&gt;
You're not have to use Power Point for this. Visio and even Paint Brush can assist
you. Nevertheless, I recommend you to use a tool for this (remember that the mockup
will be changing a lot). There are &lt;a href="http://www.google.co.il/search?q=visio+open+source+alternative"&gt;many
free &amp;amp; open-source tools&lt;/a&gt; to do it.&lt;/li&gt;
&lt;li&gt;
You may consider to have the mockup to be your contract with the customer. On the
other hand, the final result may look a little bit different. You can draw everything
in PowerPoint but in the reality things may be hard to implement.&lt;/li&gt;
&lt;li&gt;
After finishing the design phase, don't go over and over to the mockup to keep it
updated. Again - The reality is stronger than the first design. When the project will
be finished, no-one will care about the mockup.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=d8eb1331-dfd7-4c1a-823d-4e34c20565e3" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,d8eb1331-dfd7-4c1a-823d-4e34c20565e3.aspx</comments>
      <category>BI;BI/DataWarehousing</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,d8eb1331-dfd7-4c1a-823d-4e34c20565e3.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=3fbe370c-8fa9-45ea-9d11-559cd48ca61d</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,3fbe370c-8fa9-45ea-9d11-559cd48ca61d.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,3fbe370c-8fa9-45ea-9d11-559cd48ca61d.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3fbe370c-8fa9-45ea-9d11-559cd48ca61d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Panorama views with parameters are very common wherever mass Panorama-based development
is made. Some use it within websites and others let the users change the parameters
using Panorama WebAccess. When using such views within websites, a common thing that
we do is to change those parameters ourselves using the Panorama SDK, where the values
are based on the current status of the user, the current time or other parameters
which come from outer source such as XML files, Databases, etc.
</p>
        <p>
The main challenge when using parameters within web sites is that you must think
of end cases for the parameters' values. <strong>When you send a bad parameter to
a view using the SDK, the view will sometimes go off and it will stop responding to
other things you may do with it in the website</strong>. I'll describe it with a life-experience
example: We've built a website with panorama paramertized views. Some of the views
had FromDate and ToDate parameters, which define the time period for the view
to be sliced on. By the way, this is in fact an error by itself - we can use other
dedicated functions to do that as described <a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,8b8e0ab7-5fc8-48b1-9faa-34005f0e742d.aspx">here</a>.
The source of these parameters came from a database. The values inside the DB were
given from a power user which is the only one who can change them. In some cases,
the power user changed these values and the views weren't sliced at all. Debugging
it, we've seen that the period between FromDate and ToDate has no data at all so the
view wasn't changed. The problem was that once the view was trying to slice on
empty period and failed, it stopped responding to other actions (it can be also
changed from other controls on the page). So again - think of the end cases when
you create parameters-based views.
</p>
        <p>
What I written so far is easy to say, but sometimes you have to do it. The views have
to have parameters and sometimes they will get bad data from the users. We have no
control over it and we can't deny it. What can we do? A simple approach I use from
time to time is to create shadow views. A shadow view is a hidden view (or 1x1 pixel
sized) that cannot be seen by the user. Everything that the user tries to do on the
real view will be tested before that on runtime on the shadow view. Only if the action
succeeded on the shadow view it will be made on the real view. Otherwise, no action
will be made on the real view and instead the user will get a message (using Javascript's
alert() function, for example) describing why his request cannot be made. The way
to check if the user's action succeeded on the shadow view is using output from Panorama
SDK functions, but this subject is a little bit wider for this post and it's very
case-specific. There are no generic solutions for this problem that I know of, but
if I'll find something I'll write another post about it.
</p>
        <p>
To conclude: Think twice about end cases when using parameters inside your views.
If you have no choice use the shadow view approach. Write and run tests to check the
different values that you'll send to your views.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=3fbe370c-8fa9-45ea-9d11-559cd48ca61d" />
      <xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/DN2qa0o7b0c" height="1" width="1" /></body>
      <title>Panorama Views and Parameters End Cases</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,3fbe370c-8fa9-45ea-9d11-559cd48ca61d.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/DN2qa0o7b0c/PermaLink,guid,3fbe370c-8fa9-45ea-9d11-559cd48ca61d.aspx</link>
      <pubDate>Sat, 12 Sep 2009 21:13:01 GMT</pubDate>
      <description>&lt;p&gt;
Panorama views with parameters are very common wherever mass Panorama-based development
is made. Some use it within websites and others let the users change the parameters
using Panorama WebAccess. When using such views within websites, a common thing that
we do is to change those parameters ourselves using the Panorama SDK, where the values
are based on the current status of the user, the current time or other parameters
which come from outer source such as XML files, Databases, etc.
&lt;/p&gt;
&lt;p&gt;
The main&amp;nbsp;challenge when using parameters within web sites is that you must think
of end cases for the parameters' values. &lt;strong&gt;When you send a bad parameter to
a view using the SDK, the view will sometimes go off and it will stop responding to
other things you may do with it in the website&lt;/strong&gt;. I'll describe it with a life-experience
example: We've built a website with panorama paramertized views. Some of the views
had FromDate and ToDate parameters, which define the time&amp;nbsp;period for the view
to be sliced on. By the way, this is in fact an error by itself - we can use other
dedicated functions to do that as described &lt;a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,8b8e0ab7-5fc8-48b1-9faa-34005f0e742d.aspx"&gt;here&lt;/a&gt;.
The source of these parameters came from a database. The values inside the DB were
given from a power user which is the only one who can change them. In some cases,
the power user changed these values and the views weren't sliced at all. Debugging
it, we've seen that the period between FromDate and ToDate has no data at all so the
view wasn't changed. The problem was that&amp;nbsp;once the view was trying to slice on
empty period and failed, it&amp;nbsp;stopped responding to other actions (it can be also
changed&amp;nbsp;from other controls on the page). So again - think of the end cases when
you create parameters-based views.
&lt;/p&gt;
&lt;p&gt;
What I written so far is easy to say, but sometimes you have to do it. The views have
to have parameters and sometimes they will get bad data from the users. We have no
control over it and we can't deny it. What can we do? A simple approach I use from
time to time is to create shadow views. A shadow view is a hidden view (or 1x1 pixel
sized) that cannot be seen by the user. Everything that the user tries to do on the
real view will be tested before that on runtime on the shadow view. Only if the action
succeeded on the shadow view it will be made on the real view. Otherwise, no action
will be made on the real view and instead the user will get a message (using Javascript's
alert() function, for example) describing why his request cannot be made. The way
to check if the user's action succeeded on the shadow view is using output from Panorama
SDK functions, but this subject is a little bit wider for this post and it's very
case-specific. There are no generic solutions for this problem that I know of, but
if I'll find something I'll write another post about it.
&lt;/p&gt;
&lt;p&gt;
To conclude: Think twice about end cases when using parameters inside your views.
If you have no choice use the shadow view approach. Write and run tests to check the
different values that you'll send to your views.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=3fbe370c-8fa9-45ea-9d11-559cd48ca61d" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,3fbe370c-8fa9-45ea-9d11-559cd48ca61d.aspx</comments>
      <category>BI;BI/Panorama</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,3fbe370c-8fa9-45ea-9d11-559cd48ca61d.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=4da4297b-ff02-45cb-88b6-ba9b0a4ba785</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,4da4297b-ff02-45cb-88b6-ba9b0a4ba785.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,4da4297b-ff02-45cb-88b6-ba9b0a4ba785.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4da4297b-ff02-45cb-88b6-ba9b0a4ba785</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Make sure that all the Panorama developers has the same version of Panorama NovaView
Desktop and that it's the same version of the Panorama server. In addition, check
that all the Panorama servers (meaning development server, production server, etc.)
also have the same Panorama version. It's very unpleasant when you copy the views
from the development server to the production server while installing your new or updated
BI project just to find out that some of the views don't show because of that.
That's right - it won't cause all of the views to malfunction, it will only affect
some. That's the dangerous thing and this is why you need to double check it immiedetly.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=4da4297b-ff02-45cb-88b6-ba9b0a4ba785" />
      <xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/aOULXKKl5tM" height="1" width="1" /></body>
      <title>Panorama Versions</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,4da4297b-ff02-45cb-88b6-ba9b0a4ba785.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/aOULXKKl5tM/PermaLink,guid,4da4297b-ff02-45cb-88b6-ba9b0a4ba785.aspx</link>
      <pubDate>Thu, 27 Aug 2009 13:05:43 GMT</pubDate>
      <description>&lt;p&gt;
Make sure that all the Panorama developers has the same version of Panorama NovaView
Desktop and that it's the same version of the Panorama server. In addition, check
that all the Panorama servers (meaning development server, production server, etc.)
also have the same Panorama version. It's very unpleasant when you copy the views
from the development server to the production server while installing your new or&amp;nbsp;updated
BI project just to&amp;nbsp;find out that some of the views don't show because of that.
That's right - it won't cause all of the views to malfunction, it will only affect
some. That's the dangerous thing and this is why you need to double check it immiedetly.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=4da4297b-ff02-45cb-88b6-ba9b0a4ba785" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,4da4297b-ff02-45cb-88b6-ba9b0a4ba785.aspx</comments>
      <category>BI;BI/Panorama</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,4da4297b-ff02-45cb-88b6-ba9b0a4ba785.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=a407116c-be26-48e5-bb83-ef8bf84de3d0</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,a407116c-be26-48e5-bb83-ef8bf84de3d0.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,a407116c-be26-48e5-bb83-ef8bf84de3d0.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a407116c-be26-48e5-bb83-ef8bf84de3d0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
in my <a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,1f2e8d76-c4a1-4f1f-9e9d-5b3ba794b092.aspx">last
post</a> I recommended you to learn about the batch mode feature of Panorama. There's
one more thing you've got to know: Check you're code flow very well because if you'll
use batch mode within batch mode, meaning that you'll call the EnterBatchCommandMode
function after you did it previously, the view will get stuck. Be sure that you don't
have such a case.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=a407116c-be26-48e5-bb83-ef8bf84de3d0" />
      <xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/cLFNfpikRJU" height="1" width="1" /></body>
      <title>One More Thing About Batch Mode</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,a407116c-be26-48e5-bb83-ef8bf84de3d0.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/cLFNfpikRJU/PermaLink,guid,a407116c-be26-48e5-bb83-ef8bf84de3d0.aspx</link>
      <pubDate>Thu, 27 Aug 2009 12:51:37 GMT</pubDate>
      <description>&lt;p&gt;
in my &lt;a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,1f2e8d76-c4a1-4f1f-9e9d-5b3ba794b092.aspx"&gt;last
post&lt;/a&gt; I recommended you to learn about the batch mode feature of Panorama. There's
one more thing you've got to know: Check you're code flow very well because if you'll
use batch mode within batch mode, meaning that you'll call the EnterBatchCommandMode
function after you did it previously, the view will get stuck. Be sure that you don't
have such a case.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=a407116c-be26-48e5-bb83-ef8bf84de3d0" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,a407116c-be26-48e5-bb83-ef8bf84de3d0.aspx</comments>
      <category>BI;BI/Panorama</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,a407116c-be26-48e5-bb83-ef8bf84de3d0.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=1f2e8d76-c4a1-4f1f-9e9d-5b3ba794b092</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,1f2e8d76-c4a1-4f1f-9e9d-5b3ba794b092.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,1f2e8d76-c4a1-4f1f-9e9d-5b3ba794b092.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1f2e8d76-c4a1-4f1f-9e9d-5b3ba794b092</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">After going to production, we encountered
a serious bug where a web page simply stucked and made the browser freeze. This page
is a little bit complex: It contains three views with interaction between them,
so we had much trouble with this page in the past. We weren't suprised to hear that
this page causes us more trouble, so we went on to debugging.<br />
One of the views in this page get two parameters from the web page (using Panorama's
SDK) - fromDate and toDate, which define a time interval for the view to slice on.
After debugging, we've found that the problem was that after updating the fromDate
parameter and before updating the toDate parameter, the view had no rows left. When
trying to update the toDate parameters in the view with no rows, it made the browser
stuck.<br /><p>
The solution is to make the parameters update in one action. There are two ways of
doing this: 
<br />
The first one is to use the CallUpdateParametersEx with number of parameters. You
can update many parameters in one function call (look in the SDK documentation). The
problem with this solution is that the code is not readable.<br />
The second and better solution is to use the EnterBatchCommandMode and LeaveBatchCommandMode
functions to make the parameters update in one transaction. This way, the code is
much more readable. You can update every parameter in its own CallUpdateParametersEx
call. The usage of this function is very simple: Call the EnterBatchCommandMode function
before the parameters update and call the LeaveBatchCommandMode after that.
</p><p>
I'm sure that there are more scenarios where this concept can be helpful, so it's
important to get familiar with. 
</p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=1f2e8d76-c4a1-4f1f-9e9d-5b3ba794b092" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/N03tmImm8XE" height="1" width="1" /></body>
      <title>Usage of Batch Mode in Panorama Web Development</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,1f2e8d76-c4a1-4f1f-9e9d-5b3ba794b092.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/N03tmImm8XE/PermaLink,guid,1f2e8d76-c4a1-4f1f-9e9d-5b3ba794b092.aspx</link>
      <pubDate>Wed, 19 Aug 2009 10:24:15 GMT</pubDate>
      <description>After going to production, we encountered a serious bug where a web page simply stucked and made the browser freeze. This page is a little bit complex:&amp;nbsp;It contains three views with interaction between them, so we had much trouble with this page in the past. We weren't suprised to hear that this page causes us more trouble, so we went on to debugging.&lt;br&gt;
One of the views in this page get two parameters from the web page (using Panorama's
SDK) - fromDate and toDate, which define a time interval for the view to slice on.
After debugging, we've found that the problem was that after updating the fromDate
parameter and before updating the toDate parameter, the view had no rows left. When
trying to update the toDate parameters in the view with no rows, it made the browser
stuck.&lt;br&gt;
&lt;p&gt;
The solution is to make the parameters update in one action. There are two ways of
doing this: 
&lt;br&gt;
The first one is to use the CallUpdateParametersEx with number of parameters. You
can update many parameters in one function call (look in the SDK documentation). The
problem with this solution is that the code is not readable.&lt;br&gt;
The second and better solution is to use the EnterBatchCommandMode and LeaveBatchCommandMode
functions to make the parameters update in one transaction. This way, the code is
much more readable. You can update every parameter in its own CallUpdateParametersEx
call. The usage of this function is very simple: Call the EnterBatchCommandMode function
before the parameters update and call the LeaveBatchCommandMode after that.
&lt;/p&gt;
&lt;p&gt;
I'm sure that there are more scenarios where this concept can be helpful, so it's
important to get familiar with. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=1f2e8d76-c4a1-4f1f-9e9d-5b3ba794b092" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,1f2e8d76-c4a1-4f1f-9e9d-5b3ba794b092.aspx</comments>
      <category>BI;BI/Panorama</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,1f2e8d76-c4a1-4f1f-9e9d-5b3ba794b092.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=8b8e0ab7-5fc8-48b1-9faa-34005f0e742d</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,8b8e0ab7-5fc8-48b1-9faa-34005f0e742d.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,8b8e0ab7-5fc8-48b1-9faa-34005f0e742d.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8b8e0ab7-5fc8-48b1-9faa-34005f0e742d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">This post is a collection of some
tips we collected in the last week regarding Panorama views development: 
<ul><li>
You should always check that the view is loaded with data. Sometimes it will be loaded
with no data because of lack of data in the DWH or because the view is sliced on a
member with no data. It confuses the applet and from that point it won't always continue
to function. From Dashboards developer point of view, if the view is loaded with no
data, replace the view with a descriptive message. Dashboard page with "No Data" message
will make the users think that something is very wrong with the BI system.</li><li>
Panorama has some issues with formats. Define the formats in the OLAP. Panorama
will use them as defined in the OLAP.</li><li>
Avoid as much as you can from sending parameters to views. When adding parameter to
the view, think twice if you have a way of getting this parameter's data from the
OLAP. You'll be suprised to find out that in many cases you'll be able to do that.</li><li>
If you slice your view as a result of a user event, try not to use parameters. Try
to use the callFilterGridMembers function or callSliceByMember function.</li><li>
Slicing a view on a member which has no data can cause the view to stop working. What
you can do is to create a hidden view (1 pixel x 1 pixel) which is the same as the
first view. Whenever you want to slice the view, make the slicing on the
hidden view first. Using the Panorama's SDK, find if the view has data and only then
slice the original view.</li></ul>
Thanks to Itay Segal for the tips and for the help.<img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=8b8e0ab7-5fc8-48b1-9faa-34005f0e742d" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/-bt8UdLTpXE" height="1" width="1" /></body>
      <title>Panorama Tips for Developers</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,8b8e0ab7-5fc8-48b1-9faa-34005f0e742d.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/-bt8UdLTpXE/PermaLink,guid,8b8e0ab7-5fc8-48b1-9faa-34005f0e742d.aspx</link>
      <pubDate>Sun, 26 Jul 2009 13:25:33 GMT</pubDate>
      <description>This post is a collection of&amp;nbsp;some tips we collected in the last week regarding Panorama views development: 
&lt;ul&gt;
&lt;li&gt;
You should always check that the view is loaded with data. Sometimes it will be loaded
with no data because of lack of data in the DWH or because the view is sliced on a
member with no data. It confuses the applet and from that point it won't always continue
to function. From Dashboards developer point of view, if the view is loaded with no
data, replace the view with a descriptive message. Dashboard page with "No Data" message
will make the users think that something is very wrong with the BI system.&lt;/li&gt;
&lt;li&gt;
Panorama has&amp;nbsp;some issues with formats. Define the formats in the OLAP. Panorama
will use them as&amp;nbsp;defined in the OLAP.&lt;/li&gt;
&lt;li&gt;
Avoid as much as you can from sending parameters to views. When adding parameter to
the view, think twice if you have a way of getting this parameter's data from the
OLAP. You'll be suprised to find out that in many cases you'll be able to do that.&lt;/li&gt;
&lt;li&gt;
If you slice your view as a result of a user event, try not to use parameters. Try
to use the callFilterGridMembers function or callSliceByMember function.&lt;/li&gt;
&lt;li&gt;
Slicing a view on a member which has no data can cause the view to stop working. What
you can do is to create a hidden view (1 pixel x 1 pixel) which is the same as the
first view. Whenever you want to slice the view, make&amp;nbsp;the slicing&amp;nbsp;on the
hidden view first. Using the Panorama's SDK, find if the view has data and only then
slice the original view.&lt;/li&gt;
&lt;/ul&gt;
Thanks to Itay Segal for the tips and for the help.&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=8b8e0ab7-5fc8-48b1-9faa-34005f0e742d" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,8b8e0ab7-5fc8-48b1-9faa-34005f0e742d.aspx</comments>
      <category>BI;BI/Panorama;Tips &amp; Tricks</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,8b8e0ab7-5fc8-48b1-9faa-34005f0e742d.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=327f334e-c8b0-4662-b013-46ad75cd4e77</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,327f334e-c8b0-4662-b013-46ad75cd4e77.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,327f334e-c8b0-4662-b013-46ad75cd4e77.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=327f334e-c8b0-4662-b013-46ad75cd4e77</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">What will happen when new members are added
to the dimension which is shown in your Panorama chart?<br />
The answer is one of the following:<br />
A. Scroll bar will be added in the bottom side of the chart.<br />
B. The chart will expand itself. If the chart is in a dashboards page, it may ruin
the page because the view will extend beyond its area. 
<p>
That's why Panorama's default setting for "Auto Select all X-axis Members to Chart"
(and Y) is false, meaning that the chart won't expand even if new data arrives.
</p>
The other side of this default setting can be bad. Last week, we had a situation
where one of our dashboard pages acted in a strange way: The page contained two views,
where the first view is a crosstab and the second one is a chart. When the user clicked
on a row in the first view, it sliced the second view on the desired member in the
Y axis. What happened is that after the chart showed two members in the X axis, for
example, It didn't show three or four members in the X axis, no matter what. We didn't
underatand what went wrong and went home with sad faces on Friday. This morning, we
realized that we forgot to enable the Auto-Select setting.<img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=327f334e-c8b0-4662-b013-46ad75cd4e77" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/SsaEeqHQcnQ" height="1" width="1" /></body>
      <title>Auto-Select Axis Members in Panorama</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,327f334e-c8b0-4662-b013-46ad75cd4e77.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/SsaEeqHQcnQ/PermaLink,guid,327f334e-c8b0-4662-b013-46ad75cd4e77.aspx</link>
      <pubDate>Sun, 26 Jul 2009 13:01:16 GMT</pubDate>
      <description>What will happen when new members are added to the dimension which is shown in your Panorama chart?&lt;br&gt;
The answer is&amp;nbsp;one of the following:&lt;br&gt;
A. Scroll bar will be added in the bottom side of the chart.&lt;br&gt;
B. The chart will expand itself. If the chart is in a dashboards page, it may ruin
the page because the view will extend beyond its area. 
&lt;p&gt;
That's why Panorama's default setting for "Auto Select all X-axis Members to Chart"
(and Y) is false, meaning that the chart won't expand even if new data arrives.
&lt;/p&gt;
The other side of this default setting&amp;nbsp;can be bad. Last week, we had a situation
where one of our dashboard pages acted in a strange way: The page contained two views,
where the first view is a crosstab and the second one is a chart. When the user clicked
on a row in the first view, it sliced the second view on the desired member in the
Y axis. What happened is that after the chart showed two members in the X axis, for
example, It didn't show three or four members in the X axis, no matter what. We didn't
underatand what went wrong and went home with sad faces on Friday. This morning, we
realized that we forgot to enable the Auto-Select setting.&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=327f334e-c8b0-4662-b013-46ad75cd4e77" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,327f334e-c8b0-4662-b013-46ad75cd4e77.aspx</comments>
      <category>BI;BI/Panorama;Tips &amp; Tricks</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,327f334e-c8b0-4662-b013-46ad75cd4e77.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=07245596-c190-485c-808f-7699f10cb928</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,07245596-c190-485c-808f-7699f10cb928.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,07245596-c190-485c-808f-7699f10cb928.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=07245596-c190-485c-808f-7699f10cb928</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img style="MARGIN: 0px 1em 1em" src="http://www.miky-schreiber.com/blog/content/binary/oldpc.gif" align="left" />The
BI team and the source system team has a great bond between them. When the source
system's team wants to change the system's logic or the physical tables, they must
inform the BI team as soon as possible, because the BI team must change their system
too. Otherwise, the ETL will fail and the users will see old or no data, or in the
worse case the users will see incorrect data. 
<p>
On the other hand, when the BI system shows data which is not the same as the data
in the source system, the responsibility of showing that the BI system is OK is on
the BI team's shoulders. It needs to investigate the problem and see if the error
is on the BI side or in the source system side. Maybe there is no error at all and
the difference is caused by difference in the logic.
</p><p>
Sometimes, we (the BI team, of course) investigates the data problems and find that
the error resides in the source system itself. Then, we need to make sure that the
error is fixed in the system, whether by the IT staff or by the power users. The important
point here, and this is why I decided to write this post, is that the change must
be done first in the development environment of the source system. Then, we'll run
the ETL process and see that everything is fixed. This is important because sometimes
we think that the change will make things right and it's not. That's why everything
should be changed in the development environments first in both systems.
</p><p>
Only after we've seen that the data is fine, we can make the change in the production
environments. Last tip: <strong>Make sure that the change is also made in the source
system's production environment</strong>. Sometimes the time interval between these
events is long and the source system's team just forgets all about it. Write it down
as a task before going to production.
</p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=07245596-c190-485c-808f-7699f10cb928" /><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/NeBYoM21gPI" height="1" width="1" /></body>
      <title>The BI Team and the Source System's Team Bond</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,07245596-c190-485c-808f-7699f10cb928.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/NeBYoM21gPI/PermaLink,guid,07245596-c190-485c-808f-7699f10cb928.aspx</link>
      <pubDate>Mon, 20 Jul 2009 09:24:28 GMT</pubDate>
      <description>&lt;img style="MARGIN: 0px 1em 1em" src="http://www.miky-schreiber.com/blog/content/binary/oldpc.gif" align=left&gt;The
BI team and the source system team has a great bond between them. When the source
system's team wants to change the system's logic or the physical tables, they must
inform the BI team as soon as possible, because the BI team must change their system
too. Otherwise, the ETL will fail and the users will see old or no data, or in the
worse case the users will see incorrect data. 
&lt;p&gt;
On the other hand, when the BI system shows data which is not the same as the data
in the source system, the responsibility of showing that the BI system is OK is on
the BI team's shoulders. It needs to investigate the problem and see if the error
is on the BI side or in the source system side. Maybe there is no error at all and
the difference is caused by difference in the logic.
&lt;/p&gt;
&lt;p&gt;
Sometimes, we (the BI team, of course) investigates the data problems and find that
the error resides in the source system itself. Then, we need to make sure that the
error is fixed in the system, whether by the IT staff or by the power users. The important
point here, and this is why I decided to write this post, is that the change must
be done first in the development environment of the source system. Then, we'll run
the ETL process and see that everything is fixed. This is important because sometimes
we think that the change will make things right and it's not. That's why everything
should be changed in the development environments first in both systems.
&lt;/p&gt;
&lt;p&gt;
Only after we've seen that the data is fine, we can make the change in the production
environments. Last tip: &lt;strong&gt;Make sure that the change is also made in the source
system's production environment&lt;/strong&gt;. Sometimes the time interval between these
events is long and the source system's team just forgets all about it. Write it down
as a task before going to production.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=07245596-c190-485c-808f-7699f10cb928" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,07245596-c190-485c-808f-7699f10cb928.aspx</comments>
      <category>BI;BI/DataWarehousing;Tips &amp; Tricks</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,07245596-c190-485c-808f-7699f10cb928.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=d45d0c48-5f6d-4eba-804b-f94441619681</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,d45d0c48-5f6d-4eba-804b-f94441619681.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,d45d0c48-5f6d-4eba-804b-f94441619681.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d45d0c48-5f6d-4eba-804b-f94441619681</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img style="MARGIN: 0px 1em 1em 0px" src="http://www.miky-schreiber.com/Blog/content/binary/source.jpg" align="left" border="0" />
        <p>
          <font size="2">Last Week we had a funny case which took us much time to understand.</font>
        </p>
        <p>
          <font size="2">In our development environment, we like to have the same source data
for a long period of time. This way we're familiar with our data and we can expect
the numeric results in the higher layers (OLAP, dashboard, etc.). When we have a stable
environment and we think that our system gives the correct data, we ask our infrastructure
team to refresh our sources, meaning that they bring new production data to the development
environment.</font>
        </p>
        <p>
          <font size="2">The situation that we had last week is that we refreshed our sources
and from that point the data didn't make any sense. We asked the infrastructure team
if they're sure they refreshed the data and they said they are sure. We checked the
system and the data many times and seen that the data is different from what we had
but still it didn't make any sense.</font>
        </p>
        <p>
          <font size="2">After much frustration, one of us made a suggestion to write sql query
in this form:<br />
select max(some_date_field) from fact_table</font>
        </p>
        <p>
Then we were all amazed. After much time of sisyphean work we realized that our
data is not new at all. Moreover - our old data was old too. The maximum date in our
main fact table was <strong>half a year ago</strong>. The reason was that we took
our data from a legacy system which runs a job that exports their tables into
files, and our infrastructure team imports these files into our source tables. The
problem was that no-one ran the job so the files themselves were old, meaning that
our refresh activity means nothing.
</p>
        <p>
          <u>Conclusion</u>: Never trust your sources. Always run a sql query like mentioned
above to check that you have recent data and that the data you think you have is the
data you have. You can think of more queries that validates that what you have is
what you expect to have. Run them every morning to make sure you're ground is stable.
It's only a matter of seconds and it's worth it.
</p>
        <p>
May the source be with you.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=d45d0c48-5f6d-4eba-804b-f94441619681" />
      <xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/MikySchreiberBlog/~4/EHBPNtwXIhs" height="1" width="1" /></body>
      <title>Don't Trust Your Sources</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,d45d0c48-5f6d-4eba-804b-f94441619681.aspx</guid>
      <link>http://feedproxy.google.com/~r/MikySchreiberBlog/~3/EHBPNtwXIhs/PermaLink,guid,d45d0c48-5f6d-4eba-804b-f94441619681.aspx</link>
      <pubDate>Mon, 20 Jul 2009 07:50:02 GMT</pubDate>
      <description>&lt;img style="MARGIN: 0px 1em 1em 0px" src="http://www.miky-schreiber.com/Blog/content/binary/source.jpg" align=left border=0&gt; 
&lt;p&gt;
&lt;font size=2&gt;Last Week we had a funny case which took us much time to understand.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;In our development environment, we like to have the same source data
for a long period of time. This way we're familiar with our data and we can expect
the numeric results in the higher layers (OLAP, dashboard, etc.). When we have a stable
environment and we think that our system gives the correct data, we ask our infrastructure
team to refresh our sources, meaning that they bring new production data to the development
environment.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;The situation that we had last week is that we refreshed our sources
and from that point the data didn't make any sense. We asked the infrastructure team
if they're sure they refreshed the data and they said they are sure. We checked the
system and the data many times and seen that the data is different from what we had
but still it didn't make any sense.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;After much frustration, one of us made a suggestion to write sql query
in this form:&lt;br&gt;
select max(some_date_field) from fact_table&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Then we were all&amp;nbsp;amazed. After much time of sisyphean work we realized that our
data is not new at all. Moreover - our old data was old too. The maximum date in our
main fact table was &lt;strong&gt;half a year ago&lt;/strong&gt;. The reason was that we took
our data from a legacy system which runs a job that&amp;nbsp;exports their tables into
files, and our infrastructure team imports these files into our source tables. The
problem was that no-one ran the job so the files themselves were old, meaning that
our refresh activity means nothing.
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;Conclusion&lt;/u&gt;: Never trust your sources. Always run a sql query like mentioned
above to check that you have recent data and that the data you think you have is the
data you have. You can think of more queries that validates that what you have is
what you expect to have. Run them every morning to make sure you're ground is stable.
It's only a matter of seconds and it's worth it.
&lt;/p&gt;
&lt;p&gt;
May the source be with you.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=d45d0c48-5f6d-4eba-804b-f94441619681" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,d45d0c48-5f6d-4eba-804b-f94441619681.aspx</comments>
      <category>BI;BI/DataWarehousing;Tips &amp; Tricks</category>
    <feedburner:origLink>http://www.miky-schreiber.com/Blog/PermaLink,guid,d45d0c48-5f6d-4eba-804b-f94441619681.aspx</feedburner:origLink></item>
  </channel>
</rss>
