<?xml version="1.0" encoding="utf-8"?>
<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/" version="2.0">
  <channel>
    <title>Miky Schreiber's Blog - BI|Panorama</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>Wed, 03 Mar 2010 17:01:11 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>miky@zahav.net.il</managingEditor>
    <webMaster>miky@zahav.net.il</webMaster>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=d5f658b0-f87f-4975-ad06-f878d99b6301</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,d5f658b0-f87f-4975-ad06-f878d99b6301.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,d5f658b0-f87f-4975-ad06-f878d99b6301.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d5f658b0-f87f-4975-ad06-f878d99b6301</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Non Empty Behavior is a very good optimization method you can use with your calculated
measures. It allows you to define a list of measures that their emptiness defines
the emptiness of your calculated measure. To understand this, look at the picture
(taken from the <a href="http://msdn.microsoft.com/en-us/library/ms166568.aspx">MSDN</a>):
</p>
        <p>
          <img src="http://www.miky-schreiber.com/Blog/content/binary/NonEmptyBehavior.gif" border="0" />
        </p>
        <p>
This is the calculation expressions pane from the Calculations tab in the cube designer.
From MSDN:
</p>
        <p>
"<span class="Apple-style-span" style="WORD-SPACING: 0px; FONT: 16px 'Times New Roman'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="FONT-SIZE: 11px; LINE-HEIGHT: 15px; FONT-FAMILY: Verdana">The
measures you specify in the<span class="Apple-converted-space"> </span><strong>Non-empty
behavior</strong><span class="Apple-converted-space"> </span>list are used to
resolve NON EMPTY queries in MDX. When you specify one or more measures in the<span class="Apple-converted-space"> </span><strong>Non-empty
behavior</strong><span class="Apple-converted-space"> </span>list, Analysis Services
treats the calculated member as empty if all the specified measures are empty. If
the<span class="Apple-converted-space"> </span><strong>Non-empty behavior</strong><span class="Apple-converted-space"> </span>property
is blank, Analysis Services must evaluate the calculated member itself to determine
whether the member is empty.</span></span>"
</p>
        <p>
This is not new. NEB is quite old feature in SSAS. The new thing (at least for me)
is that NEB can also be used in Panorama formulas! For example, M1+M2 /*NONEMPTY_BEHAVIOR={M1,M2}*/
will apply M1 &amp; M2 as NEB. You can see more Panorama optimization methods <a href="http://tech.panorama.com/index.php/category-table/367-a">here</a>.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=d5f658b0-f87f-4975-ad06-f878d99b6301" />
      </body>
      <title>Non Empty Behavior in Panorama</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,d5f658b0-f87f-4975-ad06-f878d99b6301.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,d5f658b0-f87f-4975-ad06-f878d99b6301.aspx</link>
      <pubDate>Wed, 03 Mar 2010 17:01:11 GMT</pubDate>
      <description>&lt;p&gt;
Non Empty Behavior is a very good optimization method you can use with your calculated
measures. It allows you to define a list of measures that their emptiness defines
the emptiness of your calculated measure. To understand this, look at the picture
(taken from the &lt;a href="http://msdn.microsoft.com/en-us/library/ms166568.aspx"&gt;MSDN&lt;/a&gt;):
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.miky-schreiber.com/Blog/content/binary/NonEmptyBehavior.gif" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
This is the calculation expressions pane from the Calculations tab in the cube designer.
From MSDN:
&lt;/p&gt;
&lt;p&gt;
"&lt;span class=Apple-style-span style="WORD-SPACING: 0px; FONT: 16px 'Times New Roman'; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"&gt;&lt;span class=Apple-style-span style="FONT-SIZE: 11px; LINE-HEIGHT: 15px; FONT-FAMILY: Verdana"&gt;The
measures you specify in the&lt;span class=Apple-converted-space&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;Non-empty
behavior&lt;/strong&gt;&lt;span class=Apple-converted-space&gt;&amp;nbsp;&lt;/span&gt;list are used to resolve
NON EMPTY queries in MDX. When you specify one or more measures in the&lt;span class=Apple-converted-space&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;Non-empty
behavior&lt;/strong&gt;&lt;span class=Apple-converted-space&gt;&amp;nbsp;&lt;/span&gt;list, Analysis Services
treats the calculated member as empty if all the specified measures are empty. If
the&lt;span class=Apple-converted-space&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;Non-empty behavior&lt;/strong&gt;&lt;span class=Apple-converted-space&gt;&amp;nbsp;&lt;/span&gt;property
is blank, Analysis Services must evaluate the calculated member itself to determine
whether the member is empty.&lt;/span&gt;&lt;/span&gt;"
&lt;/p&gt;
&lt;p&gt;
This is not new. NEB is quite old feature in SSAS. The new thing (at least for me)
is that NEB can also be used in Panorama formulas! For example, M1+M2 /*NONEMPTY_BEHAVIOR={M1,M2}*/
will apply M1 &amp;amp; M2 as NEB. You can see more Panorama optimization methods &lt;a href="http://tech.panorama.com/index.php/category-table/367-a"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=d5f658b0-f87f-4975-ad06-f878d99b6301" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,d5f658b0-f87f-4975-ad06-f878d99b6301.aspx</comments>
      <category>BI;BI/MDX;BI/Panorama</category>
    </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" />
      </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://www.miky-schreiber.com/Blog/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>
    </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" />
      </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://www.miky-schreiber.com/Blog/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>
    </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" />
      </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://www.miky-schreiber.com/Blog/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>
    </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" /></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://www.miky-schreiber.com/Blog/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>
    </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" /></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://www.miky-schreiber.com/Blog/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>
    </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" /></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://www.miky-schreiber.com/Blog/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>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=8d29e8e0-e3af-42d3-a3c3-f5ee6df13102</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,8d29e8e0-e3af-42d3-a3c3-f5ee6df13102.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,8d29e8e0-e3af-42d3-a3c3-f5ee6df13102.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8d29e8e0-e3af-42d3-a3c3-f5ee6df13102</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A wonderful idea I heard of is to turn to full screen mode in Internet Explorer when
entering the Dashboard site. It can make a better user experience. Try it yourself
and you'll see the huge difference.<br />
How will we do that? We will add a JavaScript code to the first page of the dashboards
site and after that we'll ask our system administrator to enable this script for us.
Let's get to work: 
</p>
        <p>
          <u>Step 1 - The JavaScript</u>
        </p>
        <p>
        </p>
Create a new HTML component in the dashboard page. Edit it and click on the "View
Source" button (the one with the &lt;&gt;). Enter the following code:<br />
&lt;SCRIPT&gt;<br />
var wscript = new ActiveXObject("Wscript.shell");<br />
wscript.SendKeys("{F11}");<br />
&lt;/SCRIPT&gt; 
<p>
It will simulate the user hitting the F11 key which will turn the IE to
fullscreen mode. The only problem is that when viewing the page, you'll see this message:
</p><p align="center"><img src="http://www.miky-schreiber.com/Blog/content/binary/ActiveXPromt.JPG" border="0" /></p><p>
This takes us to step 2.
</p><p><u>Step 2 - Enabling ActiveX</u></p><p>
First, I'll show you how to do this on your local maching and then you'll ask your
system administrator to enable it on all the machines in the organization using distribution.
Enter the Tools menu in IE and hit Internet Options. Click on the Security tab and
make sure the "Trusted Sites" zone is selected. Note that the Panorama Dashboards
site is already defined as trusted site (if the initial installation of Panorama Dashboards
made according to the installation manual. If it's not, you have a problem). Click
on "Custom Level" and Enable the "Initialize and script ActiveX ..." option:
</p><p align="center"><img src="http://www.miky-schreiber.com/Blog/content/binary/EnableActiveXIE.JPG" border="0" /></p><p align="left">
Now, you'll see that there's no promting for ActiveX controls. Show this to your sys
admin and ask him to make this happen on every user's machine (using distribution,
of course). As I said, the dashboards site is a trusted site so I can't see any problem
to enable this. The result is very beautiful and can make a lot of users happy. Note
that you can also add a button in your page that will call the same script in order
to return to normal mode.
</p><p align="left">
Enjoy.
</p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=8d29e8e0-e3af-42d3-a3c3-f5ee6df13102" /></body>
      <title>Entering the Dashboards Site in Full Screen Mode</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,8d29e8e0-e3af-42d3-a3c3-f5ee6df13102.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,8d29e8e0-e3af-42d3-a3c3-f5ee6df13102.aspx</link>
      <pubDate>Wed, 17 Jun 2009 08:08:44 GMT</pubDate>
      <description>&lt;p&gt;
A wonderful idea I heard of is to turn to full screen mode in Internet Explorer when
entering the Dashboard site. It can make a better user experience. Try it yourself
and you'll see the&amp;nbsp;huge difference.&lt;br&gt;
How will we&amp;nbsp;do that? We will add a JavaScript code to the first page of the dashboards
site and after that we'll ask our system administrator to enable this script for us.
Let's get to work: 
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;Step 1 - The JavaScript&lt;/u&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
Create a new HTML component in the dashboard page. Edit it and click on the "View
Source" button (the one with the &amp;lt;&amp;gt;). Enter the following code:&lt;br&gt;
&amp;lt;SCRIPT&amp;gt;&lt;br&gt;
var wscript = new ActiveXObject("Wscript.shell");&lt;br&gt;
wscript.SendKeys("{F11}");&lt;br&gt;
&amp;lt;/SCRIPT&amp;gt; 
&lt;p&gt;
It will simulate the user&amp;nbsp;hitting the&amp;nbsp;F11 key which will turn the IE to
fullscreen mode. The only problem is that when viewing the page, you'll see this message:
&lt;/p&gt;
&lt;p align=center&gt;
&lt;img src="http://www.miky-schreiber.com/Blog/content/binary/ActiveXPromt.JPG" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
This takes us to step 2.
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;Step 2 - Enabling ActiveX&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
First, I'll show you how to do this on your local maching and then you'll ask your
system administrator to enable it on all the machines in the organization using distribution.
Enter the Tools menu in IE and hit Internet Options. Click on the Security tab and
make sure the "Trusted Sites" zone is selected. Note that the Panorama Dashboards
site is already defined as trusted site (if the initial installation of Panorama Dashboards
made according to the installation manual. If it's not, you have a problem). Click
on "Custom Level" and Enable the "Initialize and script ActiveX ..." option:
&lt;/p&gt;
&lt;p align=center&gt;
&lt;img src="http://www.miky-schreiber.com/Blog/content/binary/EnableActiveXIE.JPG" border=0&gt;
&lt;/p&gt;
&lt;p align=left&gt;
Now, you'll see that there's no promting for ActiveX controls. Show this to your sys
admin and ask him to make this happen on every user's machine (using distribution,
of course). As I said, the dashboards site is a trusted site so I can't see any problem
to enable this. The result is very beautiful and can make a lot of users happy. Note
that you can also add a button in your page that will call the same script in order
to return to normal mode.
&lt;/p&gt;
&lt;p align=left&gt;
Enjoy.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=8d29e8e0-e3af-42d3-a3c3-f5ee6df13102" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,8d29e8e0-e3af-42d3-a3c3-f5ee6df13102.aspx</comments>
      <category>BI;BI/Panorama;Programming;Programming/Web</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=9ab606eb-512e-43b8-9a34-f32dd5324406</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,9ab606eb-512e-43b8-9a34-f32dd5324406.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,9ab606eb-512e-43b8-9a34-f32dd5324406.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9ab606eb-512e-43b8-9a34-f32dd5324406</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When adding parameters to your view, you'll see that they appear in the upper-left
corner of the grid/crosstab. In the NovaView Desktop program it can be tolerated,
but in the Web Access or in the Dashboards web site it cannot be. It's very annoying
and we can't let the users see our inside use of the parameters. What can we do?
</p>
        <p>
The solution is very simple: We need to change the skin of the view/dashboards page/dashboards
site (depends on how you work) and make the grid corner font's color identical to
the color of the grid's background. That way, the users will not see the text in the grid's
corner. The way of doing it is also not hard:
</p>
        <p>
          <em>Remember: Always backup your files before modifying them</em>. In the panorama
folder, enter E-BI/Config/Skins and enter your skin's folder. In the classic way of
work, you're using the default skin which can be changed in the Dashboards settings
section. I recommend you to make a new skin out from the default one (see <a href="http://kb.panorama.com/index.php?option=com_content&amp;task=view&amp;id=185&amp;Itemid=2">here</a>),
update the skin's name in the Dashboards settings section and not touching the default
skin itself. In your new skin, change the GridCornerFont setting so that its
color will be the color of the grid's corner's background. You can see the color of
the grid's corner in the GridTopLeftBackground setting. For example, if GridTopLeftBackground=(194,210,226),
then if you set GridCornerFont=((Arial,1,R),(194,210,226)) then no-one will see
the text over there.
</p>
        <p>
Enjoy.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=9ab606eb-512e-43b8-9a34-f32dd5324406" />
      </body>
      <title>Panorama's Grid Corner Problem</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,9ab606eb-512e-43b8-9a34-f32dd5324406.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,9ab606eb-512e-43b8-9a34-f32dd5324406.aspx</link>
      <pubDate>Tue, 09 Jun 2009 12:55:27 GMT</pubDate>
      <description>&lt;p&gt;
When adding parameters to your view, you'll see that they appear in the upper-left
corner of the grid/crosstab. In the NovaView Desktop program it can be tolerated,
but in the Web Access or in the Dashboards web site it cannot be. It's very annoying
and we can't let the users see our inside use of the parameters. What can we do?
&lt;/p&gt;
&lt;p&gt;
The solution is very simple: We need to change the skin of the view/dashboards page/dashboards
site (depends on how you work) and make the grid corner font's color identical to
the color of the grid's background. That way, the users will not see the text in the&amp;nbsp;grid's
corner.&amp;nbsp;The way of doing it is also not hard:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Remember: Always backup your files before modifying them&lt;/em&gt;. In the panorama
folder, enter E-BI/Config/Skins and enter your skin's folder. In the classic way of
work, you're using the default skin which can be changed in the Dashboards settings
section. I recommend you to make a new skin out from the default one (see &lt;a href="http://kb.panorama.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=185&amp;amp;Itemid=2"&gt;here&lt;/a&gt;),
update the skin's name in the Dashboards settings section and not touching the default
skin itself. In your new skin, change the GridCornerFont setting&amp;nbsp;so that its
color will be the color of the grid's corner's background. You can see the color of
the grid's corner&amp;nbsp;in the GridTopLeftBackground setting. For example, if GridTopLeftBackground=(194,210,226),
then if you set&amp;nbsp;GridCornerFont=((Arial,1,R),(194,210,226)) then no-one will see
the text over there.
&lt;/p&gt;
&lt;p&gt;
Enjoy.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=9ab606eb-512e-43b8-9a34-f32dd5324406" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,9ab606eb-512e-43b8-9a34-f32dd5324406.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=e52c58d8-4e4f-4077-9656-5242bcf49f7c</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,e52c58d8-4e4f-4077-9656-5242bcf49f7c.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,e52c58d8-4e4f-4077-9656-5242bcf49f7c.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e52c58d8-4e4f-4077-9656-5242bcf49f7c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Trying to build ASP.NET page with Panorama
applets, I could not understand why the applets appeared blank when I put them in
tables. After a while, I've found that this got something to do with the DOCTYPE declaration
that each aspx has in its head (<span class="doctype">!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span>).
When I removed this line, it all seems to work fine. Digging into this <a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">DTD
specification</a>, I can't see anything that will prevent from applet tag to appear
inside td tag. Strange.<br /><p></p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=e52c58d8-4e4f-4077-9656-5242bcf49f7c" /></body>
      <title>Using Applet Tag in ASP.NET Pages</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,e52c58d8-4e4f-4077-9656-5242bcf49f7c.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,e52c58d8-4e4f-4077-9656-5242bcf49f7c.aspx</link>
      <pubDate>Mon, 01 Jun 2009 11:32:34 GMT</pubDate>
      <description>Trying to build ASP.NET page with Panorama applets, I could not understand why the applets appeared blank when I put them in tables. After a while, I've found that this got something to do with the DOCTYPE declaration that each aspx has in its head (&lt;span class="doctype"&gt;!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;).
When I removed this line, it all seems to work fine. Digging into this &lt;a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;DTD
specification&lt;/a&gt;, I can't see anything that will prevent from applet tag to appear
inside td tag. Strange.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=e52c58d8-4e4f-4077-9656-5242bcf49f7c" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,e52c58d8-4e4f-4077-9656-5242bcf49f7c.aspx</comments>
      <category>BI;BI/Panorama;Programming;Programming/Web</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=db6b1c12-2e99-44de-be5f-627166d2dd65</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,db6b1c12-2e99-44de-be5f-627166d2dd65.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,db6b1c12-2e99-44de-be5f-627166d2dd65.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=db6b1c12-2e99-44de-be5f-627166d2dd65</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A new desire came from one of our customers. The request was to have the ability to
