<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MTG&#039;s Essbase Blog</title>
	<atom:link href="http://blog.mtgny.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.mtgny.com</link>
	<description></description>
	<lastBuildDate>Tue, 24 Apr 2012 17:46:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Overcoming Calc Scripts Writers Block</title>
		<link>http://blog.mtgny.com/?p=120</link>
		<comments>http://blog.mtgny.com/?p=120#comments</comments>
		<pubDate>Tue, 24 Apr 2012 17:26:35 +0000</pubDate>
		<dc:creator>Ron Moore</dc:creator>
				<category><![CDATA[Essbase]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.mtgny.com/?p=120</guid>
		<description><![CDATA[(Keywords: BSO Calculations , Beginner) Ever draw a blank when you try to come up with a bit of calc script code?  You aren’t the only one.  Many students in my Essbase Bootcamp classes have lamented that they can do the exercises when they have instructions but they can’t come up with the code for [...]]]></description>
			<content:encoded><![CDATA[<p>(Keywords: BSO Calculations , Beginner)</p>
<p>Ever draw a blank when you try to come up with a bit of calc script code?  You aren’t the only one.  Many students in my Essbase Bootcamp classes have lamented that they can do the exercises when they have instructions but they can’t come up with the code for their real world requirements on their own.  That’s what led me to create the “visual approach to calculations”.  Here is a very simple example…</p>
<ul>
<li>Create a spreadsheet view with one example of the result cell and the source cells.</li>
</ul>
<p><a href="http://blog.mtgny.com/wp-content/uploads/2012/04/VizAppFig1.gif"><img class="aligncenter size-medium wp-image-121" title="Visual Approach to Calcs Fig 1" src="http://blog.mtgny.com/wp-content/uploads/2012/04/VizAppFig1-300x158.gif" alt="" width="300" height="158" /></a></p>
<ul>
<li>Write down the intersection name (all the member-name coordinates – one for each stored dimension separated by cross dimensional operators) of the result cell on the left side of the equal sign and the source cells on the right.</li>
</ul>
<p style="text-align: center;">Jan-&gt;Cola-&gt;Actual-&gt;NewYork-&gt;Share = Jan-&gt;Cola-&gt;Actual-&gt;NewYork-&gt;Sales / Jan-&gt;Cola-&gt;Actual-&gt;Maket-&gt;Sales</p>
<ul>
<li>On the left side, drop each member name for dimensions where all members (or those specified by a FIX statement) should be calculated.  Then drop the same member names from the right side ONLY if it’s the identical member NOT members from the same dimension.</li>
</ul>
<p style="text-align: center;"><span style="text-decoration: line-through;">Jan-&gt;Cola-&gt;Actual-&gt;NewYork</span>-&gt;Share = <span style="text-decoration: line-through;">Jan-&gt;Cola-&gt;Actual-&gt;NewYork</span>-<span style="text-decoration: line-through;">&gt;</span>Sales <span style="text-decoration: line-through;">/ Jan-&gt;Cola-&gt;Actual-&gt;</span>Market-&gt;Sales</p>
<ul>
<li>The result will be the correct calculation if absolute references are required.  If relative references are required substitute functions as necessary.  You will probably use @Parentval() ,@Ancestval(), @MDParentval() and @MDAncestval() functions most of the time.</li>
</ul>
<p style="text-align: center;">Share = Sales / Market-&gt;Sales;</p>
<ul>
<li>Notice that the cross dimensional operator behaves like the $ in Excel to create an absolute reference</li>
</ul>
<p>&nbsp;</p>
<p>For more about the visual approach to calculations check out our following recorded webcasts:</p>
<p><a title="Visual Approach to Essbase Calcs, Part 1" href="https://mtg.webex.com/mtg/lsr.php?AT=pb&amp;SP=EC&amp;rID=29675792&amp;rKey=880FAE9E5E58C1F3 " target="_blank"><strong>Visual Approach to Essbase Calculations, Part 1</strong></a></p>
<p><a title="Visual Approach to Essbase Calcs, Part 2" href="https://mtg.webex.com/mtg/lsr.php?AT=pb&amp;SP=EC&amp;rID=31235607&amp;rKey=079884B788D63C74 " target="_blank"><strong>Visual Approach to Essbase Calculations, Part 2</strong></a></p>
<p>&nbsp;</p>
<p><strong>Related MTG Courses:</strong></p>
<div>Advanced Calculations for Forecasting and Driver Based Budgeting</div>
<p><a href="http://www.mtgny.com/mtg-training/advcalcs-dbb/">April 30-May 1, 2012</a> (NYC)</p>
<div>Essbase Calculations (BSO), Part 1</div>
<p><a href="http://www.mtgny.com/mtg-training/bso1">May 23, 2012</a> (NYC)</p>
<p><a href="http://www.mtgny.com/mtg-training/bso1">May 24, 2012</a> (online)</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.mtgny.com%2F%3Fp%3D120&amp;title=Overcoming%20Calc%20Scripts%20Writers%20Block" id="wpa2a_2"><img src="http://blog.mtgny.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mtgny.com/?feed=rss2&#038;p=120</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Needs Analysis Checklist: From Data to a Cube</title>
		<link>http://blog.mtgny.com/?p=98</link>
		<comments>http://blog.mtgny.com/?p=98#comments</comments>
		<pubDate>Tue, 04 Oct 2011 16:46:30 +0000</pubDate>
		<dc:creator>Laura</dc:creator>
				<category><![CDATA[Essbase]]></category>

		<guid isPermaLink="false">http://blog.mtgny.com/?p=98</guid>
		<description><![CDATA[At the beginning of the summer, when I first started my internship at Marketing Technologies Group (MTG), I knew next to nothing about Essbase.  Then, after taking part in the Essbase Bootcamp, I was assigned the task of building an Essbase cube for a topic of my choice.  The possibilities seemed endless, and even after [...]]]></description>
			<content:encoded><![CDATA[<p>At the beginning of the summer, when I first started my internship at Marketing Technologies Group (MTG), I knew next to nothing about Essbase.  Then, after taking part in the Essbase Bootcamp, I was assigned the task of building an Essbase cube for a topic of my choice.  The possibilities seemed endless, and even after I made the somewhat morbid decision to create a database of mortality statistics, I still faced a lot of uncertainty.  The gap between raw data and a useful and effective Essbase cube is huge.   According to MTG’s standard methodology, I turned to <a title="MTG Needs Analysis Checklist" href="http://www.mtgny.com/MTG_Needs_Analysis_Checklist .pdf">MTG’s Need’s Analysis Checklist</a>, which provides an objective-based, step-by-step planning process.  With its help, I was able to better understand the project and design requirements so that I could ultimately build a more effective cube.</p>
<p>In this blog, I will walk you through the <a href="http://www.mtgny.com/MTG_Needs_Analysis_Checklist .pdf">Needs Analysis Checklist</a> as I approached it in working on my mortality database.</p>
<div>
<h2>Users</h2>
</div>
<p>The first step is to think about who is going to use the database.  Are there a few users or many?  What type of experience do they have?  To what departments do they belong and what are their job functions?  A successful project is one whose users find it to be useful, so to make sure the project is successful, you must first understand your users.</p>
<p>In my case, I was my own user.  To make the project more interesting, however, I pretended that I worked for the World Health Organization(WHO) or was in some other position that gave me the ability to guide decisions about health initiatives.</p>
<div>
<h2>Business Objectives</h2>
</div>
<p>The second step is to identify the users’ business objectives.  What questions do they want the cube to answer?  How will the cube be used to make decisions?  To what improvements will it lead?  The answers to these questions have great significance.  They guide the design of the cube and provide benchmarks on which to measure the project’s success.  If you find yourself struggling to answer these questions, the cube may not be worth building.</p>
<p>I considered what my WHO alter ego wanted to gain from this project and came up with the following.</p>
<ul>
<li>The cube should answer the following questions:</li>
</ul>
<ol>
<li>What causes of death are most prevalent for particular regions, genders, and age groups?</li>
<li>What genders and age groups are most at risk in particular regions?</li>
<li>How do the death rates of various regions compare?</li>
<li>Where are the death rates from easily preventable diseases still high?</li>
<li>What are the death rate trends?  Which death rates are going up over time and which are going down?</li>
</ol>
<ul>
<li>The cube will be used to make decisions as follows:</li>
</ul>
<ol>
<li>Information about the number of deaths due to various preventable diseases will inform decisions about how to allocate funds to various health initiatives.  Variance statistics among regions will highlight diseases that are much more deadly in certain regions of the world.  These diseases and regions will be likely candidates for effective programs.</li>
<li>Statistical comparisons among regions, age groups, and genders will help make decisions about which populations various programs should target.</li>
<li>Year-to-year comparisons will provide insight about the success of existing programs and will be used to make decisions about whether to continue, change, or eliminate these programs.</li>
</ol>
<ul>
<li>The cube will lead to the following improvements:</li>
</ul>
<ol>
<li>More targeted, effective, and efficient spending on health initiatives</li>
</ol>
<div>
<h2>Metrics</h2>
</div>
<p>The next step is to decide what measurements you will need to meet your business objectives.  In many cases, these are financial measurements.  In my case I decided on the following:</p>
<ol>
<li>Deaths in thousands (The format of the data I would be loading)</li>
<li>Deaths  (A more intuitive way to look at the raw numbers)</li>
<li>Crude Death Rate (For comparison among regions, genders, age groups, and years with different populations.  Crude Death Rate is the number of deaths per thousand people.)</li>
<li>Population (Used to calculate Crude Death Rate)</li>
<li>Percentage of deaths due to given cause (To illustrate the relative impact of each cause of death; also useful for comparisons among populations)</li>
<li>Percent Variance (To show how the crude death rate deviates from the norm and identify candidates for health initiatives by highlighting abnormally high death rates)</li>
</ol>
<div>
<h2>Dimension Summary</h2>
</div>
<p>The best place to start is with the business objectives.  What other dimensions are necessary in order to complete the desired analysis?</p>
<p>After deciding what dimensions you need, consider the hierarchy structure of each.  At this stage, the Oracle Essbase Bootcamp suggests making label outlines for each dimension.  Label outlines consist of the dimension name followed by two parallel hierarchies.  The first hierarchy lists a generic name for each generation while the second lists a real-world example for each generation.</p>
<p align="left">Based on my business objectives, I knew that I wanted to make comparisons across years, ages, genders, regions, and causes, so I decided to make each of these categories a dimension.  The next step was to map out the hierarchies.  <em>All Years</em>, <em>All Ages</em>, and <em>Both Genders</em> were easy because they had very few members.  For <em>All Causes</em>, I used the hierarchy that already existed in my data source.  For <em>All Regions</em>, however, my data source just had a list of a couple hundred countries.  I knew that I wanted to make larger scale comparisons among parts of the world, so I decided to organize the countries into regions and sub-regions.  I created my label outlines and organized them in the table below.</p>
<p style="text-align: center;" align="left"><a href="http://blog.mtgny.com/wp-content/uploads/2011/10/NA11.gif"><img class="aligncenter size-full wp-image-108" title="Label Outlines" src="http://blog.mtgny.com/wp-content/uploads/2011/10/NA11.gif" alt="" width="500" height="345" /></a></p>
<p>After you map out your hierarchies, make a note of how large you expect each dimension to be.  You may also want to make a tentative decision about sparse and dense storage configuration.  You’ll need to load your data before you’ll be able to make a final decision, but setting the Accounts and Time dimensions (<em>Measures</em> and <em>All Years</em> in my case) to dense and the other dimensions to sparse is usually a good place to start.</p>
<div>
<h2>Output</h2>
</div>
<p>After you create the cube, how will users access the data?  What views will provide them with the information they need?  In answering these questions, you’ll want to refer once again to the business objectives.  Consider what reports each user will need and what layout of page, column, and row dimensions/members will make the information easiest to understand.  Also, consider the formatting of the reports.  For instance, will you create tables or graphs?  Tables provide a granular look at exact figures, but graphs may be a better way to quickly understand the “big picture.”</p>
<p>Information about output requirements can be organized in a table.  The table below lists only a few of the reports that I decided to make, but it should provide an idea about how to approach this step in the planning process.</p>
<p style="text-align: center;"><a href="http://blog.mtgny.com/wp-content/uploads/2011/10/NA21.gif"><img class="aligncenter size-full wp-image-109" title="Output" src="http://blog.mtgny.com/wp-content/uploads/2011/10/NA21.gif" alt="" width="570" height="389" /></a></p>
<div>
<h2>Input</h2>
</div>
<p>After you develop plans to organize and use the data, it’s time to consider the input data.  What are the sources, formats, and sizes of your input files?  How frequently are input files created?  In terms of the dimensions that you have outlined, how is your data organized?  As with the information about output, this information can be organized in a chart.  Information about my three sources is organized below.</p>
<p style="text-align: center;"><a href="http://blog.mtgny.com/wp-content/uploads/2011/10/NA31.gif"><img class="aligncenter size-full wp-image-110" title="Input" src="http://blog.mtgny.com/wp-content/uploads/2011/10/NA31.gif" alt="" width="573" height="544" /></a></p>
<p>It’s also important to compare and contrast your input sources.  In particular, can you use one load rule for all your input files or do different sources need different rules?  The formatting of my three files was comparable.  The 2008 file was different in that it provided data for males and females on the same worksheet.  However, the 2004 filed could easily be combined into a file with the same format as the 2008 file.</p>
<p>Another point to consider is whether the data in the input files will be loaded at level 0.  The best practice is to load data at level 0.  However, in my case, it was not possible to do so.   My population data had different dimensionality than my death data; while the population data was specific to each year, age, gender, and region, it was not specific to a cause.  Thus, I had to load my population data at generation one of my <em>All Causes</em> dimension.  Normalization calculations are generally needed when data is loaded high.  In the next section, I will discuss the normalization calculations that my database required.</p>
<div>
<h2>Transformations</h2>
</div>
<p>The transformations section asks you to consider all the needed calculations.  These include calculations to be set in the outline, like aggregation properties and member formulas, as well as calculations to be included in the calc script.  Consider errors that would occur if you ran the default calc script.  How can you correct these errors?</p>
<div>
<h3>Normalization Calcs</h3>
</div>
<p>Normalization calcs are needed when data is loaded high.   If you are going to load data high, work through the logic of the necessary corrections.</p>
<p>As aforementioned, I loaded population data to generation one of <em>All Causes</em>.   In order to calculate Crude Death Rate for cause categories and individual causes at lower levels of the hierarchy, I needed my calc script to copy the population statistics from generation one down to the other generations of <em>All Causes.   </em>I then needed to prevent further aggregation across <em>All Causes</em> as such aggregation would incorrectly add the population data.  However, I did need to aggregate <em>All Causes</em> at some point because I needed to aggregate the <em>Deaths in Thousands</em> data.  To resolve this problem, I decided to turn off AggMissg, aggregate the <em>All Causes</em> dimension, and then perform my normalization calc.</p>
<div>
<h3>Essbase Outline Calcs</h3>
</div>
<p>When planning the outline calculations, consider each dimension.  Where possible, add dynamic calcs to reduce database size.</p>
<p>I began with my <em>Measures</em> dimension.  First, I considered aggregation.  Since it made no sense to aggregate the various measures, I set their consolidation property to Ignore (~).  I also set <em>Measures</em> to Label Only.  I then focused on my four calculated measures and decided that each could be dynamically calculated by a formula.  I planned out the formulas as below.</p>
<ul>
<li>Deaths = Deaths in thousands * 1000</li>
<li>Crude Death Rate = Deaths/Population * 1000</li>
<li>Percentage of deaths = Deaths % Deaths -&gt; All Causes</li>
<li>Percent Variance= %Var(Crude Death Rate, Crude Death Rate-&gt;All Regions)</li>
</ul>
<p>Next, I considered my other five dimensions.  Except for the issue with aggregating population as discussed in the Normalization section, each dimension had a very standard aggregation.  I set all the members of these five dimensions to aggregate by addition.</p>
<div>
<h2>Procedures and Hardware/Software Environment</h2>
</div>
<p>After creating a cube, you’ll need to provide your users with information about how to use it.  Provide instructions on loading data, calculating, updating the outline, and producing reports.  Also consider providing information about the required hardware and software.</p>
<div>
<h2>Conclusion</h2>
</div>
<p>After completing all these steps, you should better understand your cube’s purpose and the process you will follow to make your data serve that purpose.  While completing the <a href="http://www.mtgny.com/MTG_Needs_Analysis_Checklist .pdf">Needs Analysis Checklist </a>requires time and thought, it prevents costly errors, enables a more efficient build process, and produces a more useful result.  It helped me to successfully create my first database, and it helps consultants at MTG to create cubes for clients.  Working through the <a href="http://www.mtgny.com/MTG_Needs_Analysis_Checklist .pdf">Needs Analysis Checklist</a> is well worth the time.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.mtgny.com%2F%3Fp%3D98&amp;title=The%20Needs%20Analysis%20Checklist%3A%20From%20Data%20to%20a%20Cube" id="wpa2a_4"><img src="http://blog.mtgny.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mtgny.com/?feed=rss2&#038;p=98</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Analysis Subscription Controls</title>
		<link>http://blog.mtgny.com/?p=88</link>
		<comments>http://blog.mtgny.com/?p=88#comments</comments>
		<pubDate>Tue, 16 Aug 2011 16:29:22 +0000</pubDate>
		<dc:creator>Laura</dc:creator>
				<category><![CDATA[Essbase]]></category>
		<category><![CDATA[Reporting]]></category>

		<guid isPermaLink="false">http://blog.mtgny.com/?p=88</guid>
		<description><![CDATA[One of Hyperion Web Analysis’ strengths is creating visually appealing reports, or dashboards, that combine various components.  The most effective dashboards have components that work together.  For instance, a spreadsheet could display actual and budget profit data for all products in a given region while a bar chart in the same report could display profit [...]]]></description>
			<content:encoded><![CDATA[<p>One of Hyperion Web Analysis’ strengths is creating visually appealing reports, or dashboards, that combine various components.  The most effective dashboards have components that work together.  For instance, a spreadsheet could display actual and budget profit data for all products in a given region while a bar chart in the same report could display profit variance percent for all products in the same region.  If users want to change the point of view and, for example, see information for a different region, they should be able to make a new selection (e.g., select a new region) just once and have that selection applied to all components of the report (e.g., the spreadsheet and chart).  Subscription controls provide this functionality in an easy and visual way.</p>
<p>Subscription controls come in various types from Radio Button Group Subscriptions to Slider Subscriptions to Combo Box Subscriptions.  When you create a subscription control, you link it to the data sources of whatever components you want to control and then select members of a dimension among which you want to toggle.  Making a selection with a subscription control icon applies that selection to all of the components whose data sources you selected.  This makes it easy to quickly change one or several factor across a variety of displays.</p>
<h2>Create a Subscription Control:</h2>
<ul>
<li>Open or create a report that contains at least two components.</li>
</ul>
<p><a href="http://blog.mtgny.com/wp-content/uploads/2011/08/LS1.gif"><img class="aligncenter size-full wp-image-90" title="LS1" src="http://blog.mtgny.com/wp-content/uploads/2011/08/LS1.gif" alt="" width="218" height="198" /></a></p>
<ul>
<li>In Design view, drag and drop a subscription icon, such as the <strong>Combo Box Subscription</strong> icon , into the content pane.</li>
<li>Use Ctrl-click to select the data sources for all the components that you wish to control.  Click <strong>OK</strong>.</li>
</ul>
<p><a href="http://blog.mtgny.com/wp-content/uploads/2011/08/LS2.gif"><img class="aligncenter size-full wp-image-91" title="LS2" src="http://blog.mtgny.com/wp-content/uploads/2011/08/LS2.gif" alt="" width="160" height="168" /></a></p>
<ul>
<li>Select the dimension that you want to control. Click <strong>OK</strong>.</li>
</ul>
<p><a href="http://blog.mtgny.com/wp-content/uploads/2011/08/LS3.gif"><img class="aligncenter size-full wp-image-92" title="LS3" src="http://blog.mtgny.com/wp-content/uploads/2011/08/LS3.gif" alt="" width="113" height="206" /></a></p>
<ul>
<li>Click <strong>Add</strong> and select the members that you want to toggle among. Click <strong>OK</strong>.</li>
</ul>
<p><a href="http://blog.mtgny.com/wp-content/uploads/2011/08/LS4.gif"><img class="aligncenter size-full wp-image-93" title="LS4" src="http://blog.mtgny.com/wp-content/uploads/2011/08/LS4.gif" alt="" width="404" height="252" /></a></p>
<ul>
<li>Click <strong>OK</strong> again.  Switch to Analyze view and use the subscription control to control for which member of the selected dimension data is shown.  To control the POV for additional dimensions, add additional subscription controls.</li>
</ul>
<p><a href="http://blog.mtgny.com/wp-content/uploads/2011/08/LS5.gif"><img class="aligncenter size-full wp-image-89" title="LS5" src="http://blog.mtgny.com/wp-content/uploads/2011/08/LS5.gif" alt="" width="403" height="395" /></a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.mtgny.com%2F%3Fp%3D88&amp;title=Web%20Analysis%20Subscription%20Controls" id="wpa2a_6"><img src="http://blog.mtgny.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mtgny.com/?feed=rss2&#038;p=88</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Calc Functions for Date Measures in Essbase 11.1.1: @DateDiff, @DatePart and @DateRoll</title>
		<link>http://blog.mtgny.com/?p=75</link>
		<comments>http://blog.mtgny.com/?p=75#comments</comments>
		<pubDate>Thu, 14 Apr 2011 13:24:39 +0000</pubDate>
		<dc:creator>Ron Moore</dc:creator>
				<category><![CDATA[Essbase]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.mtgny.com/?p=75</guid>
		<description><![CDATA[Date math can be extremely useful in solving a variety of business problems such as accounts receivables and accounts payable forecasting, project management, loan and interest calculations.  It may come as a surprise to some Essbase users but it has always been possible to do date math in Essbase the same way Excel does date math, using serial dates.  ]]></description>
			<content:encoded><![CDATA[<p>Date math can be extremely useful in solving a variety of business problems such as accounts receivable and accounts payable forecasting, project management and loan and interest calculations.  It has always been possible to do date math in Essbase the same way Excel does date math, using serial dates.  For example April 13, 2011 can be represented as 40646 – the number of days since January 1, 1900.  The only difference is that Excel is much better about formatting the results as the date.  The user has to do that in Essbase queries.</p>
<p>In version 11 Essbase introduces text and date measures and a handful of Calc functions for manipulating them.  In this article we&#8217;ll address three Essbase BSO Calc language functions for dealing with dates.</p>
<h2>Essbase V 11 New Date Functions</h2>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="139" valign="top"><strong>Function</strong></td>
<td width="396" valign="top"><strong>Returns</strong></td>
</tr>
<tr>
<td width="139" valign="top">@DATEDIFF</td>
<td width="396" valign="top">Difference between two dates.</td>
</tr>
<tr>
<td width="139" valign="top">@DATEPART</td>
<td width="396" valign="top">The number of the Year, Quarter, Month, Week, Day, DayOfYear or weekday</td>
</tr>
<tr>
<td width="139" valign="top">@DATEROLL</td>
<td width="396" valign="top">adds or subtracts the specified number of time periods to the input</td>
</tr>
</tbody>
</table>
<p>In this simple example we want to forecast revenue based on outstanding invoices and customer payment history. That is, we will add the average number of days it takes each customer to pay to the outstanding invoices to calculate expected future payment date.  This may or may not be a reliable approach to forecasting.  Our objective here is simply to practice the mechanics of the calculations.</p>
<p>Setting up the outline to use using date measures requires several steps:</p>
<p><a href="http://blog.mtgny.com/wp-content/uploads/2011/04/Picture1-21.jpg"><img class="alignnone size-full wp-image-79" title="Picture1-2" src="http://blog.mtgny.com/wp-content/uploads/2011/04/Picture1-21.jpg" alt="" width="482" height="579" /></a></p>
<p>This spreadsheet shows the input data, invoices by customer.</p>
<p><a href="http://blog.mtgny.com/wp-content/uploads/2011/04/Picture3.jpg"><img class="alignnone size-full wp-image-77" title="Picture3" src="http://blog.mtgny.com/wp-content/uploads/2011/04/Picture3.jpg" alt="" width="543" height="451" /></a></p>
<p><strong>Input:</strong></p>
<ul>
<li>InvoiceDate: Date of invoice</li>
<li>PaidDate: Date paid for already paid invoices</li>
</ul>
<h3>Output:</h3>
<ul>
<li>PaidAge : Number of days old when paid</li>
<li>RevenueDate: Expected payment date</li>
<li>RevenueMonth : Month number when paid</li>
</ul>
<p> </p>
<p>We will do the calculations in three steps:</p>
<ol>
<li>CalculatePaidAge, the age when paid for each already paid invoice</li>
<li>Calculate the average PaidAge by customer</li>
<li>Calculate the RevenueDate and RevenueMonth for unpaid invoices</li>
</ol>
<p>Here&#8217;s the calc script:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="638" valign="top"><span style="color: #339966;">/***** Declare a temporary variable to hold the average age when paid  *********/</span>Var vAvgDays;</p>
<p><span style="color: #339966;">/******* Set up the calc member block since we are using and IF statement in a script**** */</span></p>
<p>&#8220;RevenueDate&#8221;(</p>
<p>If(&#8220;PaidDate&#8221; &gt;0)  <span style="color: #339966;">/***********  for already paid invoices  ********/</span></p>
<p>&#8220;PaidAge&#8221;=@DateDiff(&#8220;InvDate&#8221;,&#8221;PaidDate&#8221;,DP_DAY);  <span style="color: #339966;">/** PaidDate – Invoice Date   **/</span></p>
<p>ELSE     <span style="color: #339966;">/*************  for unpaid invoices    ***********/</span></p>
<p><span style="color: #339966;">/**  Set the temporary variable equal to the average PaidAge for each customer   ****/</span></p>
<p>vAvgDays=@AVGRANGE ( SKIPMISSING, &#8220;PaidAge&#8221;,@ISIBLINGS (@CURRMBR(&#8220;Customers&#8221;)));</p>
<p><span style="color: #339966;">/********  Set PaidAge equal to the temporary variable   ********/</span></p>
<p>PaidAge=vAvgDays;</p>
<p><span style="color: #339966;">/****  add the average days to the invoice date to calc the expected paid date */</span></p>
<p>&#8220;RevenueDate&#8221;=  @DateRoll(&#8220;InvDate&#8221;,DP_DAY,vAvgDays);</p>
<p><span style="color: #339966;">/***  Extract the month number from the RevenueDate   *****/</span></p>
<p>&#8220;RevMonth&#8221;=@DatePart(&#8220;RevenueDate&#8221;,DP_MONTH);</p>
<p>ENDIF;</p>
<p>)</td>
</tr>
</tbody>
</table>
<p>We will use a temporary variable – vAvgDays because we don’t really need to store the average days when paid.  We only need to use it in the calc for RevenueDate.   In this case we will store it anyway so we can check each step of the calc.</p>
<p>We need a calc member block for three reasons.  It is required when using IF Statements in a script.  It’s required when assigning a value to a temporary variable.  It’s also needed for “interdependent calcs” that is, to force the order of calculation so that the vAvgDays is calculated then used in the RevenueDate calc immediately.   The normal order (without a calc member block)  would be to calc all the vAvgDays values first, then go on to the RevenueDates.  The problem is that the vAvgCalc variable only holds one number at a time so you need to force the “interdependent” calc.</p>
<p>Here are the results:</p>
<p><a href="http://blog.mtgny.com/wp-content/uploads/2011/04/Picture4.jpg"><img class="alignnone size-full wp-image-76" title="Picture4" src="http://blog.mtgny.com/wp-content/uploads/2011/04/Picture4.jpg" alt="" width="540" height="448" /></a></p>
<p>This might be a nice example of the functions but it is a pretty simplistic approach to forecasting.  If you wanted to improve it you might use @CORRELATE to measure how PaidDays is affected by invoice size, time or year, product, salesperson or other significant features of the sale.   You might use a @Variance to determine which customers are consistent enough to use their historical average reliably.   You might even calculate several scenarios to forecast  possible futures of “slow payments”, “fast payments” and “normal payments”.  Using Essbase technology to solve real world business problems requires the technical skill to get the calcs right in addition to the business acumen to know what needs to be calculated in the first place.</p>
<h2>Appendix: Text and Date Measure Functions Syntax</h2>
<p>The following is loosely adapted from the <a href="http://download.oracle.com/docs/cd/E17236_01/epm.1112/esb_tech_ref/frameset.htm?launch.html">Oracle Essbase Technical reference</a> where you can find a much more complete treatment.  The material is repeated here for the reader’s convenience.</p>
<h3>@DATEPART()</h3>
<p>Returns the date part as a number. Date parts are Year/Quarter/Month/Week/Day/DayOfYear/Weekday</p>
<p>Syntax</p>
<p>@DATEPART ( <em>date</em>, <em>date_part_ex </em>)</p>
<p>Example</p>
<p>RevenueMonth=@DATEPART(&#8220;InvoiceDate&#8221;,DP_MONTH);</p>
<h3>@DATEDIFF()</h3>
<p>Returns to difference between two dates in terms of the specified date_part</p>
<h4><strong>Syntax</strong></h4>
<p>@DATEDIFF ( <em>date1</em>, <em>date2</em>, <em>date_part </em>)</p>
<h4><strong>Example</strong></h4>
<p>InvoiceAge=@DATEDIFF(&#8220;InvoiceDate&#8221;,@TODAY(),DP_DAY);</p>
<h3>@DATEROLL()</h3>
<p>Returns a date a specified number of periods from the input date</p>
<h4><strong>Syntax</strong></h4>
<p>@DATEROLL ( <em>date</em>, <em>date_part</em>, <em>number </em>)</p>
<h4><strong>Example 1</strong></h4>
<p>RevenueDate=@DATEROLL(&#8220;InvoiceDate&#8221;,DP_DAY,AvgAgeWhenPaid);</p>
<h4><strong>Example 2</strong></h4>
<p>Fix(&#8220;Jan&#8221;,&#8221;Actual&#8221;,&#8221;New York&#8221;)</p>
<p>&#8220;Price&#8221;(</p>
<p>If(&#8220;CloseDate&#8221;&gt;@DATEROLL(@TODAY(),DP_DAY,15))</p>
<p>&#8220;Price&#8221;=&#8221;Price&#8221;*1.1;</p>
<p>ENDIF</p>
<p>)</p>
<p>ENDFIX</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mtgny.com/?feed=rss2&#038;p=75</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating From-To Dimensions in Essbase</title>
		<link>http://blog.mtgny.com/?p=69</link>
		<comments>http://blog.mtgny.com/?p=69#comments</comments>
		<pubDate>Tue, 08 Mar 2011 21:54:12 +0000</pubDate>
		<dc:creator>Drew Rushford</dc:creator>
				<category><![CDATA[Essbase]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.mtgny.com/?p=69</guid>
		<description><![CDATA[Have you ever wanted to create a “From-To” matrix in Essbase to follow hierarchy changes you make in your cube’s dimensions? We recently concluded a project where our client acquired another entity and needed to create a new chart of accounts. These new accounts would include accounts and their data from both entities.]]></description>
			<content:encoded><![CDATA[<p>Have you ever wanted to create a “From-To” matrix in Essbase to follow hierarchy changes you make in your cube’s dimensions? We recently concluded a project where our client acquired another entity and needed to create a new chart of accounts. These new accounts would include accounts and their data from both entities.</p>
<p>The problem was following the data as it made its way from various old accounts into new accounts. Without a powerful solution, an entire team of accountants would have to manually enter values into excel and use checksums to verify their work. This was something our clients wanted to avoid.</p>
<p>Thankfully, following changes in dimensional hierarchies is easy to do using EIS with a solid relational star schema. The end product in Essbase is a cube with two dimensions that represent two different views of one old dimension.</p>
<p>First, copy your existing dimension table e.g. <em>dbo.dim_dept</em>, to a new table e.g., <em>dbo.dim_dept_new,</em> in your relational data source. Next, change the hierarchies as desired.</p>
<p>Move to your EIS OLAP Model and join the new table to your fact table using the same key column you used for the original version of the table. So, if your join was</p>
<p style="padding-left: 60px;"><em>fact_table.dept_code = dim_dept.dept_code</em></p>
<p style="padding-left: 60px;">it should now be</p>
<p style="padding-left: 60px;"><em>fact_table.dept_code = dim_dept</em><strong><em>_new</em></strong><em>.dept_code</em></p>
<p>Save your OLAP Model and move to your Metaoutline. Add the new dimension and required columns. In order to prevent a conflict in naming conventions, transform the member names in the new dimension by adding the prefix “New.” Two examples could be:</p>
<p>1.       “Admin Dept” to “New Admin Dept”</p>
<p>2.       “Dept12345” to “New Dept12345”</p>
<p>Save your Metaoutline, build, and enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mtgny.com/?feed=rss2&#038;p=69</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Faster Testing: Taking Audit Sheets To the Next Level</title>
		<link>http://blog.mtgny.com/?p=43</link>
		<comments>http://blog.mtgny.com/?p=43#comments</comments>
		<pubDate>Thu, 10 Feb 2011 14:37:57 +0000</pubDate>
		<dc:creator>Ron Moore</dc:creator>
				<category><![CDATA[Essbase]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.mtgny.com/?p=43</guid>
		<description><![CDATA[Finance users and IT administrators can both benefit from anything that makes testing faster.  “Audit Sheets” use 3 Excel sheets with the same rows, columns and POV (page members in spreadsheet add-in).    Enter a formula like  =Test!B3-Control!B3 and copy it to all the data cells to create a “differences sheet” to compare a correct target “control data” sheet to a “test data” sheet.]]></description>
			<content:encoded><![CDATA[<p>Finance users and IT administrators can both benefit from anything that makes testing faster.  “Audit Sheets” use 3 Excel sheets with the same rows, columns and POV (page members in spreadsheet add-in).    Enter a formula like  <strong>=Test!B3-Control!B3 </strong> and copy it to all the data cells to create a “differences sheet” to compare a correct target “control data” sheet to a “test data” sheet.</p>
<h4><strong>Absolute Values</strong></h4>
<p>You can’t easily test an entire Essbase cube in Excel but the more data you test the better.  That means some pretty big audit sheets that you can’t easily scan visually.   You can sum up the differences into one cell and if the result is zero the data is validated.</p>
<p>But what if there are offsetting errors e.g. +100 in New York -&gt; Basses and -100 in California  -&gt; Trombones?   Instead of the formula above, use an absolute value formula like  <strong>=ABS(Test!B3-Control!B3) </strong>which makes all the errors positive.  That means they won’t offset each other.</p>
<h4><strong>Excel Data Filters</strong></h4>
<p>Another way to quickly find errors on your differences sheet is to use Excel data filters  to display only the rows with errors. You might want to add a column to the far right that sums the other columns so you can apply your filter in one place.  In Excel 2007 select the column labels then click <strong>Data|Filter</strong>. Click on the drop down and select <strong>Number Filters</strong>.</p>
<h4><strong>Summary Sheets</strong></h4>
<p>Sometimes you will have several sets of audit sheets in the same workbook.  You can sum the differences on differences sheet to one cell.  Then use a formula to display all the sums on a “summary sheet”.    Then you only have to look in one place to see which set of data had errors.  If you are using the spreadsheet add-in then the Essbase Query Designer can be used to retrieve all sheets at once (you still have to connect to each one-yikes).  Depending on version, Smart View makes it pretty easy to retrieve all sheets.</p>
<h4><strong>Synchronized Dynamic Audit Sheets</strong></h4>
<p>You can create the row and column (and page) members on the test data and differences sheets using formula that point to the rows and columns (and page members) on the control data sheet.  Then if you change the members on the control sheet (and refresh the test data) the three sheets are synchronized.</p>
<h4><strong>Difference Cubes</strong></h4>
<p>Audit sheets are a great tool but you can take it a big step higher using “difference cubes”.  Difference cubes create an entire cube full of differences by subtracting every cell in a Test cube from the analogous cell in a Control cube.  IMHO Difference cubes are a secret weapon in the war on bad data. [Check out my webcast <a href="https://mtg.webex.com/ec0605lc/eventcenter/recording/recordAction.do?siteurl=mtg&amp;theAction=archive" target="_blank"><em>Difference Cubes: Making Testing Fast &amp; Easy</em></a> for more useful tips.]</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mtgny.com/?feed=rss2&#038;p=43</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Managing Dimension Table Integrity with SQL</title>
		<link>http://blog.mtgny.com/?p=41</link>
		<comments>http://blog.mtgny.com/?p=41#comments</comments>
		<pubDate>Wed, 09 Feb 2011 22:06:21 +0000</pubDate>
		<dc:creator>Drew Rushford</dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.mtgny.com/?p=41</guid>
		<description><![CDATA[When working in EIS or Essbase Studio, maintaining integrity between your fact table and dimension tables is important for maintaining financial data integrity.  While both programs have a way for you to build dimension members to a miscellaneous hierarchy in your cube, you can check to see what will “fall out” by comparing your fact [...]]]></description>
			<content:encoded><![CDATA[<p>When working in EIS or Essbase Studio, maintaining integrity between your fact table and dimension tables is important for maintaining financial data integrity.  While both programs have a way for you to build dimension members to a miscellaneous hierarchy in your cube, you can check to see what will “fall out” by comparing your fact table to your dimension tables in your data mart.  Here is code that you can use in SQL Server to accomplish this:</p>
<p style="padding-left: 30px;">select distinct Account_ID from Fact_Table a<br />
where not exists<br />
(<br />
select distinct Account_ID from Accounts_Dim_Table b<br />
where a.Account_ID = b.Account_ID<br />
)</p>
<p>With Account_ID as your key column, this code looks at the fact table and pulls out the individual accounts that are not found in the dimension table.  You can use this code for any dimension and even roll it into a stored procedure that checks all your dimensions at once and reports the results back to you.  This way, you can see what your dimension tables are missing <em>before</em> building your cube.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.mtgny.com%2F%3Fp%3D41&amp;title=Managing%20Dimension%20Table%20Integrity%20with%20SQL" id="wpa2a_8"><img src="http://blog.mtgny.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mtgny.com/?feed=rss2&#038;p=41</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maximizing Version 11- What’s New with Partitions</title>
		<link>http://blog.mtgny.com/?p=45</link>
		<comments>http://blog.mtgny.com/?p=45#comments</comments>
		<pubDate>Wed, 09 Feb 2011 20:29:09 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[Free Essbase Webinar]]></category>

		<guid isPermaLink="false">http://blog.mtgny.com/?p=45</guid>
		<description><![CDATA[BSO cubes could be the target of partitions way back in version 7. But now ASO cubes can be targets too. In this webcast we will explore and demonstrate some new partitioning features including ASO as the target. Date: Thursday, April 14, 2011 Time: 12:00 pm EST Duration: 1 hour Host: Ron Moore, MTG Register]]></description>
			<content:encoded><![CDATA[<p>BSO cubes could be the target of partitions way back in version 7.  But  now ASO cubes can be targets too.  In this webcast we will explore and  demonstrate some new partitioning features including ASO as the target.</p>
<p><strong>Date</strong>: Thursday, April 14, 2011</p>
<p><strong>Time</strong>: 12:00 pm EST</p>
<p><strong>Duration</strong>: 1 hour</p>
<p><strong>Host</strong>: Ron Moore, MTG</p>
<p><a href="http://mtg.webex.com/" target="_blank"><strong>Register</strong></a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.mtgny.com%2F%3Fp%3D45&amp;title=Maximizing%20Version%2011-%20What%E2%80%99s%20New%20with%20Partitions" id="wpa2a_10"><img src="http://blog.mtgny.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mtgny.com/?feed=rss2&#038;p=45</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webinar: Maximizing Version 11 – New Calculations in Essbase 11</title>
		<link>http://blog.mtgny.com/?p=47</link>
		<comments>http://blog.mtgny.com/?p=47#comments</comments>
		<pubDate>Wed, 09 Feb 2011 20:28:11 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[Free Essbase Webinar]]></category>

		<guid isPermaLink="false">http://blog.mtgny.com/?p=47</guid>
		<description><![CDATA[We will explore and demonstrate several new calculation features introduced in Version 11 including @XWRITE, calculations with dates, typed measures and varying attributes. You can also create custom error messages with @Return. Date: Tuesday, March 22, 2011 Time: 12:00 pm EST Duration: 1 hour Host: Ron Moore, MTG Register]]></description>
			<content:encoded><![CDATA[<p>We will explore and demonstrate several new calculation features  introduced in Version 11 including @XWRITE, calculations with dates,  typed measures and varying attributes.  You can also create custom error  messages with @Return.</p>
<p><strong>Date</strong>: Tuesday, March 22, 2011</p>
<p><strong>Time</strong>: 12:00 pm EST</p>
<p><strong>Duration</strong>: 1 hour</p>
<p><strong>Host</strong>: Ron Moore, MTG</p>
<p><a href="http://mtg.webex.com/" target="_blank"><strong>Register</strong></a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.mtgny.com%2F%3Fp%3D47&amp;title=Webinar%3A%20Maximizing%20Version%2011%20%E2%80%93%20New%20Calculations%20in%20Essbase%2011" id="wpa2a_12"><img src="http://blog.mtgny.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.mtgny.com/?feed=rss2&#038;p=47</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webinar: Partition Basics</title>
		<link>http://blog.mtgny.com/?p=49</link>
		<comments>http://blog.mtgny.com/?p=49#comments</comments>
		<pubDate>Wed, 09 Feb 2011 20:26:53 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[Free Essbase Webinar]]></category>

		<guid isPermaLink="false">http://blog.mtgny.com/?p=49</guid>
		<description><![CDATA[Partitions allow Essbase cubes to exchange data so you can view data or even calculate across cubes. This opens up many optimization and design options. In this webcast we will discuss the three types of partitions and consider when to use each. We will discuss strengths and limitations of partitions designs and we will demonstrate a couple of simple partitions. We will also talk about partitioning cubes with different outlines including different dimensions.]]></description>
			<content:encoded><![CDATA[<p>Partitions allow Essbase cubes to exchange data so you can view data or  even calculate across cubes.  This opens up many optimization and design  options.  In this webcast we will discuss the three types of partitions  and consider when to use each.  We will discuss strengths and  limitations of partitions designs and we will demonstrate a couple of  simple partitions. We will also talk about partitioning cubes with  different outlines including different dimensions.</p>
<p style="text-align: left;"><strong>Date</strong>: Thursday, March 17, 2011</p>
<p style="text-align: left;"><strong>Time</strong>: 12:00 pm EST</p>
<p style="text-align: left;"><strong>Duration</strong>: 1 hour</p>
<p style="text-align: left;"><strong>Host</strong>: Ron Moore, MTG</p>
<p style="text-align: left;"><a href="http://mtg.webex.com/" target="_blank"><strong>Register</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mtgny.com/?feed=rss2&#038;p=49</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