search in Panorama Crosstab. The first solution I thought of was searching the grid
in iterative way and it worked fine using the Panorama SDK. After that, my friend
Boris came with another simple and elegant solution: We can use Parameter in the Panorama
view and highlight the number which was defined in the parameter. In this post I'll
explain how to implement this.
</p>
        <p>
1. Create a new view using Panorama NovaView Desktop and make sure you see the
grid in the view.
</p>
        <p>
2. Define a new parameter: Click on View -&gt; Paramaters, and click on the "Manage
Parameters" button. Click on Add. The default type is Number and this is exactly what
wee need (for now). In the name, type Highlight and in the Default Value type a number
that you see in the grid (this is the number that will be highlighted later). Let's
take 0 for example. Click on OK twice and close the little Parameters window.
</p>
        <p>
3. Create a new Exception: Click on Data -&gt; Exceptions -&gt; Exceptions... -&gt; Add.
Click on Next and then choose "Custom Exception". Click on "Edit Exception" and there
write the following formula: [Measures].CurrentMember = [[Highlight]]<br />
This will simply select all the cells with the number that we defined earlier in the
Highlight parameter. Click on OK and click Next. In this step, define the style of
the highlighted cells. I picked red color and Bold font style. You can click on Finish
now and then click OK. Open the small Parameters window (right click in the crosstab's
corner and choose Parameters) and click on "Apply Changes". Now, you will see that
all the cells with 0 are highlighted. If you don't see it, check that you did all
the steps correctly.
</p>
        <p>
4. When we will show the view to the user, we don't want to show him anything highlighed
when the view is loaded. This is where a little trick takes place: open the small
Parameters window (right click in the crosstab's corner and choose Parameters), double
click on the Highlight parameter. Choose String as the parameter type (on the right
part) and in the Default value, enter abc. Click twice on OK and then on the
apply button and you'll see that now the highlighed cells are regular ones.
</p>
        <p>
5. In the dashboards page, or in the web page you created using the Panorama SDK,
create a button that will call the function searchGrid. Just add the button the property
onclick="searchGrid('master')", where master is the applet's name. this is the code
of the searchGrid function:
</p>
        <p>
function searchGrid (applet) {<br />
var reply = prompt('Please enter the number to search','');<br />
eval(applet + '.CallUpdateParametersEx("P|~|Highlight|~|' + reply + '|~~|")');<br />
}
</p>
Another tweaks I implemented and I didn't write in this post in order to make it simple
(for advanced developers only): 
<ul><li>
You can search all the views in the current web/dashboard page. Just call the function
for every applet, but make it in Batch mode.</li><li>
You can search all the grid even if the user doesn't see all the rows. You can tell
him if the number he searched for is in there or not.</li></ul><p>
That's all. Test your new page and enjoy. For every question about this and anything
else, you can leave a comment or write my mail.
</p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=db6b1c12-2e99-44de-be5f-627166d2dd65" /></body>
      <title>Searching in Panorama Crosstab</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,db6b1c12-2e99-44de-be5f-627166d2dd65.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,db6b1c12-2e99-44de-be5f-627166d2dd65.aspx</link>
      <pubDate>Sun, 31 May 2009 08:11:47 GMT</pubDate>
      <description>&lt;p&gt;
A new desire came from one of our customers. The request was to have the ability to
search in Panorama Crosstab. The first solution I thought of was searching the grid
in iterative way and it worked fine&amp;nbsp;using the Panorama SDK. After that, my friend
Boris came with another simple and elegant solution: We can use Parameter in the Panorama
view and highlight the number which was defined in the parameter. In this post I'll
explain how to implement this.
&lt;/p&gt;
&lt;p&gt;
1. Create a new view using Panorama NovaView Desktop and make sure you see&amp;nbsp;the
grid in the view.
&lt;/p&gt;
&lt;p&gt;
2. Define a new parameter: Click on View -&amp;gt; Paramaters, and click on the "Manage
Parameters" button. Click on Add. The default type is Number and this is exactly what
wee need (for now). In the name, type Highlight and in the Default Value type a number
that you see in the grid (this is the number that will be highlighted later). Let's
take 0 for example. Click on OK twice and close the little Parameters window.
&lt;/p&gt;
&lt;p&gt;
3. Create a new Exception: Click on Data -&amp;gt; Exceptions -&amp;gt; Exceptions... -&amp;gt;&amp;nbsp;Add.
Click on Next and then choose "Custom Exception". Click on "Edit Exception" and there
write the following formula: [Measures].CurrentMember = [[Highlight]]&lt;br&gt;
This will simply select all the cells with the number that we defined earlier in the
Highlight parameter. Click on OK and click Next. In this step, define the style of
the highlighted cells. I picked red color and Bold font style. You can click on Finish
now and then click OK. Open the small Parameters window (right click in the crosstab's
corner and choose Parameters) and click on "Apply Changes". Now, you will see that
all the cells with 0 are highlighted. If you don't see it, check that you did all
the steps correctly.
&lt;/p&gt;
&lt;p&gt;
4. When we will show the view to the user, we don't want to show him anything highlighed
when the view is loaded. This is where a little trick takes place: open the small
Parameters window (right click in the crosstab's corner and choose Parameters), double
click on the Highlight parameter. Choose String as the parameter type (on the right
part)&amp;nbsp;and in the Default value, enter abc. Click twice on OK and then on the
apply button and you'll see that now the highlighed cells are regular ones.
&lt;/p&gt;
&lt;p&gt;
5. In the dashboards page, or in the web page you created using the Panorama SDK,
create a button that will call the function searchGrid. Just add the button the property
onclick="searchGrid('master')", where master is the applet's name. this is the code
of the searchGrid function:
&lt;/p&gt;
&lt;p&gt;
function searchGrid (applet) {&lt;br&gt;
var reply = prompt('Please enter the number to search','');&lt;br&gt;
eval(applet + '.CallUpdateParametersEx("P|~|Highlight|~|' + reply + '|~~|")');&lt;br&gt;
}
&lt;/p&gt;
Another tweaks I implemented and I didn't write in this post in order to make it simple
(for advanced developers only): 
&lt;ul&gt;
&lt;li&gt;
You can search all the views in the current web/dashboard page. Just call the function
for every applet, but make it in Batch mode.&lt;/li&gt;
&lt;li&gt;
You can search all the grid even if the user doesn't see all the rows. You can tell
him if the number he searched for is in there or not.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
That's all. Test your new page and enjoy. For every question about this and anything
else, you can leave a comment or write my mail.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=db6b1c12-2e99-44de-be5f-627166d2dd65" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,db6b1c12-2e99-44de-be5f-627166d2dd65.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=09abb275-1b87-4d76-ac28-e65e4a73d469</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,09abb275-1b87-4d76-ac28-e65e4a73d469.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,09abb275-1b87-4d76-ac28-e65e4a73d469.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=09abb275-1b87-4d76-ac28-e65e4a73d469</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When you develope a big Panorama Dashboards site, you'll have a lot of javascript
code in the background. We use JS to call the Panorama SDK functions and methods,
make the <a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,89b9ed83-352d-4623-9f2c-45dedeb3543b.aspx">server
side</a> and the client side work together and to make the website dynamic and
user-friendly. After few days, you'll see that you have a lot of code out there, so
you must organize it (if you didn't do it in the first place). My friend Doron wrote
a great <a href="http://blogs.microsoft.co.il/blogs/dorony/archive/2009/04/03/writing-maintainable-javascript-guidelines.aspx">post</a> about
JS development guidelines which can help Panorama Dashboards developers and any big
website developers.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=09abb275-1b87-4d76-ac28-e65e4a73d469" />
      </body>
      <title>JavaScript Development Guidelines</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,09abb275-1b87-4d76-ac28-e65e4a73d469.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,09abb275-1b87-4d76-ac28-e65e4a73d469.aspx</link>
      <pubDate>Tue, 07 Apr 2009 20:12:17 GMT</pubDate>
      <description>&lt;p&gt;
When you develope a big Panorama Dashboards site, you'll have a lot of javascript
code in the background. We use JS to call the Panorama SDK functions and methods,
make the &lt;a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,89b9ed83-352d-4623-9f2c-45dedeb3543b.aspx"&gt;server
side&lt;/a&gt; and the client side work&amp;nbsp;together and to make the website dynamic and
user-friendly. After few days, you'll see that you have a lot of code out there, so
you must organize it (if you didn't do it in the first place). My friend Doron wrote
a great &lt;a href="http://blogs.microsoft.co.il/blogs/dorony/archive/2009/04/03/writing-maintainable-javascript-guidelines.aspx"&gt;post&lt;/a&gt; about
JS development guidelines which can help Panorama Dashboards developers and any big
website developers.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=09abb275-1b87-4d76-ac28-e65e4a73d469" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,09abb275-1b87-4d76-ac28-e65e4a73d469.aspx</comments>
      <category>BI;BI/Panorama;Programming;Tips &amp; Tricks</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=89b9ed83-352d-4623-9f2c-45dedeb3543b</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,89b9ed83-352d-4623-9f2c-45dedeb3543b.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,89b9ed83-352d-4623-9f2c-45dedeb3543b.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=89b9ed83-352d-4623-9f2c-45dedeb3543b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We're now beginning a quick session of Panorama Dashboard development using the 5.5
version. The Dashboard site is written in ASP, so it seems very native to write our
custom code also in ASP. On the other hand, writing in C# is much more fun, so we
decided to try and see if we can make the server side code be in C#. We found that
it is indeed possible. You can place an iframe with ASP.NET page and reference the
dashboard page from it using JavaScript (start from page.parent and go on from
there).
</p>
        <p>
This way you can enjoy the two worlds. In the next posts I'll show some examples of
what you can do using this method.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=89b9ed83-352d-4623-9f2c-45dedeb3543b" />
      </body>
      <title>Developing Panorama Dashboards with .Net</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,89b9ed83-352d-4623-9f2c-45dedeb3543b.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,89b9ed83-352d-4623-9f2c-45dedeb3543b.aspx</link>
      <pubDate>Sun, 22 Mar 2009 21:55:14 GMT</pubDate>
      <description>&lt;p&gt;
We're now beginning a quick session of Panorama Dashboard development using the 5.5
version. The Dashboard site is written in ASP, so it seems very native to write&amp;nbsp;our
custom code also in ASP. On the other hand, writing in C# is much more fun, so we
decided to try and see if we can make the server side code be in C#. We found that
it is indeed possible. You can place an iframe with ASP.NET page and reference the
dashboard page from it&amp;nbsp;using JavaScript (start from page.parent and go on from
there).
&lt;/p&gt;
&lt;p&gt;
This way you can enjoy the two worlds. In the next posts I'll show some examples of
what you can do using this method.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=89b9ed83-352d-4623-9f2c-45dedeb3543b" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,89b9ed83-352d-4623-9f2c-45dedeb3543b.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=6e4ca812-5a91-49b9-9b9e-64ef1e978257</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,6e4ca812-5a91-49b9-9b9e-64ef1e978257.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,6e4ca812-5a91-49b9-9b9e-64ef1e978257.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6e4ca812-5a91-49b9-9b9e-64ef1e978257</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here are some tips we collected <strike>over the years</strike> about dashboard design:
</p>
        <p>
          <u>Page Layout</u>
        </p>
        <ul>
          <li>
Less is more - don't put too many views in the page.</li>
          <li>
Rule of thumb - no more than five reports in one page.</li>
          <li>
Don't use scrolling - the average user won't scroll down the screen.</li>
          <li>
Position in screen - some researches made about this subject and here are the recommendations:</li>
          <ul>
            <li>
Top-Left - it's the part of the screen that the user looks at first. Put there the
most important data.</li>
            <li>
Center of the screen - the part the user looks after the top-left. Put there the second-most
important data.</li>
            <li>
Top-Right, Bottom-Left - Neutral parts.</li>
            <li>
Bottom-Right - The user won't pay attention to it, don't put there important data.</li>
          </ul>
          <li>
Fixed menus in every page.</li>
          <li>
Small amount of navigation targets in every page. Too much navigation paths will cause
confusion.</li>
          <li>
Concentrate on the main page - in 90% of the cases the user will stay there.</li>
          <li>
Add graphic components and highlight them if necessary.</li>
          <li>
Blue color only to links (and underline, of course).</li>
        </ul>
        <p>
          <u>Views Layout</u>
        </p>
        <ul>
          <li>
Two digits after the decimal point - in non-integer number, put only two digits after
the decimal point. The human mind can't understand more than that.</li>
          <li>
Focus on the clarity of the data and not only on its beauty. For example, 3D pie charts
are very beautiful, but flatting them will make them more clear to the user.</li>
          <li>
Measures have meaning only when compared to other data. Don't put stand-alone measure.</li>
          <li>
Pay attention to graphical change between the data and not only colors. Remember that
there are color-blind users.</li>
          <li>
Text is more clear than icons.</li>
          <li>
Use the San Serif and Arial fonts. They are the most readable to the user.</li>
          <li>
Align the text only to one side and not to the middle. It seems better to programmers,
but users want their text aligned to the left or to the right.</li>
          <li>
Colors - don't use too much color. The dashboard page is not a jungle. Use colors
of the same family.</li>
          <li>
Put dark text on bright background the vise versa.</li>
        </ul>
        <p>
And to conclude - use CSS whenever you can. It will save you much time and effort.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=6e4ca812-5a91-49b9-9b9e-64ef1e978257" />
      </body>
      <title>Dashboards Design Tips</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,6e4ca812-5a91-49b9-9b9e-64ef1e978257.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,6e4ca812-5a91-49b9-9b9e-64ef1e978257.aspx</link>
      <pubDate>Sun, 22 Feb 2009 12:14:26 GMT</pubDate>
      <description>&lt;p&gt;
Here are some tips we collected &lt;strike&gt;over the years&lt;/strike&gt; about dashboard design:
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;Page Layout&lt;/u&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Less is more - don't put too many views in the page.&lt;/li&gt;
&lt;li&gt;
Rule of thumb - no more than five reports in one page.&lt;/li&gt;
&lt;li&gt;
Don't use scrolling - the average user won't scroll down the screen.&lt;/li&gt;
&lt;li&gt;
Position in screen - some researches made about this subject and here are the recommendations:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Top-Left - it's the part of the screen that the user looks at first. Put there the
most important data.&lt;/li&gt;
&lt;li&gt;
Center of the screen - the part the user looks after the top-left. Put there the second-most
important data.&lt;/li&gt;
&lt;li&gt;
Top-Right, Bottom-Left - Neutral parts.&lt;/li&gt;
&lt;li&gt;
Bottom-Right - The user won't pay attention to it, don't put there important data.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Fixed menus in every page.&lt;/li&gt;
&lt;li&gt;
Small amount of navigation targets in every page. Too much navigation paths will cause
confusion.&lt;/li&gt;
&lt;li&gt;
Concentrate on the main page - in 90% of the cases the user will stay there.&lt;/li&gt;
&lt;li&gt;
Add graphic components and highlight them if necessary.&lt;/li&gt;
&lt;li&gt;
Blue color only to links (and underline, of course).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;u&gt;Views Layout&lt;/u&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Two digits after the decimal point - in non-integer number, put only two digits after
the decimal point. The human mind can't understand more than that.&lt;/li&gt;
&lt;li&gt;
Focus on the clarity of the data and not only on its beauty. For example, 3D pie charts
are very beautiful, but flatting them will make them more clear to the user.&lt;/li&gt;
&lt;li&gt;
Measures have meaning only when compared to other data. Don't put stand-alone measure.&lt;/li&gt;
&lt;li&gt;
Pay attention to graphical change between the data and not only colors. Remember that
there are color-blind users.&lt;/li&gt;
&lt;li&gt;
Text is more clear than icons.&lt;/li&gt;
&lt;li&gt;
Use the San Serif and Arial fonts. They are the most readable to the user.&lt;/li&gt;
&lt;li&gt;
Align the text only to one side and not to the middle. It seems better to programmers,
but users want their text aligned to the left or to the right.&lt;/li&gt;
&lt;li&gt;
Colors - don't use too much color. The dashboard page is not a jungle. Use colors
of the same family.&lt;/li&gt;
&lt;li&gt;
Put dark text on bright background the vise versa.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
And to conclude - use CSS whenever you can. It will save you much time and effort.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=6e4ca812-5a91-49b9-9b9e-64ef1e978257" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,6e4ca812-5a91-49b9-9b9e-64ef1e978257.aspx</comments>
      <category>BI;BI/Panorama;Tips &amp; Tricks</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=fbb5bc6d-aa89-4a58-ba97-46735bd86700</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,fbb5bc6d-aa89-4a58-ba97-46735bd86700.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,fbb5bc6d-aa89-4a58-ba97-46735bd86700.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fbb5bc6d-aa89-4a58-ba97-46735bd86700</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In many cases, extraction of Panorama view's MDX code is necessary. For example, in
order to check whether the performance bottleneck is in Panorama or in the OLAP server,
you can take the MDX code, run it in SQL Server Management Studio and compare run
times. You can take it further more but I'll leave it for future posts.
</p>
        <p>
In Panorama Desktop program, click on Tools -&gt; Direct MDX... and then CTRL + ALT
+ V. Then, you can copy it and use it in any way you want.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=fbb5bc6d-aa89-4a58-ba97-46735bd86700" />
      </body>
      <title>Extracting the MDX from Panorama's view</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,fbb5bc6d-aa89-4a58-ba97-46735bd86700.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,fbb5bc6d-aa89-4a58-ba97-46735bd86700.aspx</link>
      <pubDate>Tue, 10 Feb 2009 08:00:54 GMT</pubDate>
      <description>&lt;p&gt;
In many cases, extraction of Panorama view's MDX code is necessary. For example, in
order to check whether the performance bottleneck is in Panorama or in the OLAP server,
you can take the MDX code, run it in SQL Server Management Studio and compare run
times. You can take it further more but I'll leave it for future posts.
&lt;/p&gt;
&lt;p&gt;
In Panorama Desktop program, click on Tools -&amp;gt; Direct MDX... and then CTRL + ALT
+ V. Then, you can copy it and use it in any way you want.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=fbb5bc6d-aa89-4a58-ba97-46735bd86700" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,fbb5bc6d-aa89-4a58-ba97-46735bd86700.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=5f382659-122c-4a1e-a247-fb1aa61cffb3</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,5f382659-122c-4a1e-a247-fb1aa61cffb3.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,5f382659-122c-4a1e-a247-fb1aa61cffb3.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5f382659-122c-4a1e-a247-fb1aa61cffb3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I'm glad to announce that two new Panorama
forums were opened in the last days:<br />
The first one is <a href="http://www.panorama.com/forum">Panorama's Technical forum</a> (English
only). From now on you can get answers using this forum and see another users' problems
and answers.<br />
The second one is <a href="http://panorama.dwh.co.il">independent Panorama forum</a> (Hebrew
only). This forum was created by Michael Ra'am, ex-Panorama consultor. Its purpose
is to be a place for sharing knowledge and ideas.<br />
I believe you'll see me in both forums. See ya!<br /><p></p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=5f382659-122c-4a1e-a247-fb1aa61cffb3" /></body>
      <title>Two New Panorama Forums</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,5f382659-122c-4a1e-a247-fb1aa61cffb3.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,5f382659-122c-4a1e-a247-fb1aa61cffb3.aspx</link>
      <pubDate>Mon, 09 Feb 2009 13:34:32 GMT</pubDate>
      <description>I'm glad to announce that two new Panorama forums were opened in the last days:&lt;br&gt;
The first one is &lt;a href="http://www.panorama.com/forum"&gt;Panorama's Technical forum&lt;/a&gt; (English
only). From now on you can get answers using this forum and see another users' problems
and answers.&lt;br&gt;
The second one is &lt;a href="http://panorama.dwh.co.il"&gt;independent Panorama forum&lt;/a&gt; (Hebrew
only). This forum was created by Michael Ra'am, ex-Panorama consultor. Its purpose
is to be a place for sharing knowledge and ideas.&lt;br&gt;
I believe you'll see me in both forums. See ya!&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=5f382659-122c-4a1e-a247-fb1aa61cffb3" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,5f382659-122c-4a1e-a247-fb1aa61cffb3.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=573d1b86-e369-432e-a614-02b3cf4f9f31</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,573d1b86-e369-432e-a614-02b3cf4f9f31.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,573d1b86-e369-432e-a614-02b3cf4f9f31.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=573d1b86-e369-432e-a614-02b3cf4f9f31</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In some of our projects, we develop the Panorama views in the development environment
along with the Data Warehouse, the ETL, the Cubes, etc. That's because the customers want
to see how their product will look like before we deploy the views in the production
environment. So, how do you deploy Panorama views from one environment to the other?
</p>
        <ol>
          <li>
Create the new book - If it's a new briefing book, create it using the Panorama NovaView
Administrator program. If it's already exist you can skip this step.</li>
          <li>
Copy the content - The book's content is by default in c:\&lt;Panorama Folder&gt;\E-BI\books\&lt;Book
Name&gt;. Copy the content of this directory from the dev machine to the production
machine. This is not enought because the views are still looking at the dev environment,
so:</li>
          <li>
Change the view's properties - You need to have a very simple program (let's call
it PanoramaDeployUtil) that iterates over all the views in the given folder (and its
sub folders, recursively) and change its properties. I recommend opening the
view's file using xml reader and change the element \pnView\Root\Cube\Properties.
You need to set its properties CubeAddress, CubeName &amp; CubeDB according to the
new environment's values (CubeAddress is the server address). Just run this program
and the views will look at the new environment.</li>
          <li>
Check - check yourself and make sure everything is ok by opening Panorama Web Access
or Panorama Desktop and see that the values shown are the production's values.</li>
        </ol>
        <p>
Know that you can always open the Panorama Desktop and change the views
one by one by hand.
</p>
        <p>
Enjoy.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=573d1b86-e369-432e-a614-02b3cf4f9f31" />
      </body>
      <title>Deploying Panorama Views on Another Machine</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,573d1b86-e369-432e-a614-02b3cf4f9f31.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,573d1b86-e369-432e-a614-02b3cf4f9f31.aspx</link>
      <pubDate>Thu, 05 Feb 2009 13:21:08 GMT</pubDate>
      <description>&lt;p&gt;
In some of our projects, we develop the Panorama views in the development environment
along with the Data Warehouse, the ETL, the Cubes, etc. That's because&amp;nbsp;the customers&amp;nbsp;want
to see how their product will look like before we deploy the views in the production
environment. So, how do you deploy Panorama views from one environment to the other?
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Create the new book - If it's a new briefing book, create it using the Panorama NovaView
Administrator program. If it's already exist you can skip this step.&lt;/li&gt;
&lt;li&gt;
Copy the content - The book's content is by default in c:\&amp;lt;Panorama Folder&amp;gt;\E-BI\books\&amp;lt;Book
Name&amp;gt;. Copy the content of this directory from the dev machine to the production
machine. This is not enought because the views are still looking at the dev environment,
so:&lt;/li&gt;
&lt;li&gt;
Change the view's properties - You need to have a very simple program (let's call
it PanoramaDeployUtil) that iterates over all the views in the given folder (and its
sub folders, recursively) and change its properties. I recommend opening&amp;nbsp;the
view's file using xml reader and change the element \pnView\Root\Cube\Properties.
You need to set its properties CubeAddress, CubeName &amp;amp; CubeDB according to the
new environment's values (CubeAddress is the&amp;nbsp;server address). Just run this program
and the views will look at the new environment.&lt;/li&gt;
&lt;li&gt;
Check - check yourself and make sure everything is ok by opening Panorama Web Access
or Panorama Desktop and see that the values shown are the production's values.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Know that&amp;nbsp;you can always&amp;nbsp;open the Panorama Desktop and change the views
one by one by hand.
&lt;/p&gt;
&lt;p&gt;
Enjoy.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=573d1b86-e369-432e-a614-02b3cf4f9f31" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,573d1b86-e369-432e-a614-02b3cf4f9f31.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=7e711077-554c-49f4-81f4-64319694cf36</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,7e711077-554c-49f4-81f4-64319694cf36.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,7e711077-554c-49f4-81f4-64319694cf36.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7e711077-554c-49f4-81f4-64319694cf36</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">This week I had something disturbing. When
I installed Excel 2003 on the Panorama machine in order to use Excel functions in
my MDX calculations, the NovaView Desktop stopped working. When I tried to load a
view it threw an error in connection message. Calling to Panorama support, they told
me that it's a known issue and it's hard to find by using the Panorama knowledge base.
So here it is:<br /><br />
If you have connection issues in the Desktop program, enter the registry editor (Start
-&gt; Run -&gt; regedit). Look for HKEY_CLASSES_ROOT\MSOLAP\CLSID and make sure it's
the same as HKEY_CLASSES_ROOT\MSOLAP.3\CLSID. Remember - always copy <b>from MSOLAP.3
to MSOLAP</b> and not vise versa.<br /><p></p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=7e711077-554c-49f4-81f4-64319694cf36" /></body>
      <title>Panorama and Excel Issue</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,7e711077-554c-49f4-81f4-64319694cf36.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,7e711077-554c-49f4-81f4-64319694cf36.aspx</link>
      <pubDate>Sat, 20 Sep 2008 20:38:48 GMT</pubDate>
      <description>This week I had something disturbing. When I installed Excel 2003 on the Panorama machine in order to use Excel functions in my MDX calculations, the NovaView Desktop stopped working. When I tried to load a view it threw an error in connection message. Calling to Panorama support, they told me that it's a known issue and it's hard to find by using the Panorama knowledge base. So here it is:&lt;br&gt;
&lt;br&gt;
If you have connection issues in the Desktop program, enter the registry editor (Start
-&amp;gt; Run -&amp;gt; regedit). Look for HKEY_CLASSES_ROOT\MSOLAP\CLSID and make sure it's
the same as HKEY_CLASSES_ROOT\MSOLAP.3\CLSID. Remember - always copy &lt;b&gt;from MSOLAP.3
to MSOLAP&lt;/b&gt; and not vise versa.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=7e711077-554c-49f4-81f4-64319694cf36" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,7e711077-554c-49f4-81f4-64319694cf36.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=c513cf0e-0c66-4834-8f63-9bb965b9639c</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,c513cf0e-0c66-4834-8f63-9bb965b9639c.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,c513cf0e-0c66-4834-8f63-9bb965b9639c.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=c513cf0e-0c66-4834-8f63-9bb965b9639c</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <title>The PanoramaBasedWebSite project</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,c513cf0e-0c66-4834-8f63-9bb965b9639c.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,c513cf0e-0c66-4834-8f63-9bb965b9639c.aspx</link>
      <pubDate>Thu, 04 Sep 2008 17:37:45 GMT</pubDate>
      <description>In the last years I've seen many
astonishing BI web sites. I always asked myself what I need to do to bring my
customers such beautiful web-based BI solutions. After having much experience
with Panorama NovaView and especially the Panorama SDK I started to run some
questions in my mind: Why won't I build some re-usable puzzle pieces that can
be joined together to a web site? These pieces can be web controls that using
and even interacting Panorama views and Analysis services. Why won't publish it
as open source and give it to the BI community?&lt;br&gt;
&lt;br&gt;
The &lt;a href="http://www.codeplex.com/PanoramaBasedWebSite"&gt;PanoramaBasedWebSite&lt;/a&gt; project
is a toolkit that contains web controls you can easily use in your ASP.NET based web
site. The project is written in ASP.NET 2.0 and C# 3.5. These web controls interacts
with Panorama views (using Panorama SDK) and Analysis Services (using AMO).&lt;br&gt;
The idea is that you can take these puzzle pieces, combine them as you like in your
web site and create your good-looking BI web site with almost no programming. The
project is only in its first steps, but I believe that publishing the design/idea
is also important. This is why the first &lt;a href="http://www.codeplex.com/PanoramaBasedWebSite/Release/ProjectReleases.aspx?ReleaseId=16866"&gt;release&lt;/a&gt; is
already published, although it has only two web controls so far. This is what we have
so far and what I'm planning for the future. I'll be happy to hear your thoughts/ideas:&lt;br&gt;
&lt;br&gt;
&lt;u&gt;First Release Contents&lt;/u&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
PanoramaView web control - this is the main control of the project and it will probably
take a lot of the project's weight. The control simply shows panorama view. For now,
it doesn't do much rather then showing a view so there's a lot of work to do for this
control. It gets two properties - BriefingBookName and ViewName. You can look at the
TODO: comments in the code to see what future plans I have for this control.&lt;/li&gt;
&lt;li&gt;
UpdateDatePanel web control - this control shows the date and time when the last process
of the cube was made. It can be used in two ways: You can only set the PanoramaViewID
property. The control will extract the cube and the database name from the view and
take the update date from the cube. The other way is to set the CubeName and DataBaseName
properties.&lt;/li&gt;
&lt;/ul&gt;
&lt;u&gt;Future Plans&lt;/u&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
KPIView - Already working on it. Similar to PanoramaView, but if the view shows KPI
then a drilldown will be made when the user clicks on a gauge.&lt;/li&gt;
&lt;lipanoramacomments already="" working="" on="" it.="" one="" of="" my="" customers="" asked="" for="" ability="" bind="" comments="" to="" a="" then="" all="" users="" that="" see="" view="" also="" sees="" comments.="" control="" uses="" the="" ajaxcontroltoolkit="" accordion="" and="" it="" s="" very="" neat.="" believe="" me="" -="" you="" ll="" love="" this="" one.=""&gt;
&lt;li&gt;
QueryList - Shows the result of MDX query. For example, the list shows the top 10
employees of the month (in sales perspective, for example). This list will be interactive,
meaning that clicking on a row will make a drilldown, drill to data or replace the
list with another query results.&lt;/li&gt;
&lt;li&gt;
DimensionPicker - Gives the user the ability to pick members of a dimension/hierarchy.
After selecting, the control will slice all the views on the page (or only predefined
set of views).&lt;/li&gt;
&lt;li&gt;
DatePicker - Same as DimensionPicker but for dates. It will show a calendar to the
user and clicking on a date will perform a slice in the views.&lt;/li&gt;
&lt;/lipanoramacomments&gt;
&lt;/ul&gt;
&lt;p&gt;
The use of the controls in your aspx pages is very easy. You can see for yourself:
&lt;/p&gt;
&lt;p&gt;
&amp;lt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: brown;"&gt;PanoramaControls:UpdateDateLabel&lt;/span&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt; &lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: black;"&gt;UpdateDateLabel1&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: black;"&gt;server&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;PanoramaViewID&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: black;"&gt;PanoramaView1&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: brown;"&gt;PanoramaControls:PanoramaView&lt;/span&gt; &lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: black;"&gt;PanoramaView1&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: black;"&gt;server&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: black;"&gt;100%&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;Height&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: black;"&gt;80%&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;BriefingBookName&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: black;"&gt;MikysBook&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;ViewName&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: black;"&gt;MyFirstView&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
I'll be happy to read your thoughts and ideas about this project. There will be more
to come. Stay Tuned.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=c513cf0e-0c66-4834-8f63-9bb965b9639c" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,c513cf0e-0c66-4834-8f63-9bb965b9639c.aspx</comments>
      <category>BI;BI/Panorama;Programming;Programming/.Net</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=676aead2-f5f8-4359-b384-fc238007361b</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,676aead2-f5f8-4359-b384-fc238007361b.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,676aead2-f5f8-4359-b384-fc238007361b.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=676aead2-f5f8-4359-b384-fc238007361b</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Well, I don't know what I <a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,0073e4e4-ac9e-4028-9590-1b138295a24f.aspx">expected</a> but
I'm a little disappointed. I'll split my review into two parts:<br /><ol><li>
The Analytics - This is the main issue for my organization, so here I expected to
see some new &amp; cool features, but all I've seen is only facelift. This is probably
why the new version is 5.5 and not NovaView 6.</li><li>
The Google stuff - While this is not relevant for my organization, this was very cool
and promising. I think that this relation between Panorama and Google will carry on
and both sides will only benefit from it.</li></ol>
The greatest thing I got from the webinar is ideas of beautiful designs for sites
containing Panorama <strike>applets</strike> views. The site that has been showed
in the webinar was beautiful and intuitive. I just can't wait to give my customer
a site that looks like it, completely sewed for him. Go on, look at the webinar and
take some ideas for your site design.<br />
If you haven't seen the webinar yet, you can <a href="http://gm-link.com/tm.asp?c=38767&amp;u=miky@zahav.net.il&amp;i=143806">download</a> it
or <a href="http://gm-link.com/tm.asp?c=38767&amp;u=miky@zahav.net.il&amp;i=143805">watch</a> it.<br /><p></p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=676aead2-f5f8-4359-b384-fc238007361b" /></body>
      <title>My Impressions From the NovaView 5.5 Seminar</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,676aead2-f5f8-4359-b384-fc238007361b.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,676aead2-f5f8-4359-b384-fc238007361b.aspx</link>
      <pubDate>Mon, 16 Jun 2008 21:24:21 GMT</pubDate>
      <description>Well, I don't know what I &lt;a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,0073e4e4-ac9e-4028-9590-1b138295a24f.aspx"&gt;expected&lt;/a&gt; but
I'm a little disappointed. I'll split my review into two parts:&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
The Analytics - This is the main issue for my organization, so here I expected to
see some new &amp;amp; cool features, but all I've seen is only facelift. This is probably
why the new version is 5.5 and not NovaView 6.&lt;/li&gt;
&lt;li&gt;
The Google stuff - While this is not relevant for my organization, this was very cool
and promising. I think that this relation between Panorama and Google will carry on
and both sides will only benefit from it.&lt;/li&gt;
&lt;/ol&gt;
The greatest thing I got from the webinar is ideas of beautiful designs for sites
containing Panorama &lt;strike&gt;applets&lt;/strike&gt; views. The site that has been showed
in the webinar was beautiful and intuitive. I just can't wait to give my customer
a site that looks like it, completely sewed for him. Go on, look at the webinar and
take some ideas for your site design.&lt;br&gt;
If you haven't seen the webinar yet, you can &lt;a href="http://gm-link.com/tm.asp?c=38767&amp;amp;u=miky@zahav.net.il&amp;amp;i=143806"&gt;download&lt;/a&gt; it
or &lt;a href="http://gm-link.com/tm.asp?c=38767&amp;amp;u=miky@zahav.net.il&amp;amp;i=143805"&gt;watch&lt;/a&gt; it.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=676aead2-f5f8-4359-b384-fc238007361b" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,676aead2-f5f8-4359-b384-fc238007361b.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=30ba7767-a1f1-448c-a321-b1d5bbe29c94</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,30ba7767-a1f1-448c-a321-b1d5bbe29c94.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,30ba7767-a1f1-448c-a321-b1d5bbe29c94.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=30ba7767-a1f1-448c-a321-b1d5bbe29c94</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">My customer wanted to have the ability
to show the last update time of the data in the Panorama's views' titles. He knows
that I know to deliver :-) so in a couple of hours he had it. Using AMO and the view's
xml manipulation it's very simple. Just note that changing views without NovaView
Desktop is not supported by Panorama so watch out before you execute this program.
In your first trials, always save the books dir (by default in c:\program files\panorama\e-bi\books)
before you start. Also, be aware that this won't work for automatic views. The user
must enter the view's title himself and write the string "Correct For" and the program
will know to write the last update time after it. This is the program's code:<br /><br /><div><font color="Teal">  1 </font><font color="Blue">using</font> System; 
<br /><font color="Teal">  2 </font><font color="Blue">using</font> System.Collection.Generic; 
<br /><font color="Teal">  3 </font><font color="Blue">using</font> System.Text; 
<br /><font color="Teal">  4 </font><font color="Blue">using</font> AMO = Microsoft.AnalysisServices; 
<br /><font color="Teal">  5 </font><font color="Blue">using</font> System.Xml; 
<br /><font color="Teal">  6 </font><font color="Blue">using</font> System.IO; 
<br /><font color="Teal">  7 </font><br /><font color="Teal">  8 </font><font color="Blue">namespace</font> CubeUpdateDate 
<br /><font color="Teal">  9 </font>{ 
<br /><font color="Teal"> 10 </font>    <font color="Blue">class</font> Program 
<br /><font color="Teal"> 11 </font>    { 
<br /><font color="Teal"> 12 </font>        <font color="Blue">static</font> <font color="Blue">void</font> Main (<font color="Blue">string</font>[] args) 
<br /><font color="Teal"> 13 </font>        { 
<br /><font color="Teal"> 14 </font>            CubeUpdateDate cud = <font color="Blue">new</font> CubeUpdateDate(); 
<br /><font color="Teal"> 15 </font>            cud.Go(); 
<br /><font color="Teal"> 16 </font>        } 
<br /><font color="Teal"> 17 </font>    } 
<br /><font color="Teal"> 18 </font>     
<br /><font color="Teal"> 19 </font>    <font color="Blue">class</font> CubeUpdateDate 
<br /><font color="Teal"> 20 </font>    { 
<br /><font color="Teal"> 21 </font>        <font color="Blue">public</font> <font color="Blue">void</font> Go () 
<br /><font color="Teal"> 22 </font>        { 
<br /><font color="Teal"> 23 </font>            DateTime cubeUpdateDate = GetCubeUpdateDate(GetConfigData(<font color="Maroon">"ServerName"</font>),GetConfigData(<font color="Maroon">"DataBaseName"</font>)); 
<br /><font color="Teal"> 24 </font>            UpdateViews(GetConfigData(<font color="Maroon">"BookDir"</font>),cubeUpdateDate); 
<br /><font color="Teal"> 25 </font>        } 
<br /><font color="Teal"> 26 </font>         
<br /><font color="Teal"> 27 </font>        <font color="Blue">private</font> <font color="Blue">void</font> UpdateViews (<font color="Blue">string</font> dirName, DateTime cubeUpdateDate) 
<br /><font color="Teal"> 28 </font>        { 
<br /><font color="Teal"> 29 </font>            <font color="Blue">foreach</font> (<font color="Blue">string</font> subDirName <font color="Blue">in</font> Directory.GetDirectories(dirName)) 
<br /><font color="Teal"> 30 </font>            { 
<br /><font color="Teal"> 31 </font>                UpdateViews(subDirName, cubeUpdateDate); 
<br /><font color="Teal"> 32 </font>            } 
<br /><font color="Teal"> 33 </font>             
<br /><font color="Teal"> 34 </font>            <font color="Blue">foreach</font> (<font color="Blue">string</font> fileName <font color="Blue">in</font> Directory.GetFiles(dirName)) 
<br /><font color="Teal"> 35 </font>            { 
<br /><font color="Teal"> 36 </font>                UpdateFile(fileName, cubeUpdateDate); 
<br /><font color="Teal"> 37 </font>            } 
<br /><font color="Teal"> 38 </font>        } 
<br /><font color="Teal"> 39 </font>         
<br /><font color="Teal"> 40 </font>        <font color="Blue">private</font> <font color="Blue">void</font> UpdateFile (<font color="Blue">string</font> fileName, DateTime cubeUpdateDate) 
<br /><font color="Teal"> 41 </font>        { 
<br /><font color="Teal"> 42 </font>            <font color="Blue">try</font> { 
<br /><font color="Teal"> 43 </font>                XmlDocument xmlDoc = <font color="Blue">new</font> XmlDocument(); 
<br /><font color="Teal"> 44 </font>                xmlDoc.Load(fileName); 
<br /><font color="Teal"> 45 </font>                XmlNodeList titleTags = xmlDoc.GetElementsByTagName(<font color="Maroon">"Title"</font>); 
<br /><font color="Teal"> 46 </font>                <font color="Blue">if</font> (titleTags.Count &gt; <font color="Maroon">0</font>) 
<br /><font color="Teal"> 47 </font>                { 
<br /><font color="Teal"> 48 </font>                    <font color="Blue">string</font> viewTitle = titleTags[<font color="Maroon">0</font>].ChildNodes[<font color="Maroon">0</font>].Attributes[<font color="Maroon">0</font>].Value; 
<br /><font color="Teal"> 49 </font>                    <font color="Blue">if</font> (viewTitle.Contains(<font color="Maroon">@"Correct For"</font>)) 
<br /><font color="Teal"> 50 </font>                    { 
<br /><font color="Teal"> 51 </font>                        viewTitle = viewTitle.Substring(<font color="Maroon">0</font>, viewTitle.IndexOf(<font color="Maroon">"Correct For"</font>) + <font color="Maroon">11</font>); 
<br /><font color="Teal"> 52 </font>                        viewTitle += <font color="Maroon">" "</font> + cubeUpdateDate.ToShortTimeString() + <font color="Maroon">" "</font> + cubeUpdateDate.ToShortDateString(); 
<br /><font color="Teal"> 53 </font>                        titleTags[<font color="Maroon">0</font>].ChildNodes[<font color="Maroon">0</font>].Attributes[<font color="Maroon">0</font>].Value = viewTitle; 
<br /><font color="Teal"> 54 </font>                        titleTags[<font color="Maroon">0</font>].ChildNodes[<font color="Maroon">0</font>].Attributes[<font color="Maroon">1</font>].Value = viewTitle; 
<br /><font color="Teal"> 55 </font>                        xmlDoc.Save(fileName); 
<br /><font color="Teal"> 56 </font>                    } 
<br /><font color="Teal"> 57 </font>                } 
<br /><font color="Teal"> 58 </font>            } 
<br /><font color="Teal"> 59 </font>            <font color="Blue">catch</font> (Exception e) 
<br /><font color="Teal"> 60 </font>            { 
<br /><font color="Teal"> 61 </font>                Console.WriteLine(<font color="Maroon">"Error reading/writing file: "</font> + fileName); 
<br /><font color="Teal"> 62 </font>            } 
<br /><font color="Teal"> 63 </font>        } 
<br /><font color="Teal"> 64 </font>         
<br /><font color="Teal"> 65 </font>        <font color="Blue">private</font> <font color="Blue">string</font> GetConfigData (<font color="Blue">string</font> whichData) 
<br /><font color="Teal"> 66 </font>        { 
<br /><font color="Teal"> 67 </font>            XmlDocument xmlDoc = GetConfigXml(); 
<br /><font color="Teal"> 68 </font>            <font color="Blue">return</font> xmlDoc.GetElementsByTagName(whichData)[<font color="Maroon">0</font>].InnerText; 
<br /><font color="Teal"> 69 </font>        } 
<br /><font color="Teal"> 70 </font>         
<br /><font color="Teal"> 71 </font>        <font color="Blue">private</font> XmlDocument GetConfigXml() 
<br /><font color="Teal"> 72 </font>        { 
<br /><font color="Teal"> 73 </font>            XmlDocument xmlDoc = <font color="Blue">new</font> XmlDocument(); 
<br /><font color="Teal"> 74 </font>            xmlDoc.Load(<font color="Maroon">"config.xml"</font>); 
<br /><font color="Teal"> 75 </font>            <font color="Blue">return</font> xmlDoc; 
<br /><font color="Teal"> 76 </font>        } 
<br /><font color="Teal"> 77 </font>         
<br /><font color="Teal"> 78 </font>        <font color="Blue">private</font> DateTime GetCubeUpdateDate (<font color="Blue">string</font> serverName, <font color="Blue">string</font> dbName) 
<br /><font color="Teal"> 79 </font>        { 
<br /><font color="Teal"> 80 </font>            <font color="Blue">using</font> (AMO.Server server = <font color="Blue">new</font> AMO.Server()) 
<br /><font color="Teal"> 81 </font>            { 
<br /><font color="Teal"> 82 </font>                server.Connect(<font color="Maroon">"Data Source="</font> + serverName); 
<br /><font color="Teal"> 83 </font>                AMO.Database db = server.Databases[dbName]; 
<br /><font color="Teal"> 84 </font>                <font color="Blue">return</font> db.Cubes[<font color="Maroon">0</font>].LastProcessed; 
<br /><font color="Teal"> 85 </font>            } 
<br /><font color="Teal"> 86 </font>        } 
<br /><font color="Teal"> 87 </font>    } 
<br /><font color="Teal"> 88 </font>}
</div><br />
The program uses xml config file that looks like this:<br /><br /><div><font color="Blue">&lt;?</font><font color="Maroon">xml</font> <font color="Red">version</font>="<font color="Blue">1.0</font>" <font color="Red">encoding</font>="<font color="Blue">utf-8</font>" <font color="Blue">?&gt;</font><br /><font color="Blue">&lt;</font><font color="Maroon">Config</font><font color="Blue">&gt;</font><br />
    <font color="Blue">&lt;</font><font color="Maroon">ServerName</font><font color="Blue">&gt;</font>MyOlapServer<font color="Blue">&lt;</font>/<font color="Maroon">ServerName</font><font color="Blue">&gt;</font><br />
    <font color="Blue">&lt;</font><font color="Maroon">DataBaseName</font><font color="Blue">&gt;</font>MyDBName<font color="Blue">&lt;</font>/<font color="Maroon">DataBaseName</font><font color="Blue">&gt;</font><br />
    <font color="Blue">&lt;</font><font color="Maroon">BookDir</font><font color="Blue">&gt;</font>MyBookDirPath<font color="Blue">&lt;</font>/<font color="Maroon">BookDir</font><font color="Blue">&gt;</font><br /><font color="Blue">&lt;</font>/<font color="Maroon">Config</font><font color="Blue">&gt;</font></div><br />
The program assumes that all the database has the same update time so it takes the
last process time of the first cube in the database. If it's not true in your case
you can change it in the method GetCubeUpdateDate.<br />
Enjoy.<br /><br /><u><i>update:</i></u> If you're getting trouble with XmlDocument.Load method because
of hexadecimal characters in the view's xml file, look <a href="http://dotnetics.integrethics.com/?p=66">here</a>.<br /><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=30ba7767-a1f1-448c-a321-b1d5bbe29c94" /></body>
      <title>Placing Last Update Date in Panorama Views' Titles</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,30ba7767-a1f1-448c-a321-b1d5bbe29c94.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,30ba7767-a1f1-448c-a321-b1d5bbe29c94.aspx</link>
      <pubDate>Sat, 31 May 2008 21:20:09 GMT</pubDate>
      <description>My customer wanted to have the ability to show the last update time of the data in the Panorama's views' titles. He knows that I know to deliver :-) so in a couple of hours he had it. Using AMO and the view's xml manipulation it's very simple. Just note that changing views without NovaView Desktop is not supported by Panorama so watch out before you execute this program. In your first trials, always save the books dir (by default in c:\program files\panorama\e-bi\books) before you start. Also, be aware that this won't work for automatic views. The user must enter the view's title himself and write the string "Correct For" and the program will know to write the last update time after it. This is the program's code:&lt;br&gt;
&lt;br&gt;
&lt;div&gt;&lt;font color="Teal"&gt;&amp;nbsp;&amp;nbsp;1 &lt;/font&gt;&lt;font color="Blue"&gt;using&lt;/font&gt;&amp;nbsp;System; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;&amp;nbsp;2 &lt;/font&gt;&lt;font color="Blue"&gt;using&lt;/font&gt;&amp;nbsp;System.Collection.Generic; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;&amp;nbsp;3 &lt;/font&gt;&lt;font color="Blue"&gt;using&lt;/font&gt;&amp;nbsp;System.Text; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;&amp;nbsp;4 &lt;/font&gt;&lt;font color="Blue"&gt;using&lt;/font&gt;&amp;nbsp;AMO&amp;nbsp;=&amp;nbsp;Microsoft.AnalysisServices; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;&amp;nbsp;5 &lt;/font&gt;&lt;font color="Blue"&gt;using&lt;/font&gt;&amp;nbsp;System.Xml; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;&amp;nbsp;6 &lt;/font&gt;&lt;font color="Blue"&gt;using&lt;/font&gt;&amp;nbsp;System.IO; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;&amp;nbsp;7 &lt;/font&gt; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;&amp;nbsp;8 &lt;/font&gt;&lt;font color="Blue"&gt;namespace&lt;/font&gt;&amp;nbsp;CubeUpdateDate 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;&amp;nbsp;9 &lt;/font&gt;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;10 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;class&lt;/font&gt;&amp;nbsp;Program 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;11 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;12 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;static&lt;/font&gt;&amp;nbsp;&lt;font color="Blue"&gt;void&lt;/font&gt;&amp;nbsp;Main&amp;nbsp;(&lt;font color="Blue"&gt;string&lt;/font&gt;[]&amp;nbsp;args) 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;13 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;14 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CubeUpdateDate&amp;nbsp;cud&amp;nbsp;=&amp;nbsp;&lt;font color="Blue"&gt;new&lt;/font&gt;&amp;nbsp;CubeUpdateDate(); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;15 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cud.Go(); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;16 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;17 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;18 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;19 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;class&lt;/font&gt;&amp;nbsp;CubeUpdateDate 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;20 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;21 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;public&lt;/font&gt;&amp;nbsp;&lt;font color="Blue"&gt;void&lt;/font&gt;&amp;nbsp;Go&amp;nbsp;() 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;22 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;23 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime&amp;nbsp;cubeUpdateDate&amp;nbsp;=&amp;nbsp;GetCubeUpdateDate(GetConfigData(&lt;font color="Maroon"&gt;"ServerName"&lt;/font&gt;),GetConfigData(&lt;font color="Maroon"&gt;"DataBaseName"&lt;/font&gt;)); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;24 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UpdateViews(GetConfigData(&lt;font color="Maroon"&gt;"BookDir"&lt;/font&gt;),cubeUpdateDate); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;25 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;26 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;27 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;private&lt;/font&gt;&amp;nbsp;&lt;font color="Blue"&gt;void&lt;/font&gt;&amp;nbsp;UpdateViews&amp;nbsp;(&lt;font color="Blue"&gt;string&lt;/font&gt;&amp;nbsp;dirName,&amp;nbsp;DateTime&amp;nbsp;cubeUpdateDate) 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;28 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;29 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;foreach&lt;/font&gt;&amp;nbsp;(&lt;font color="Blue"&gt;string&lt;/font&gt;&amp;nbsp;subDirName&amp;nbsp;&lt;font color="Blue"&gt;in&lt;/font&gt;&amp;nbsp;Directory.GetDirectories(dirName)) 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;30 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;31 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UpdateViews(subDirName,&amp;nbsp;cubeUpdateDate); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;32 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;33 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;34 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;foreach&lt;/font&gt;&amp;nbsp;(&lt;font color="Blue"&gt;string&lt;/font&gt;&amp;nbsp;fileName&amp;nbsp;&lt;font color="Blue"&gt;in&lt;/font&gt;&amp;nbsp;Directory.GetFiles(dirName)) 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;35 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;36 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UpdateFile(fileName,&amp;nbsp;cubeUpdateDate); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;37 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;38 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;39 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;40 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;private&lt;/font&gt;&amp;nbsp;&lt;font color="Blue"&gt;void&lt;/font&gt;&amp;nbsp;UpdateFile&amp;nbsp;(&lt;font color="Blue"&gt;string&lt;/font&gt;&amp;nbsp;fileName,&amp;nbsp;DateTime&amp;nbsp;cubeUpdateDate) 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;41 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;42 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;try&lt;/font&gt;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;43 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlDocument&amp;nbsp;xmlDoc&amp;nbsp;=&amp;nbsp;&lt;font color="Blue"&gt;new&lt;/font&gt;&amp;nbsp;XmlDocument(); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;44 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlDoc.Load(fileName); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;45 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlNodeList&amp;nbsp;titleTags&amp;nbsp;=&amp;nbsp;xmlDoc.GetElementsByTagName(&lt;font color="Maroon"&gt;"Title"&lt;/font&gt;); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;46 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;if&lt;/font&gt;&amp;nbsp;(titleTags.Count&amp;nbsp;&amp;gt;&amp;nbsp;&lt;font color="Maroon"&gt;0&lt;/font&gt;) 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;47 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;48 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;string&lt;/font&gt;&amp;nbsp;viewTitle&amp;nbsp;=&amp;nbsp;titleTags[&lt;font color="Maroon"&gt;0&lt;/font&gt;].ChildNodes[&lt;font color="Maroon"&gt;0&lt;/font&gt;].Attributes[&lt;font color="Maroon"&gt;0&lt;/font&gt;].Value; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;49 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;if&lt;/font&gt;&amp;nbsp;(viewTitle.Contains(&lt;font color="Maroon"&gt;@"Correct&amp;nbsp;For"&lt;/font&gt;)) 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;50 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;51 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;viewTitle&amp;nbsp;=&amp;nbsp;viewTitle.Substring(&lt;font color="Maroon"&gt;0&lt;/font&gt;,&amp;nbsp;viewTitle.IndexOf(&lt;font color="Maroon"&gt;"Correct&amp;nbsp;For"&lt;/font&gt;)&amp;nbsp;+&amp;nbsp;&lt;font color="Maroon"&gt;11&lt;/font&gt;); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;52 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;viewTitle&amp;nbsp;+=&amp;nbsp;&lt;font color="Maroon"&gt;"&amp;nbsp;"&lt;/font&gt;&amp;nbsp;+&amp;nbsp;cubeUpdateDate.ToShortTimeString()&amp;nbsp;+&amp;nbsp;&lt;font color="Maroon"&gt;"&amp;nbsp;"&lt;/font&gt;&amp;nbsp;+&amp;nbsp;cubeUpdateDate.ToShortDateString(); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;53 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;titleTags[&lt;font color="Maroon"&gt;0&lt;/font&gt;].ChildNodes[&lt;font color="Maroon"&gt;0&lt;/font&gt;].Attributes[&lt;font color="Maroon"&gt;0&lt;/font&gt;].Value&amp;nbsp;=&amp;nbsp;viewTitle; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;54 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;titleTags[&lt;font color="Maroon"&gt;0&lt;/font&gt;].ChildNodes[&lt;font color="Maroon"&gt;0&lt;/font&gt;].Attributes[&lt;font color="Maroon"&gt;1&lt;/font&gt;].Value&amp;nbsp;=&amp;nbsp;viewTitle; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;55 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlDoc.Save(fileName); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;56 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;57 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;58 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;59 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;catch&lt;/font&gt;&amp;nbsp;(Exception&amp;nbsp;e) 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;60 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;61 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;font color="Maroon"&gt;"Error&amp;nbsp;reading/writing&amp;nbsp;file:&amp;nbsp;"&lt;/font&gt;&amp;nbsp;+&amp;nbsp;fileName); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;62 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;63 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;64 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;65 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;private&lt;/font&gt;&amp;nbsp;&lt;font color="Blue"&gt;string&lt;/font&gt;&amp;nbsp;GetConfigData&amp;nbsp;(&lt;font color="Blue"&gt;string&lt;/font&gt;&amp;nbsp;whichData) 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;66 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;67 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlDocument&amp;nbsp;xmlDoc&amp;nbsp;=&amp;nbsp;GetConfigXml(); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;68 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;return&lt;/font&gt;&amp;nbsp;xmlDoc.GetElementsByTagName(whichData)[&lt;font color="Maroon"&gt;0&lt;/font&gt;].InnerText; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;69 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;70 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;71 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;private&lt;/font&gt;&amp;nbsp;XmlDocument&amp;nbsp;GetConfigXml() 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;72 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;73 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlDocument&amp;nbsp;xmlDoc&amp;nbsp;=&amp;nbsp;&lt;font color="Blue"&gt;new&lt;/font&gt;&amp;nbsp;XmlDocument(); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;74 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlDoc.Load(&lt;font color="Maroon"&gt;"config.xml"&lt;/font&gt;); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;75 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;return&lt;/font&gt;&amp;nbsp;xmlDoc; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;76 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;77 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;78 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;private&lt;/font&gt;&amp;nbsp;DateTime&amp;nbsp;GetCubeUpdateDate&amp;nbsp;(&lt;font color="Blue"&gt;string&lt;/font&gt;&amp;nbsp;serverName,&amp;nbsp;&lt;font color="Blue"&gt;string&lt;/font&gt;&amp;nbsp;dbName) 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;79 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;80 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;using&lt;/font&gt;&amp;nbsp;(AMO.Server&amp;nbsp;server&amp;nbsp;=&amp;nbsp;&lt;font color="Blue"&gt;new&lt;/font&gt;&amp;nbsp;AMO.Server()) 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;81 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;82 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server.Connect(&lt;font color="Maroon"&gt;"Data&amp;nbsp;Source="&lt;/font&gt;&amp;nbsp;+&amp;nbsp;serverName); 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;83 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AMO.Database&amp;nbsp;db&amp;nbsp;=&amp;nbsp;server.Databases[dbName]; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;84 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;return&lt;/font&gt;&amp;nbsp;db.Cubes[&lt;font color="Maroon"&gt;0&lt;/font&gt;].LastProcessed; 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;85 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;86 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;87 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&lt;br&gt;
&lt;font color="Teal"&gt;&amp;nbsp;88 &lt;/font&gt;}
&lt;/div&gt;
&lt;br&gt;
The program uses xml config file that looks like this:&lt;br&gt;
&lt;br&gt;
&lt;div&gt;&lt;font color="Blue"&gt;&amp;lt;?&lt;/font&gt;&lt;font color="Maroon"&gt;xml&lt;/font&gt;&amp;nbsp;&lt;font color="Red"&gt;version&lt;/font&gt;="&lt;font color="Blue"&gt;1.0&lt;/font&gt;"&amp;nbsp;&lt;font color="Red"&gt;encoding&lt;/font&gt;="&lt;font color="Blue"&gt;utf-8&lt;/font&gt;"&amp;nbsp;&lt;font color="Blue"&gt;?&amp;gt;&lt;/font&gt; 
&lt;br&gt;
&lt;font color="Blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="Maroon"&gt;Config&lt;/font&gt;&lt;font color="Blue"&gt;&amp;gt;&lt;/font&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="Maroon"&gt;ServerName&lt;/font&gt;&lt;font color="Blue"&gt;&amp;gt;&lt;/font&gt;MyOlapServer&lt;font color="Blue"&gt;&amp;lt;&lt;/font&gt;/&lt;font color="Maroon"&gt;ServerName&lt;/font&gt;&lt;font color="Blue"&gt;&amp;gt;&lt;/font&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="Maroon"&gt;DataBaseName&lt;/font&gt;&lt;font color="Blue"&gt;&amp;gt;&lt;/font&gt;MyDBName&lt;font color="Blue"&gt;&amp;lt;&lt;/font&gt;/&lt;font color="Maroon"&gt;DataBaseName&lt;/font&gt;&lt;font color="Blue"&gt;&amp;gt;&lt;/font&gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="Blue"&gt;&amp;lt;&lt;/font&gt;&lt;font color="Maroon"&gt;BookDir&lt;/font&gt;&lt;font color="Blue"&gt;&amp;gt;&lt;/font&gt;MyBookDirPath&lt;font color="Blue"&gt;&amp;lt;&lt;/font&gt;/&lt;font color="Maroon"&gt;BookDir&lt;/font&gt;&lt;font color="Blue"&gt;&amp;gt;&lt;/font&gt; 
&lt;br&gt;
&lt;font color="Blue"&gt;&amp;lt;&lt;/font&gt;/&lt;font color="Maroon"&gt;Config&lt;/font&gt;&lt;font color="Blue"&gt;&amp;gt;&lt;/font&gt;
&lt;/div&gt;
&lt;br&gt;
The program assumes that all the database has the same update time so it takes the
last process time of the first cube in the database. If it's not true in your case
you can change it in the method GetCubeUpdateDate.&lt;br&gt;
Enjoy.&lt;br&gt;
&lt;br&gt;
&lt;u&gt;&lt;i&gt;update:&lt;/i&gt;&lt;/u&gt; If you're getting trouble with XmlDocument.Load method because
of hexadecimal characters in the view's xml file, look &lt;a href="http://dotnetics.integrethics.com/?p=66"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=30ba7767-a1f1-448c-a321-b1d5bbe29c94" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,30ba7767-a1f1-448c-a321-b1d5bbe29c94.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=0073e4e4-ac9e-4028-9590-1b138295a24f</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,0073e4e4-ac9e-4028-9590-1b138295a24f.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,0073e4e4-ac9e-4028-9590-1b138295a24f.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0073e4e4-ac9e-4028-9590-1b138295a24f</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">On June 10th, Panorama will show us the
new version of NovaView - 5.5.  The show will be only on the web (that's why
it called a webinar). We will see the new reports, flash-based dashboards and the
results of the cooporation with Google. You can see the brochure <a href="http://www.panorama.com/newsletter/2008/may/novaview-5-5-webinar.html">here</a>.
I would happy to say that I'll see you there. The only problem is that we won't see
each other and that's why I think that a real conference is better than a webby one.
On the other hand, it's much simpler and cheaper to do a webinar so I can understand
that move. Never mind, I'll see you in other time.<br /><p></p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=0073e4e4-ac9e-4028-9590-1b138295a24f" /></body>
      <title>Panorama's NovaView 5.5 Webinar</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,0073e4e4-ac9e-4028-9590-1b138295a24f.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,0073e4e4-ac9e-4028-9590-1b138295a24f.aspx</link>
      <pubDate>Fri, 30 May 2008 08:57:21 GMT</pubDate>
      <description>On June 10th, Panorama will show us the new version of NovaView - 5.5.&amp;nbsp; The show will be only on the web (that's why it called a webinar). We will see the new reports, flash-based dashboards and the results of the cooporation with Google. You can see the brochure &lt;a href="http://www.panorama.com/newsletter/2008/may/novaview-5-5-webinar.html"&gt;here&lt;/a&gt;.
I would happy to say that I'll see you there. The only problem is that we won't see
each other and that's why I think that a real conference is better than a webby one.
On the other hand, it's much simpler and cheaper to do a webinar so I can understand
that move. Never mind, I'll see you in other time.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=0073e4e4-ac9e-4028-9590-1b138295a24f" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,0073e4e4-ac9e-4028-9590-1b138295a24f.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=caa848fc-2c25-4b0c-9d82-a8fab031c49d</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,caa848fc-2c25-4b0c-9d82-a8fab031c49d.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,caa848fc-2c25-4b0c-9d82-a8fab031c49d.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=caa848fc-2c25-4b0c-9d82-a8fab031c49d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Two weeks ago I showed you the <a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,aba352e5-8587-4723-bc4f-55233698cccc.aspx">leds
map</a>. This time I'll describe how it is done.<br /><br />
The leds map is basically a web page with a lot of java-script and Panorama applets
which together bring the user a feeling of Ajax &amp; DHTML based web site.<br />
Look at the <a href="http://www.miky-schreiber.com/Blog/content/binary/LedsMap.jpg">picture
of the map</a> in the previous post. The leds are simply Panorama applets which show
Panorama views. Each view shows only one led. Using the Panorama SDK, I did the following:<br /><ul><li>
Take the led's value from the view and show it in the tooltip</li><li>
Take the led's color from the view and let the user filter the map according to the
desired color(s)</li><li>
Take the led's view path and after clicking the view, show the related views (the
departments' views)</li></ul>
The rest of it is just java-script games and tricks.<br />
The leds map is a beautiful example of what you can do with imagination, thought and
good will to give your customer a good working BI tool to work with.<br /><p></p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=caa848fc-2c25-4b0c-9d82-a8fab031c49d" /></body>
      <title>The Leds Map - How it is done</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,caa848fc-2c25-4b0c-9d82-a8fab031c49d.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,caa848fc-2c25-4b0c-9d82-a8fab031c49d.aspx</link>
      <pubDate>Sat, 29 Mar 2008 19:27:29 GMT</pubDate>
      <description>Two weeks ago I showed you the &lt;a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,aba352e5-8587-4723-bc4f-55233698cccc.aspx"&gt;leds
map&lt;/a&gt;. This time I'll describe how it is done.&lt;br&gt;
&lt;br&gt;
The leds map is basically a web page with a lot of java-script and Panorama applets
which together bring the user a feeling of Ajax &amp;amp; DHTML based web site.&lt;br&gt;
Look at the &lt;a href="http://www.miky-schreiber.com/Blog/content/binary/LedsMap.jpg"&gt;picture
of the map&lt;/a&gt; in the previous post. The leds are simply Panorama applets which show
Panorama views. Each view shows only one led. Using the Panorama SDK, I did the following:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Take the led's value from the view and show it in the tooltip&lt;/li&gt;
&lt;li&gt;
Take the led's color from the view and let the user filter the map according to the
desired color(s)&lt;/li&gt;
&lt;li&gt;
Take the led's view path and after clicking the view, show the related views (the
departments' views)&lt;/li&gt;
&lt;/ul&gt;
The rest of it is just java-script games and tricks.&lt;br&gt;
The leds map is a beautiful example of what you can do with imagination, thought and
good will to give your customer a good working BI tool to work with.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=caa848fc-2c25-4b0c-9d82-a8fab031c49d" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,caa848fc-2c25-4b0c-9d82-a8fab031c49d.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=aba352e5-8587-4723-bc4f-55233698cccc</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,aba352e5-8587-4723-bc4f-55233698cccc.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,aba352e5-8587-4723-bc4f-55233698cccc.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=aba352e5-8587-4723-bc4f-55233698cccc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">A month ago I <a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,4e617b82-e4c6-4f36-8a36-b70a8b850e34.aspx">posted</a> about
the necessity of sharing ideas in the BI world. I really think that if we all share
our smart ideas then we'll be better in our work.<br /><br />
I want to show you a work I finished few weeks ago. I'm very proud of this work as
it will be in the desktop of our CEO and I got many compliments for it.<br />
Note that what you see in the picture is not the real screenshot of the work (It's
much more beautiful in the reality...). There's a problem getting out screenshots
out of my company, so I did a sketch in Power Point.<br /><img src="http://www.miky-schreiber.com/Blog/content/binary/LedsMap.jpg" border="0" height="429" width="761" /><br />
This is the functionality of the leds map (my design, if you have any comments):<br /><ul><li>
The leds map is simply a web site, meaning zero-footprint in the client's computer.
Some computers in my company has java compatibility problems, so I added a parameter
you can send with the site's URL which changes the applet's java version (see more
in the next post, which will be more technical).</li><li>
The leds map has to be small, about a quarter of the screen. That's because it's intended
to be <b>a part of</b> the CEO's desktop.<br /></li><li>
When the map loads, a picture with a turning-around <a href="http://www.statue.com/the-thinker-statue.html">The
Thinker</a> statue is shown with a "Loading" message below (our CEO loves that statue...).</li><li>
After the map has been loaded, the user sees two axis with the leds in them. The two
axis can represent any Meta-Measures you'd like: Short-Term Profit Vs. Long-Term Profit,
Client's Satisfaction Vs. Company's Profit, etc. This is a point that many people
have difficulty to understand, so I'll give an example: The yellow led is in the top-right
corner, so that says that the underlying measure is very important in both the meta-measures.
Going on with the example, that says that this measure is very important for theClient's
Satisfaction <b>and </b>for the Company's Profit. Note that <b>the leds never move</b>.
Only their color changes.</li><li>
When you move the cursor on a measure in the map, a small tooltip appears next to
it. The tooltip shows the measure's name and its value (You can see it in the left-bottom
led). <i>Design Change:</i><i>As my team master recommended, now each led has its
measure's name above it. The tooltip shows only the value.</i></li><li>
When the map loads, only the red leds are shown. In the top-left corner of the screen,
there's three radio buttons which filters the shown leds by their colors. In the picture,
all the leds are shown because all the radio buttons are enabled.</li><li>
Clicking on a measure on the map drills-down to the different department's leds, as
you can see in the left side of the picture.</li><li>
Clicking on a department's led makes the map to vanish and instead of it there's a
drill-down of the department, meaning that the measures of its sub-departments are
shown instead of the map.<br /></li><li>
After the last drill-down was made, there are two possible actions: Close the new
view and return to the map or open the new view in full screen, where you can slice-and-dice
and play with the data.</li></ul>
In the next post I'll describe how the leds map was built using the Panorama SDK.<br /><p></p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=aba352e5-8587-4723-bc4f-55233698cccc" /></body>
      <title>The Leds Map</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,aba352e5-8587-4723-bc4f-55233698cccc.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,aba352e5-8587-4723-bc4f-55233698cccc.aspx</link>
      <pubDate>Sat, 15 Mar 2008 22:55:46 GMT</pubDate>
      <description>A month ago I &lt;a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,4e617b82-e4c6-4f36-8a36-b70a8b850e34.aspx"&gt;posted&lt;/a&gt; about
the necessity of sharing ideas in the BI world. I really think that if we all share
our smart ideas then we'll be better in our work.&lt;br&gt;
&lt;br&gt;
I want to show you a work I finished few weeks ago. I'm very proud of this work as
it will be in the desktop of our CEO and I got many compliments for it.&lt;br&gt;
Note that what you see in the picture is not the real screenshot of the work (It's
much more beautiful in the reality...). There's a problem getting out screenshots
out of my company, so I did a sketch in Power Point.&lt;br&gt;
&lt;img src="http://www.miky-schreiber.com/Blog/content/binary/LedsMap.jpg" border="0" height="429" width="761"&gt;
&lt;br&gt;
This is the functionality of the leds map (my design, if you have any comments):&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
The leds map is simply a web site, meaning zero-footprint in the client's computer.
Some computers in my company has java compatibility problems, so I added a parameter
you can send with the site's URL which changes the applet's java version (see more
in the next post, which will be more technical).&lt;/li&gt;
&lt;li&gt;
The leds map has to be small, about a quarter of the screen. That's because it's intended
to be &lt;b&gt;a part of&lt;/b&gt; the CEO's desktop.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
When the map loads, a picture with a turning-around &lt;a href="http://www.statue.com/the-thinker-statue.html"&gt;The
Thinker&lt;/a&gt; statue is shown with a "Loading" message below (our CEO loves that statue...).&lt;/li&gt;
&lt;li&gt;
After the map has been loaded, the user sees two axis with the leds in them. The two
axis can represent any Meta-Measures you'd like: Short-Term Profit Vs. Long-Term Profit,
Client's Satisfaction Vs. Company's Profit, etc. This is a point that many people
have difficulty to understand, so I'll give an example: The yellow led is in the top-right
corner, so that says that the underlying measure is very important in both the meta-measures.
Going on with the example, that says that this measure is very important for theClient's
Satisfaction &lt;b&gt;and &lt;/b&gt;for the Company's Profit. Note that &lt;b&gt;the leds never move&lt;/b&gt;.
Only their color changes.&lt;/li&gt;
&lt;li&gt;
When you move the cursor on a measure in the map, a small tooltip appears next to
it. The tooltip shows the measure's name and its value (You can see it in the left-bottom
led). &lt;i&gt;Design Change:&lt;/i&gt; &lt;i&gt;As my team master recommended, now each led has its
measure's name above it. The tooltip shows only the value.&lt;/i&gt;
&lt;/li&gt;
&lt;li&gt;
When the map loads, only the red leds are shown. In the top-left corner of the screen,
there's three radio buttons which filters the shown leds by their colors. In the picture,
all the leds are shown because all the radio buttons are enabled.&lt;/li&gt;
&lt;li&gt;
Clicking on a measure on the map drills-down to the different department's leds, as
you can see in the left side of the picture.&lt;/li&gt;
&lt;li&gt;
Clicking on a department's led makes the map to vanish and instead of it there's a
drill-down of the department, meaning that the measures of its sub-departments are
shown instead of the map.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
After the last drill-down was made, there are two possible actions: Close the new
view and return to the map or open the new view in full screen, where you can slice-and-dice
and play with the data.&lt;/li&gt;
&lt;/ul&gt;
In the next post I'll describe how the leds map was built using the Panorama SDK.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=aba352e5-8587-4723-bc4f-55233698cccc" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,aba352e5-8587-4723-bc4f-55233698cccc.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=2633d1b2-57b8-4da0-a027-126c594f7e88</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,2633d1b2-57b8-4da0-a027-126c594f7e88.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,2633d1b2-57b8-4da0-a027-126c594f7e88.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2633d1b2-57b8-4da0-a027-126c594f7e88</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">With Panorama SDK you can do cool stuff
as I will show you in the future. Though, There are important (and undocumented) things
you must know before you start. A very common task is to change the shown <strike>view</strike> views.
Note that:<br /><br />
If you load the view using the Parameter "Alias" with the full view path (ends with 
".xml") you won't be able to change the view. later. Worse: The applet will not return
an error. It will just won't respond. So, if you want to enable the dynamic change
of the view, in the "Alias" parameter only enter the name of the Briefing Book where
the desired view is. Next, add another parameter named "FirstView" and there enter <b>the
relative path</b> of the view, meaning that you'll have to remove the name of the
server and the briefing book's name. Don't forget to replace the back-slashes (\)
in double-back-slashed (\\), otherwise... the applet won't respond. Some examples:<br /><br />
use: AttachParameter("Alias", "http://&lt;myServer&gt;//&lt;ThePanoramaDirectoryPath&gt;//&lt;myBriefingBook&gt;//&lt;myDirectory&gt;//myView.xml");
to show a view with no option to change it later (not recommended). Note that here
you don't need to use back-slash because this is just a regual URL.<br /><br />
use:<br />
AttachParameter("Alias","myBriefingBook");<br />
AttachParameter("FirstView","\\&lt;myDirectory&gt;\\myView.xml");<br />
to show a view with an option to replace it later using the CallShowView function.<br /><br />
I recommend always using the second method. That's because you can't know what will
be the next demand of your customer. Remember that this is a very common thing to
do in the BI world.<br /><p></p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=2633d1b2-57b8-4da0-a027-126c594f7e88" /></body>
      <title>Panorama SDK: Dynamic Change of Views</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,2633d1b2-57b8-4da0-a027-126c594f7e88.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,2633d1b2-57b8-4da0-a027-126c594f7e88.aspx</link>
      <pubDate>Mon, 25 Feb 2008 14:39:22 GMT</pubDate>
      <description>With Panorama SDK you can do cool stuff as I will show you in the future. Though, There are important (and undocumented) things you must know before you start. A very common task is to change the shown &lt;strike&gt;view&lt;/strike&gt; views.
Note that:&lt;br&gt;
&lt;br&gt;
If you load the view using the Parameter "Alias" with the full view path (ends with&amp;nbsp;
".xml") you won't be able to change the view. later. Worse: The applet will not return
an error. It will just won't respond. So, if you want to enable the dynamic change
of the view, in the "Alias" parameter only enter the name of the Briefing Book where
the desired view is. Next, add another parameter named "FirstView" and there enter &lt;b&gt;the
relative path&lt;/b&gt; of the view, meaning that you'll have to remove the name of the
server and the briefing book's name. Don't forget to replace the back-slashes (\)
in double-back-slashed (\\), otherwise... the applet won't respond. Some examples:&lt;br&gt;
&lt;br&gt;
use: AttachParameter("Alias", "http://&amp;lt;myServer&amp;gt;//&amp;lt;ThePanoramaDirectoryPath&amp;gt;//&amp;lt;myBriefingBook&amp;gt;//&amp;lt;myDirectory&amp;gt;//myView.xml");
to show a view with no option to change it later (not recommended). Note that here
you don't need to use back-slash because this is just a regual URL.&lt;br&gt;
&lt;br&gt;
use:&lt;br&gt;
AttachParameter("Alias","myBriefingBook");&lt;br&gt;
AttachParameter("FirstView","\\&amp;lt;myDirectory&amp;gt;\\myView.xml");&lt;br&gt;
to show a view with an option to replace it later using the CallShowView function.&lt;br&gt;
&lt;br&gt;
I recommend always using the second method. That's because you can't know what will
be the next demand of your customer. Remember that this is a very common thing to
do in the BI world.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=2633d1b2-57b8-4da0-a027-126c594f7e88" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,2633d1b2-57b8-4da0-a027-126c594f7e88.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=7473180e-117f-447f-b84c-38d91bbe3374</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,7473180e-117f-447f-b84c-38d91bbe3374.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,7473180e-117f-447f-b84c-38d91bbe3374.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7473180e-117f-447f-b84c-38d91bbe3374</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Although SSAS willl let you use them, some other application such as Panorama won't
function properly. I'll give one example: When you perform Drillthrough in Panorama,
on the fly the engine gererates a web page that will take the user to the next view.
The next view will be sliced as the current view, so this web page needs to pass the
dimensions parameter (meaning - the current slices). That's why this web page contains
this line:
</p>
        <p>
AttachParameters("Slicers","%Slicers%")
</p>
        <p>
A big problem will occur if one of the sliced dimensions will be sliced on a member
with a name that contains inverted commas ("). The JavaScript will result an error
because there are three inverted commas in the second parameter of the line. This
is only one example of what can happen in a BI consumer program if you'll use special
characters in member names. So - be careful not to pass these characters from the
DW (build the ETL so it will drop these characters) or giving those names in SSAS,
such as the All member name.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=7473180e-117f-447f-b84c-38d91bbe3374" />
      </body>
      <title>Do Not Use Special Characters in DW &amp; SSAS</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,7473180e-117f-447f-b84c-38d91bbe3374.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,7473180e-117f-447f-b84c-38d91bbe3374.aspx</link>
      <pubDate>Tue, 15 Jan 2008 14:08:32 GMT</pubDate>
      <description>&lt;p&gt;
Although SSAS willl let you use them, some other application such as Panorama won't
function properly. I'll give one example: When you perform Drillthrough in Panorama,
on the fly the engine gererates a web page that will take the user to the next view.
The next view will be sliced as the current view, so this web page needs to pass the
dimensions parameter (meaning - the current slices). That's why this web page contains
this line:
&lt;/p&gt;
&lt;p&gt;
AttachParameters("Slicers","%Slicers%")
&lt;/p&gt;
&lt;p&gt;
A big problem will occur if one of the sliced dimensions will be sliced on a member
with a name that contains inverted commas ("). The JavaScript will result an error
because there are three inverted commas in the second parameter of the line. This
is only one example of what can happen in a BI consumer program if you'll use special
characters in member names. So - be careful not to pass these characters from the
DW (build the ETL so it will drop these characters) or giving those names in SSAS,
such as the All member name.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=7473180e-117f-447f-b84c-38d91bbe3374" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,7473180e-117f-447f-b84c-38d91bbe3374.aspx</comments>
      <category>BI;BI/DataWarehousing;BI/Panorama;BI/SQL Server 2005;BI/SQL Server 2005/Analysis Services;BI/SQL Server 2008;BI/SQL Server 2008/Analysis Services</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=280b3057-ed09-4ea9-98e6-23ca6b26b2e2</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,280b3057-ed09-4ea9-98e6-23ca6b26b2e2.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,280b3057-ed09-4ea9-98e6-23ca6b26b2e2.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=280b3057-ed09-4ea9-98e6-23ca6b26b2e2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The Panorama NovaView Desktop program can't always deal with huge crossjoins. The
reason is that this program is written in VB6 - very old platform for client programs.
One thing you can try is to go to the crosstab properties and in the Advanced tab,
click on the "Optimize huge crossjoins". The problem is that this won't always help.
The best solutions I've found so far is to go to the Web Access site (or click
on the IE button in the desktop program) and there you can choose the size of the
chunk of data you'll receive on every click. Starting with 100 rows in the first chunk,
this may help you with huge crossjoins.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=280b3057-ed09-4ea9-98e6-23ca6b26b2e2" />
      </body>
      <title>Panorama and big Crossjoins</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,280b3057-ed09-4ea9-98e6-23ca6b26b2e2.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,280b3057-ed09-4ea9-98e6-23ca6b26b2e2.aspx</link>
      <pubDate>Sat, 05 Jan 2008 20:48:11 GMT</pubDate>
      <description>&lt;p&gt;
The Panorama NovaView Desktop program can't always deal with huge crossjoins. The
reason is that this program is written in VB6 - very old platform for client programs.
One thing you can try is to go to the crosstab properties and in the Advanced tab,
click on the "Optimize huge crossjoins". The problem is that this won't always help.
The best solutions I've found so far is to go to the Web Access site (or&amp;nbsp;click
on the IE button in the desktop program) and there you can choose the size of the
chunk of data you'll receive on every click. Starting with 100 rows in the first chunk,
this may help you with huge crossjoins.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=280b3057-ed09-4ea9-98e6-23ca6b26b2e2" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,280b3057-ed09-4ea9-98e6-23ca6b26b2e2.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=c4301bd6-b0d6-4f03-bbfe-f65e77ddb854</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,c4301bd6-b0d6-4f03-bbfe-f65e77ddb854.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,c4301bd6-b0d6-4f03-bbfe-f65e77ddb854.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=c4301bd6-b0d6-4f03-bbfe-f65e77ddb854</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My team master Yaron asked me to check some things in the Panorama Dashboards:
</p>
1. Can have two hands in one gauge.<br />
2. Can I show two values in the text of every gauge. 
<p>
Here are the answers. I think that the second answer is a beautiful one. In fact,
I really enjoyed while I thought how to do this.
</p><p>
1. This is simple: Just use the Goal hand as the second hand. In the KPI Wizard go
to the Define Goal step and choose Custom formula. Enter the measure you want to see
in the second hand.
</p><p>
2. This is beautiful: In the KPI Wizard, go to the Finish step and to the Title part.
Click on the little blue arrow and click on "Edit MDX...". Then, write this MDX:
</p>
[My Dimension].[My Hierarchy].CurrentMember.Name + '\n' +<br />
[Measures].[First Measure].Name + ': ' +<br />
Generate({[My Dimension].[My Hierarchy].CurrentMember},[Measures].[First Measure])
+ '\n' +<br />
[Measures].[Second Measure].Name + ': ' +<br />
Generate({[My Dimension].[My Hierarchy].CurrentMember},[Measures].[Second Measure]) 
<p>
Note that:
</p><ul><li>
This solution may apply to other BI applications, not only to Panorama. 
</li><li>
This way you can show many values and data, not only two values. 
</li><li>
What the Generate function doing there? The '+' operator needs to have two strings
in both sides, so writing only the [Measures].[First Measure] or [Measures].[First
Measure].Value will return a numeric value which will cause error. The Generate function
used this way will return a string. It generates for the set (which contains only
our member) the value of the measure (in the second argument of the formula) and as
mentioned, returns it as string. 
</li><li>
'\n' will jump to the next line</li></ul><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=c4301bd6-b0d6-4f03-bbfe-f65e77ddb854" /></body>
      <title>Showing multiple values in Panorama Dashboards</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,c4301bd6-b0d6-4f03-bbfe-f65e77ddb854.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,c4301bd6-b0d6-4f03-bbfe-f65e77ddb854.aspx</link>
      <pubDate>Wed, 19 Dec 2007 19:18:35 GMT</pubDate>
      <description>&lt;p&gt;
My team master Yaron asked me to check some things in&amp;nbsp;the Panorama Dashboards:
&lt;/p&gt;
1.&amp;nbsp;Can have two hands in one gauge.&lt;br&gt;
2. Can I show two values in the text of every gauge. 
&lt;p&gt;
Here are the answers. I think that the second answer is a beautiful one. In fact,
I really enjoyed while&amp;nbsp;I thought how to do this.
&lt;/p&gt;
&lt;p&gt;
1. This is simple: Just use the Goal hand as the second hand. In the KPI Wizard go
to the Define Goal step and choose Custom formula. Enter the measure you want to see
in the second hand.
&lt;/p&gt;
&lt;p&gt;
2. This is beautiful: In the KPI Wizard, go to the Finish step and to the Title part.
Click on the little blue arrow and click on "Edit MDX...". Then, write this MDX:
&lt;/p&gt;
[My Dimension].[My Hierarchy].CurrentMember.Name + '\n' +&lt;br&gt;
[Measures].[First Measure].Name + ': ' +&lt;br&gt;
Generate({[My Dimension].[My Hierarchy].CurrentMember},[Measures].[First Measure])
+ '\n' +&lt;br&gt;
[Measures].[Second Measure].Name + ': ' +&lt;br&gt;
Generate({[My Dimension].[My Hierarchy].CurrentMember},[Measures].[Second Measure]) 
&lt;p&gt;
Note that:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
This solution may apply to other BI applications, not only to Panorama. 
&lt;li&gt;
This way you can show many values and data, not only two values. 
&lt;li&gt;
What the&amp;nbsp;Generate function doing there? The '+' operator needs to have two strings
in both sides, so writing only the [Measures].[First Measure] or [Measures].[First
Measure].Value will return a numeric value which will cause error. The Generate function
used this way will return a string. It generates for the set (which contains only
our member) the value of the measure (in the second argument of the formula) and as
mentioned, returns it as string. 
&lt;li&gt;
'\n' will jump to the next line&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=c4301bd6-b0d6-4f03-bbfe-f65e77ddb854" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,c4301bd6-b0d6-4f03-bbfe-f65e77ddb854.aspx</comments>
      <category>BI;BI/MDX;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=2781f9e8-ef93-45c8-b211-ad8c91c01315</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,2781f9e8-ef93-45c8-b211-ad8c91c01315.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,2781f9e8-ef93-45c8-b211-ad8c91c01315.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2781f9e8-ef93-45c8-b211-ad8c91c01315</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I never thought of it until one of my users said it. Sorting the KPI can be a very
good idea. Instead of always having the same indicators (gauges, traffic lights, etc.)
in the same position of the screen, sorting it can make the viewer expect that
the most relevant indicator will be placed in the top-left corner of the screen, the
second most-relevant will be placed after it, etc.
</p>
        <p>
Sorting the KPI is a very easy thing. Every end user, even with no clue in MDX can
do it by following this:
</p>
        <p>
In the Define KPI wizard, go to the "Select Set" step. Copy the current set.
For the example, let's say that the current set is [Products].Members and you want
to sort it according to the Sales measure in descending order. Click on the advanced
button on the right of the set (The button with the "..." on it) and enter the following
MDX statement: 
</p>
        <p>
Order([Products].Members, [Measures].[Sales], DESC)
</p>
        <p>
If you want to order in ascending order you can replace the DESC with ASC or not to
mention it at all.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=2781f9e8-ef93-45c8-b211-ad8c91c01315" />
      </body>
      <title>Sort your KPI</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,2781f9e8-ef93-45c8-b211-ad8c91c01315.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,2781f9e8-ef93-45c8-b211-ad8c91c01315.aspx</link>
      <pubDate>Wed, 21 Nov 2007 21:24:44 GMT</pubDate>
      <description>&lt;p&gt;
I never thought of it until one of my users said it. Sorting the KPI can be a very
good idea. Instead of always having the same indicators (gauges, traffic lights, etc.)
in the same position&amp;nbsp;of the screen, sorting it can make the viewer expect that
the most relevant indicator will be placed in the top-left corner of the screen, the
second most-relevant will be placed after it, etc.
&lt;/p&gt;
&lt;p&gt;
Sorting the KPI is a very easy thing. Every end user, even with no clue in MDX can
do it by following this:
&lt;/p&gt;
&lt;p&gt;
In the&amp;nbsp;Define KPI wizard, go to the "Select Set" step. Copy the current set.
For the example, let's say that the current set is [Products].Members and you want
to sort it according to the Sales measure in descending order. Click on the advanced
button on the right of the set (The button with the "..." on it) and enter the following
MDX statement: 
&lt;/p&gt;
&lt;p&gt;
Order([Products].Members, [Measures].[Sales], DESC)
&lt;/p&gt;
&lt;p&gt;
If you want to order in ascending order you can replace the DESC with ASC or not to
mention it at all.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=2781f9e8-ef93-45c8-b211-ad8c91c01315" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,2781f9e8-ef93-45c8-b211-ad8c91c01315.aspx</comments>
      <category>BI;BI/MDX;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=4353e35b-12c7-4547-96ad-06351878a8bc</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,4353e35b-12c7-4547-96ad-06351878a8bc.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,4353e35b-12c7-4547-96ad-06351878a8bc.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4353e35b-12c7-4547-96ad-06351878a8bc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you see "No Data" after you entered a view with defined KPI, most chances
that the reason has something to do with privileges, but today I've seen one more
thing you can do that will make the KPI go crazy.
</p>
        <p>
One of my users built a view and he removed all the measures but one. After that,
when he defined the set of his KPI, he chose the set of the measures. That
caused the "No Data" title when he wanted to see his KPI view.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=4353e35b-12c7-4547-96ad-06351878a8bc" />
      </body>
      <title>No data in KPI view</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,4353e35b-12c7-4547-96ad-06351878a8bc.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,4353e35b-12c7-4547-96ad-06351878a8bc.aspx</link>
      <pubDate>Wed, 21 Nov 2007 20:45:19 GMT</pubDate>
      <description>&lt;p&gt;
If you see "No Data"&amp;nbsp;after you entered a view with defined KPI, most chances
that the reason has something to do with privileges, but today I've seen one more
thing you can do that will make the KPI go crazy.
&lt;/p&gt;
&lt;p&gt;
One of my users built a view and he removed all the measures but one. After that,
when he defined the set of his KPI, he chose the set&amp;nbsp;of the&amp;nbsp;measures. That
caused the "No Data" title when he wanted to see his KPI view.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=4353e35b-12c7-4547-96ad-06351878a8bc" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,4353e35b-12c7-4547-96ad-06351878a8bc.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=f0f049cf-581c-49df-9170-abd407aeaacd</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,f0f049cf-581c-49df-9170-abd407aeaacd.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,f0f049cf-581c-49df-9170-abd407aeaacd.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f0f049cf-581c-49df-9170-abd407aeaacd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of my users had a very weird problem today. When he entered a view with KPI gauges,
he could see everything but the gauges. All was there: The titles, numbers, etc. but
the gauges itself. The problem occurred in the Panorama Web Access site and also in
the dashboard site. I checked with other users and they didn't have this problem (with
the same views, of course).
</p>
        <p>
After a few minutes I found the problem: The Explorer process in windows used too
much memory and it caused visual problems in the browser. I ended the process, restarted
it (Ctrl + Shift + Esc -&gt; File -&gt; New task -&gt; explorer) and everything went
back to normal.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=f0f049cf-581c-49df-9170-abd407aeaacd" />
      </body>
      <title>KPI view with no gauges</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,f0f049cf-581c-49df-9170-abd407aeaacd.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,f0f049cf-581c-49df-9170-abd407aeaacd.aspx</link>
      <pubDate>Wed, 21 Nov 2007 20:39:21 GMT</pubDate>
      <description>&lt;p&gt;
One of my users had a very weird problem today. When he entered a view with KPI gauges,
he could see everything but the gauges. All was there: The titles, numbers, etc. but
the gauges itself. The problem occurred in the Panorama Web Access site and also in
the dashboard site. I checked with other users and they didn't have this problem (with
the same views, of course).
&lt;/p&gt;
&lt;p&gt;
After a few minutes I found the problem: The Explorer process in windows used too
much memory and it caused visual problems in the browser. I ended the process, restarted
it (Ctrl + Shift + Esc -&amp;gt; File -&amp;gt; New task -&amp;gt; explorer) and everything went
back to normal.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=f0f049cf-581c-49df-9170-abd407aeaacd" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,f0f049cf-581c-49df-9170-abd407aeaacd.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=6d88fdfe-93a4-4047-b997-a29a51c0a722</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,6d88fdfe-93a4-4047-b997-a29a51c0a722.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,6d88fdfe-93a4-4047-b997-a29a51c0a722.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6d88fdfe-93a4-4047-b997-a29a51c0a722</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Important note: The user working with Panorama NovaView Desktop must have write privileges
on the Panorama folder (The default is: C:\Program files\Panorama). The program saves
its data there, so it will cause many troubles if it won't be able to save. For example,
when you start the program and click on the globe (work on briefing book from the
server) you'll have to enter the panorama's server name every time you start the program
(if you don't have the mentioned privilege).
</p>
        <p>
Don't worry: The user <strong>watching</strong> the views doesn't need to have any
privilege on its computer. He only needs the right to see the view or the dashboard
page.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=6d88fdfe-93a4-4047-b997-a29a51c0a722" />
      </body>
      <title>Panorama's privileges requirements on the computer</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,6d88fdfe-93a4-4047-b997-a29a51c0a722.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,6d88fdfe-93a4-4047-b997-a29a51c0a722.aspx</link>
      <pubDate>Wed, 21 Nov 2007 20:27:33 GMT</pubDate>
      <description>&lt;p&gt;
Important note: The user working with Panorama NovaView Desktop must have write privileges
on the Panorama folder (The default is: C:\Program files\Panorama). The program saves
its data there, so it will cause many troubles if it won't be able to save. For example,
when you start the program and click on the globe (work on briefing book from the
server) you'll have to enter the panorama's server name every time you start the program
(if you don't have the mentioned privilege).
&lt;/p&gt;
&lt;p&gt;
Don't worry: The user &lt;strong&gt;watching&lt;/strong&gt; the views doesn't need to have any
privilege on its computer. He only needs the right to see the view or the dashboard
page.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=6d88fdfe-93a4-4047-b997-a29a51c0a722" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,6d88fdfe-93a4-4047-b997-a29a51c0a722.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=b5794e75-7f51-41dc-910b-d8df86491025</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,b5794e75-7f51-41dc-910b-d8df86491025.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,b5794e75-7f51-41dc-910b-d8df86491025.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b5794e75-7f51-41dc-910b-d8df86491025</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">This very useful option in Panorama can
prevent much pain. Often, you don't want your CEO(s) to play with the views you created
in Panorama. The beautiful dashboard page you created is what you want them to see
and that's it. 
<br />
In the dashboards site, select the component holding the desired view and in its Toolbar
options, check the "Disable Analysis" checkbox. This will prevent the user from slicing
and dicing with your view.<br /><p></p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=b5794e75-7f51-41dc-910b-d8df86491025" /></body>
      <title>The CEO Mode</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,b5794e75-7f51-41dc-910b-d8df86491025.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,b5794e75-7f51-41dc-910b-d8df86491025.aspx</link>
      <pubDate>Tue, 06 Nov 2007 20:10:19 GMT</pubDate>
      <description>This very useful option in Panorama can prevent much pain. Often, you don't want your CEO(s) to play with the views you created in Panorama. The beautiful dashboard page you created is what you want them to see and that's it. &lt;br&gt;
In the dashboards site, select the component holding the desired view and in its Toolbar
options, check the "Disable Analysis" checkbox. This will prevent the user from slicing
and dicing with your view.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=b5794e75-7f51-41dc-910b-d8df86491025" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,b5794e75-7f51-41dc-910b-d8df86491025.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=eefa4744-17a9-4bfb-bfac-dd2bde0d0915</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,eefa4744-17a9-4bfb-bfac-dd2bde0d0915.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,eefa4744-17a9-4bfb-bfac-dd2bde0d0915.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=eefa4744-17a9-4bfb-bfac-dd2bde0d0915</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It seems that four days before I wrote my post about <a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,7c24d42e-88fe-4718-956f-d3cc9c22858c.aspx">Panorama
Hidden Settings</a>, Panorama entered all the registry keys into their knowledge base.
You can find them <a href="http://kb.panorama.com/index.php?option=com_content&amp;task=view&amp;id=289&amp;Itemid=83">here</a>.
Strage: I seeked it for a long time and now I see that it was always there, under
my nose.
</p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=eefa4744-17a9-4bfb-bfac-dd2bde0d0915" />
      </body>
      <title>Panorama Hidden Settings Unrevealed</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,eefa4744-17a9-4bfb-bfac-dd2bde0d0915.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,eefa4744-17a9-4bfb-bfac-dd2bde0d0915.aspx</link>
      <pubDate>Mon, 29 Oct 2007 17:58:13 GMT</pubDate>
      <description>&lt;p&gt;
It seems&amp;nbsp;that four days before I wrote my post about &lt;a href="http://www.miky-schreiber.com/Blog/PermaLink,guid,7c24d42e-88fe-4718-956f-d3cc9c22858c.aspx"&gt;Panorama
Hidden Settings&lt;/a&gt;, Panorama entered all the registry keys into their knowledge base.
You can find them &lt;a href="http://kb.panorama.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=289&amp;amp;Itemid=83"&gt;here&lt;/a&gt;.
Strage: I seeked it for a long time and now I see that it was always there, under
my nose.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=eefa4744-17a9-4bfb-bfac-dd2bde0d0915" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,eefa4744-17a9-4bfb-bfac-dd2bde0d0915.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=0ee6c819-dc0d-4801-a675-ceb967b17bb6</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,0ee6c819-dc0d-4801-a675-ceb967b17bb6.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,0ee6c819-dc0d-4801-a675-ceb967b17bb6.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0ee6c819-dc0d-4801-a675-ceb967b17bb6</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">This post is about Panorama because it
is the UI tool I'm working with, but this can be made with every BI UI tool.<br /><br />
My customer wanted to get the effect shown by Analysis Services 2005 when browsing
a dimension (see the picture below). He wanted to see some properties of the members
shown in the rows, along with the usual measures. Unfortunately, Panorama (and I'm
sure that also other tools) does not have this option in the GIU. The solution is
this code:<br /><br />
Create Member CurrentCube.[Measures].[MyProperty] as<br />
  iif(IsLeaf([MyDimension].[MyHierarchy].CurrentMember),<br />
     [MyDimension].[MyHierarchy].CurrentMember.Properties("MyProperty"),<br />
     Null)<br /><br />
Note that declaring only the third row will cause that every member that is not a
leaf will cause an error, which is something we don't want the viewer to see. If the
dimension has properties for members in other levels too, you can adjust this decleration.
This member can be declared either in the DataBase's Script (after the CALCULATE expression)
or inside the session/query (not recommended in Panorama). Now, all you have to do
is to show the dimension's members in the rows and this new measure in the columns
(after or before the regular measures), and you'll get what you want.<br /><p></p><img src="http://www.miky-schreiber.com/Blog/content/binary/memberProperties.JPG" border="0" /><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=0ee6c819-dc0d-4801-a675-ceb967b17bb6" /></body>
      <title>Showing Member Properties in Panorama</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,0ee6c819-dc0d-4801-a675-ceb967b17bb6.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,0ee6c819-dc0d-4801-a675-ceb967b17bb6.aspx</link>
      <pubDate>Sun, 30 Sep 2007 18:47:12 GMT</pubDate>
      <description>This post is about Panorama because it is the UI tool I'm working with, but this can be made with every BI UI tool.&lt;br&gt;
&lt;br&gt;
My customer wanted to get the effect shown by Analysis Services 2005 when browsing
a dimension (see the picture below). He wanted to see some properties of the members
shown in the rows, along with the usual measures. Unfortunately, Panorama (and I'm
sure that also other tools) does not have this option in the GIU. The solution is
this code:&lt;br&gt;
&lt;br&gt;
Create Member CurrentCube.[Measures].[MyProperty] as&lt;br&gt;
&amp;nbsp; iif(IsLeaf([MyDimension].[MyHierarchy].CurrentMember),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [MyDimension].[MyHierarchy].CurrentMember.Properties("MyProperty"),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Null)&lt;br&gt;
&lt;br&gt;
Note that declaring only the third row will cause that every member that is not a
leaf will cause an error, which is something we don't want the viewer to see. If the
dimension has properties for members in other levels too, you can adjust this decleration.
This member can be declared either in the DataBase's Script (after the CALCULATE expression)
or inside the session/query (not recommended in Panorama). Now, all you have to do
is to show the dimension's members in the rows and this new measure in the columns
(after or before the regular measures), and you'll get what you want.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.miky-schreiber.com/Blog/content/binary/memberProperties.JPG" border="0"&gt;&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=0ee6c819-dc0d-4801-a675-ceb967b17bb6" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,0ee6c819-dc0d-4801-a675-ceb967b17bb6.aspx</comments>
      <category>BI;BI/MDX;BI/Panorama;BI/SQL Server 2005;BI/SQL Server 2005/Analysis Services</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=a1039c3e-376d-403f-af7f-1d9ccc70cb3a</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,a1039c3e-376d-403f-af7f-1d9ccc70cb3a.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,a1039c3e-376d-403f-af7f-1d9ccc70cb3a.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a1039c3e-376d-403f-af7f-1d9ccc70cb3a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I'm almost done with my exams, so my writing
can continue.<br /><br />
This post is not about how to customize your Dashboard (well, not only about it).
Its purpose is to say it loud: Customize your Dashboard!<br />
When the executives of your company (Yeah, I guess you work in a company. Does someone
building Bi Portal for himself?) see the customized gauges with their company logo
on it, they'll love it. No matter what these gauges will show them, you got their
attention and their sympathy for the Dashboards site you made. Now, everything is
easier. The bosses are in your hands.<br /><br />
For the Panorama NovaView users:<br /><ol><li>
Follow <a href="http://kb.panorama.com/images/stories/KPI%20Customization%20Tutorial/kpi_customization_tutorial.pdf">this
link</a> to learn how to do this.</li><li>
Do NOT start working before you backup your E-BI/KPI folder !</li><li>
I recommend using <a href="http://notepad-plus.sourceforge.net/uk/site.htm">Notepad++</a> or
another good XML editor when writing in the XML files. Otherwise, you can mix the
whole file and you'll have to start all over again.</li></ol><br /><p></p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=a1039c3e-376d-403f-af7f-1d9ccc70cb3a" /></body>
      <title>Customize your Dashboard</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,a1039c3e-376d-403f-af7f-1d9ccc70cb3a.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,a1039c3e-376d-403f-af7f-1d9ccc70cb3a.aspx</link>
      <pubDate>Sun, 09 Sep 2007 19:30:52 GMT</pubDate>
      <description>I'm almost done with my exams, so my writing can continue.&lt;br&gt;
&lt;br&gt;
This post is not about how to customize your Dashboard (well, not only about it).
Its purpose is to say it loud: Customize your Dashboard!&lt;br&gt;
When the executives of your company (Yeah, I guess you work in a company. Does someone
building Bi Portal for himself?) see the customized gauges with their company logo
on it, they'll love it. No matter what these gauges will show them, you got their
attention and their sympathy for the Dashboards site you made. Now, everything is
easier. The bosses are in your hands.&lt;br&gt;
&lt;br&gt;
For the Panorama NovaView users:&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
Follow &lt;a href="http://kb.panorama.com/images/stories/KPI%20Customization%20Tutorial/kpi_customization_tutorial.pdf"&gt;this
link&lt;/a&gt; to learn how to do this.&lt;/li&gt;
&lt;li&gt;
Do NOT start working before you backup your E-BI/KPI folder !&lt;/li&gt;
&lt;li&gt;
I recommend using &lt;a href="http://notepad-plus.sourceforge.net/uk/site.htm"&gt;Notepad++&lt;/a&gt; or
another good XML editor when writing in the XML files. Otherwise, you can mix the
whole file and you'll have to start all over again.&lt;/li&gt;
&lt;/ol&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=a1039c3e-376d-403f-af7f-1d9ccc70cb3a" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,a1039c3e-376d-403f-af7f-1d9ccc70cb3a.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=618c5fd7-9b1d-4c47-aa48-9a9e286f0a6d</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,618c5fd7-9b1d-4c47-aa48-9a9e286f0a6d.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,618c5fd7-9b1d-4c47-aa48-9a9e286f0a6d.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=618c5fd7-9b1d-4c47-aa48-9a9e286f0a6d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">We've been working for a while to enable
SSO in our Panorama's Dashboard site. In a matter of fact, the responsibility for
this was under the skilled hands of our system team. After a short time they succeeded
and SSO was established in our site. We saw it when we entered the site: Instead of
login page we directly entered the dashboard page.<br />
After a few days, when I entered into the settings section of the dashboard site,
I saw this:<br /><p></p><img src="http://www.miky-schreiber.com/Blog/content/binary/panoramaNoEnableSecurity.JPG" border="0" /><br /><br />
Yes, that's right. No security at all. This is why we entered directly to the dashboard
page instead of the login page...<br />
The system team claims that they never said that the SSO succeeded and we say they
did. No one will prove he's right, so there's no one to blame. But blaming is not
everything. The important thing here is to learn for the next time: When you think
you got a feature - check it. Things not always as they seems to be.<br /><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=618c5fd7-9b1d-4c47-aa48-9a9e286f0a6d" /></body>
      <title>Enhanced Security or No Security ?</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,618c5fd7-9b1d-4c47-aa48-9a9e286f0a6d.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,618c5fd7-9b1d-4c47-aa48-9a9e286f0a6d.aspx</link>
      <pubDate>Sat, 11 Aug 2007 19:52:53 GMT</pubDate>
      <description>We've been working for a while to enable SSO in our Panorama's Dashboard site. In a matter of fact, the responsibility for this was under the skilled hands of our system team. After a short time they succeeded and SSO was established in our site. We saw it when we entered the site: Instead of login page we directly entered the dashboard page.&lt;br&gt;
After a few days, when I entered into the settings section of the dashboard site,
I saw this:&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.miky-schreiber.com/Blog/content/binary/panoramaNoEnableSecurity.JPG" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
Yes, that's right. No security at all. This is why we entered directly to the dashboard
page instead of the login page...&lt;br&gt;
The system team claims that they never said that the SSO succeeded and we say they
did. No one will prove he's right, so there's no one to blame. But blaming is not
everything. The important thing here is to learn for the next time: When you think
you got a feature - check it. Things not always as they seems to be.&lt;br&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=618c5fd7-9b1d-4c47-aa48-9a9e286f0a6d" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,618c5fd7-9b1d-4c47-aa48-9a9e286f0a6d.aspx</comments>
      <category>BI;BI/Panorama;Programming;Tips &amp; Tricks</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=7c24d42e-88fe-4718-956f-d3cc9c22858c</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,7c24d42e-88fe-4718-956f-d3cc9c22858c.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,7c24d42e-88fe-4718-956f-d3cc9c22858c.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7c24d42e-88fe-4718-956f-d3cc9c22858c</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">For some reason (and don't ask me why),
the Panorama NovaView's documentation doesn't contain any information about some of
the most important settings. Here some of them, hoping that this will help many users:<br /><br /><ul><li>
In the Panorama Web Access web site, by default a user can  save his views (after
he made his modifications) only in his private book. To enable him save his views
in the Briefing Book (which means - the public book), do the following: Inside the
Panorama server, open the Registry Editor (Start -&gt; Run -&gt; regedit) and go to
the path HKEY_LOCAL_MACHINE\Software\Panorama\Nova View 5\Admin. Add a new string
value named "PublicBookAdmin". As its value, enter all the users you want to give
them the option to save their views in the Briefing Book by this template: &lt;User1Domain&gt;\&lt;User1Name&gt;,&lt;User2Domain&gt;\&lt;User2Name&gt;,
etc. For example: panoramaDevServer\PowerUser, MSHOME\Miky.</li><li>
The subscriptions web part will show you only the views that <b>you</b> registered
to, but by default no one can register himself to the views. What you need to do is
to open the Registry Editor in the panorama server, go to the same path as mentioned
above and add a string value named "ShowSubsAndAlerts" with the value 1. After that,
every user will be able to right click on any view in the Panorama Web Access web
site, click on Register and it will be added to the subscriptions web part for him.<br /></li><li>
For some users, the loading animations which are shown before every applet appears
in the Dashboard website will stay forever, meaning that the user will never see the
dashboard itself. I think this has something to do with the Java or Microsoft VM of
the user. Anyway, a nice workaround is to cancel this animation. To do this, enter
the path C:\Program Files\Panorama\E-BI\Dashboard\include (replace the beginning if
you installed to panorama software in a different location) and inside the Config.asp
file, change the constant "ShowAnimationWhileLoadingApplets" value to false. This
is a good workaroung because anyway, the applets should appear in a second or two.
Otherwise - buy a faster server.<br /></li></ul>
As I go on working with Panorama I'll write some more tips &amp; tricks. Stay Tuned.<br /><p></p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=7c24d42e-88fe-4718-956f-d3cc9c22858c" /></body>
      <title>Panorama Hidden Settings </title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,7c24d42e-88fe-4718-956f-d3cc9c22858c.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,7c24d42e-88fe-4718-956f-d3cc9c22858c.aspx</link>
      <pubDate>Thu, 19 Jul 2007 16:20:52 GMT</pubDate>
      <description>For some reason (and don't ask me why), the Panorama NovaView's documentation doesn't contain any information about some of the most important settings. Here some of them, hoping that this will help many users:&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
In the Panorama Web Access web site, by default a user can&amp;nbsp; save his views (after
he made his modifications) only in his private book. To enable him save his views
in the Briefing Book (which means - the public book), do the following: Inside the
Panorama server, open the Registry Editor (Start -&amp;gt; Run -&amp;gt; regedit) and go to
the path HKEY_LOCAL_MACHINE\Software\Panorama\Nova View 5\Admin. Add a new string
value named "PublicBookAdmin". As its value, enter all the users you want to give
them the option to save their views in the Briefing Book by this template: &amp;lt;User1Domain&amp;gt;\&amp;lt;User1Name&amp;gt;,&amp;lt;User2Domain&amp;gt;\&amp;lt;User2Name&amp;gt;,
etc. For example: panoramaDevServer\PowerUser, MSHOME\Miky.&lt;/li&gt;
&lt;li&gt;
The subscriptions web part will show you only the views that &lt;b&gt;you&lt;/b&gt; registered
to, but by default no one can register himself to the views. What you need to do is
to open the Registry Editor in the panorama server, go to the same path as mentioned
above and add a string value named "ShowSubsAndAlerts" with the value 1. After that,
every user will be able to right click on any view in the Panorama Web Access web
site, click on Register and it will be added to the subscriptions web part for him.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
For some users, the loading animations which are shown before every applet appears
in the Dashboard website will stay forever, meaning that the user will never see the
dashboard itself. I think this has something to do with the Java or Microsoft VM of
the user. Anyway, a nice workaround is to cancel this animation. To do this, enter
the path C:\Program Files\Panorama\E-BI\Dashboard\include (replace the beginning if
you installed to panorama software in a different location) and inside the Config.asp
file, change the constant "ShowAnimationWhileLoadingApplets" value to false. This
is a good workaroung because anyway, the applets should appear in a second or two.
Otherwise - buy a faster server.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
As I go on working with Panorama I'll write some more tips &amp;amp; tricks. Stay Tuned.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=7c24d42e-88fe-4718-956f-d3cc9c22858c" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,7c24d42e-88fe-4718-956f-d3cc9c22858c.aspx</comments>
      <category>BI;BI/Panorama</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=a68059bf-fe59-48d5-a9e8-dd366e6a861c</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,a68059bf-fe59-48d5-a9e8-dd366e6a861c.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,a68059bf-fe59-48d5-a9e8-dd366e6a861c.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a68059bf-fe59-48d5-a9e8-dd366e6a861c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I never thought that I'll do a commercial
to Microsoft, but <a href="http://www.microsoft.com/sql/solutions/bi/projectreal.mspx">Project
Real</a> is a great thing that they did and they should get the credit for it. This
project is a full end-to-end BI solution, including ETLs (using SSIS), Analysis Services
cubes and mining modules, Reporting Services reports, end-user Panorama views and
more.<br /><br />
We work with Panorama as our main GUI tool to show our users the cube's data as tables,
charts, dashboards, etc, so this project is really helping us to learn how to implement
our project from the first ETL step all the way to the last Panorama step.<br /><br />
Recommended.<br /><p></p><img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=a68059bf-fe59-48d5-a9e8-dd366e6a861c" /></body>
      <title>Project Real</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,a68059bf-fe59-48d5-a9e8-dd366e6a861c.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,a68059bf-fe59-48d5-a9e8-dd366e6a861c.aspx</link>
      <pubDate>Sat, 14 Jul 2007 21:05:54 GMT</pubDate>
      <description>I never thought that I'll do a commercial to Microsoft, but &lt;a href="http://www.microsoft.com/sql/solutions/bi/projectreal.mspx"&gt;Project
Real&lt;/a&gt; is a great thing that they did and they should get the credit for it. This
project is a full end-to-end BI solution, including ETLs (using SSIS), Analysis Services
cubes and mining modules, Reporting Services reports, end-user Panorama views and
more.&lt;br&gt;
&lt;br&gt;
We work with Panorama as our main GUI tool to show our users the cube's data as tables,
charts, dashboards, etc, so this project is really helping us to learn how to implement
our project from the first ETL step all the way to the last Panorama step.&lt;br&gt;
&lt;br&gt;
Recommended.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=a68059bf-fe59-48d5-a9e8-dd366e6a861c" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,a68059bf-fe59-48d5-a9e8-dd366e6a861c.aspx</comments>
      <category>BI;BI/Panorama;BI/SQL Server 2005;BI/SQL Server 2005/Analysis Services;BI/SQL Server 2005/Integration Services</category>
    </item>
    <item>
      <trackback:ping>http://www.miky-schreiber.com/Blog/Trackback.aspx?guid=b31ff5e3-1617-4e01-a9fc-a2d2cd5cacd0</trackback:ping>
      <pingback:server>http://www.miky-schreiber.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.miky-schreiber.com/Blog/PermaLink,guid,b31ff5e3-1617-4e01-a9fc-a2d2cd5cacd0.aspx</pingback:target>
      <dc:creator>mikypuff</dc:creator>
      <wfw:comment>http://www.miky-schreiber.com/Blog/CommentView,guid,b31ff5e3-1617-4e01-a9fc-a2d2cd5cacd0.aspx</wfw:comment>
      <wfw:commentRss>http://www.miky-schreiber.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b31ff5e3-1617-4e01-a9fc-a2d2cd5cacd0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
For some weeks we were fighting with (or against?) the Panorama software in order
to make it work right and show a nice pilot of BI dashboard screen to our managers.
After three weeks we managed to show a good opening position by building a nice dashboard
screen including a map, graphs, gauges and crosstabs.
</p>
        <p>
I found that the installation of the SQL Server and the Panorama server was not good
enough in my company, so I decided to try it for myself. The installation of the SQL
Server is quite easy (Next, Next, Next ...), but installing the Panorama server is
a complicated process. Paying attention to so many small details, knowing and remembering
what to do inside the Windows server, IIS, Windows services, Windows registry and
more is not so easy. Finally, after two days I managed to do this. Now I know that
some things in the installation in my work place were not so good and I can point
them out.
</p>
        <p>
You can see the exciting (for me, at least) result in this picture, as it is a nice
dashboard taken from my screen. Many posts about Panorama and SQL Server 2005 will
come ahead. Now I can relax - Panorama is on the way...
</p>
        <p>
          <img src="http://www.miky-schreiber.com/Blog/content/binary/pan.JPG" border="0" />
        </p>
        <img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=b31ff5e3-1617-4e01-a9fc-a2d2cd5cacd0" />
      </body>
      <title>Finally, working</title>
      <guid isPermaLink="false">http://www.miky-schreiber.com/Blog/PermaLink,guid,b31ff5e3-1617-4e01-a9fc-a2d2cd5cacd0.aspx</guid>
      <link>http://www.miky-schreiber.com/Blog/PermaLink,guid,b31ff5e3-1617-4e01-a9fc-a2d2cd5cacd0.aspx</link>
      <pubDate>Thu, 31 May 2007 19:09:10 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
For some weeks we were fighting with (or against?) the Panorama software in order
to make it work right and show a nice pilot of BI dashboard screen to our managers.
After three weeks we managed to show a good opening position by building a nice dashboard
screen including a map, graphs, gauges and crosstabs.
&lt;/p&gt;
&lt;p&gt;
I found that the installation of the SQL Server and the Panorama server was not good
enough in my company, so I decided to try it for myself. The installation of the SQL
Server is quite easy (Next, Next, Next ...), but installing the Panorama server is
a complicated process. Paying attention to so many small details, knowing and remembering
what to do inside the Windows server, IIS, Windows services, Windows registry&amp;nbsp;and
more is not so easy. Finally, after two days I managed to do this. Now I know that
some things in the installation in my work place were not so good and I can point
them out.
&lt;/p&gt;
&lt;p&gt;
You can see the exciting (for me, at least) result in this picture, as it is a nice
dashboard taken from my screen. Many posts about Panorama and SQL Server 2005 will
come ahead. Now I can relax - Panorama is on the way...
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.miky-schreiber.com/Blog/content/binary/pan.JPG" border=0&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.miky-schreiber.com/Blog/aggbug.ashx?id=b31ff5e3-1617-4e01-a9fc-a2d2cd5cacd0" /&gt;</description>
      <comments>http://www.miky-schreiber.com/Blog/CommentView,guid,b31ff5e3-1617-4e01-a9fc-a2d2cd5cacd0.aspx</comments>
      <category>BI;BI/Panorama;BI/SQL Server 2005</category>
    </item>
  </channel>
</rss>