﻿<?xml version="1.0" encoding="utf-8"?>
<BusinessFunctions>
  <BusinessFunction>
    <FunctionName>Active Records</FunctionName>
    <FunctionDescription>This function will calculate the number of active records (or any other number) for a given date, based on a start and end date. If the selected date is between the start and end for the record, it will contribute to the total.

A requirement for this is a start and end date on the fact table. There must be three date dimensions on the cube, a Start, End and Date. The start and End Date dimensions must be linked to the relevant fact columns, while the third date dimension must be a Shell Dimension (or at least not linked to this fact table).

This function only gives the correct result when the filter is set on the date level, not month or other aggregated levels.</FunctionDescription>
    <FunctionParameter>
      <ParameterName>From Date</ParameterName>
      <ParameterType>Dimension_Level</ParameterType>
      <ParameterDecription>The date (key) level of the From date dimension</ParameterDecription>
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>To Date</ParameterName>
      <ParameterType>Dimension_Level</ParameterType>
      <ParameterDecription>The date (key) level of the To date dimension</ParameterDecription>
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Select Date</ParameterName>
      <ParameterType>Dimension_Level</ParameterType>
      <ParameterDecription>The date (key) level of the Select/Filter date dimension</ParameterDecription>
      <ParameterOrdinal>2</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Select Dimension</ParameterName>
      <ParameterType>Dimension</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>3</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Value</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>4</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Time Based</LibraryPath>
    <Formular>Aggregate(
 (
   NULL:LinkMember(Select Date.CurrentMember,From Date),
   LinkMember(Select Date.CurrentMember,To Date):NULL,
   Root(Select Dimension)
 ), Value
)</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>All Periods</FunctionName>
    <FunctionDescription>Sums a given measure over all time.

Used with the Closing business function</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Time Hierachy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Amount</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Opening and Closing Balances</LibraryPath>
    <Formular>sum(PeriodsToDate(Time Hierachy.[(All)]),Amount)</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Average Inventory</FunctionName>
    <FunctionDescription>Calculates the average inventory for two parallel time dimension members. The default usage is year by year comparison, but works on any level specified by the hierarchy level parameter</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Measure</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Time Dimension Hierarchy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Hierarchy Level</ParameterName>
      <ParameterType>Hierachy_Level</ParameterType>
      <ParameterDecription>The level such as year, month or quarter</ParameterDecription>
      <ParameterOrdinal>2</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Distance</ParameterName>
      <ParameterType>Numeric_Value</ParameterType>
      <ParameterDecription>The distance for the parallel period</ParameterDecription>
      <ParameterOrdinal>3</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Inventory</LibraryPath>
    <Formular>(
	(Measure, Time Dimension Hierarchy.CurrentMember) 
	+ 
	(Measure, ParallelPeriod(Hierarchy Level, Distance, Time Dimension Hierarchy.CurrentMember))
) 
/ 
Iif(
	IsEmpty(ParallelPeriod(Hierarchy Level, Distance, Time Dimension Hierarchy.CurrentMember)),
	1,
	2
)</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Average Inventory Days</FunctionName>
    <FunctionDescription />
    <FunctionParameter>
      <ParameterName>Days in period</ParameterName>
      <ParameterType>Numeric_Value</ParameterType>
      <ParameterDecription>Number of days such as 365 for a year</ParameterDecription>
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Inventory Turns</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Inventory</LibraryPath>
    <Formular>Iif(
	IsEmpty(Inventory Turns), 
	NULL,
	Days in period / Inventory Turns
)</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Average of children</FunctionName>
    <FunctionDescription>This calculation will for any member in the specified hierarchy calculate the average of the children of that member for the specified measure (Value).
The leaf level will be blank.</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Value</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Hierarchy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Dimension</LibraryPath>
    <Formular>AVG(Hierarchy.CurrentMember.Children, Value)</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Average of Children with leaf</FunctionName>
    <FunctionDescription>This calculation will for any member in the specified hierarchy calculate the average of the children of that member for the specified measure (Value).
The leaf level will show the actual value for this member.</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Value</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Hierarchy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Dimension</LibraryPath>
    <Formular>iif(isleaf(Hierarchy.CurrentMember),Value,
AVG(Hierarchy.CurrentMember.Children, Value))</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Closing</FunctionName>
    <FunctionDescription>Calculates the closing balance for a measure.

Use the All Periods business function for the total parameter.</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Total</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription>An All Periods BF Measure</ParameterDecription>
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Time</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Opening and Closing Balances</LibraryPath>
    <Formular>(Total, CLOSINGPERIOD(Time.currentmember.level, Time.currentmember))</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Costs Of Goods Sold</FunctionName>
    <FunctionDescription>Calculates the costs of goods sold for use in inventory turnover calculation.</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Time Dimension Hierarchy Level</ParameterName>
      <ParameterType>Hierachy_Level</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Days</ParameterName>
      <ParameterType>Numeric_Value</ParameterType>
      <ParameterDecription>Number of days i.e. 360</ParameterDecription>
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Measure</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription>The measure that contains the cost value of goods sold</ParameterDecription>
      <ParameterOrdinal>2</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Inventory</LibraryPath>
    <Formular>Sum(LastPeriods(Days, ClosingPeriod(Time Dimension Hierarchy Level)), Measure)</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Current and Previous Date Periods</FunctionName>
    <FunctionDescription>This Business Function will create three new members that can be used as filters in a time dimension.

Current Month
Current Quarter
Current Year

The Calendar Hierarchy must be a YQMD hierarchy.

The name column of the date dimension level must be set to a field with the following transformation on the date table on the data warehouse:

convert(varchar, [DateValue], 112)

</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Date Level</ParameterName>
      <ParameterType>Hierachy_Level</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>CalendarHierarchy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Utility Dimensions</LibraryPath>
    <Formular>Null, Visible=0
;

CREATE HIDDEN TodayDate = Format(Now(), "yyyyMMdd");

CREATE SET [CalendarToday] AS 
Filter(Date Level.Members, CalendarHierarchy.MemberValue = (CalendarHierarchy.[All], TodayDate));

CREATE MEMBER CURRENTCUBE.CalendarHierarchy.[All].[Current Month] AS
[CalendarToday].Item(0).Parent;

CREATE MEMBER CURRENTCUBE.CalendarHierarchy.[All].[Current Quarter] AS
[CalendarToday].Item(0).Parent.Parent;

CREATE MEMBER CURRENTCUBE.CalendarHierarchy.[All].[Current Year] AS
[CalendarToday].Item(0).Parent.Parent.Parent;

CREATE MEMBER CURRENTCUBE.CalendarHierarchy.[All].[Previous Month] AS
[CalendarToday].Item(0).Parent.LAG(1);

CREATE MEMBER CURRENTCUBE.CalendarHierarchy.[All].[Previous Quarter] AS
[CalendarToday].Item(0).Parent.Parent.LAG(1);

CREATE MEMBER CURRENTCUBE.CalendarHierarchy.[All].[Previous Year] AS
[CalendarToday].Item(0).Parent.Parent.Parent.LAG(1);

CREATE MEMBER CURRENTCUBE.[Measures].[DummyTX] AS Null</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Current Date Periods</FunctionName>
    <FunctionDescription>This Business Function will create three new members that can be used as filters in a time dimension.

Current Month
Current Quarter
Current Year

The Calendar Hierarchy must be a YQMD hierarchy.

The name column of the date dimension level must be set to a field with the following transformation on the date table on the data warehouse:

convert(varchar, [DateValue], 112)

</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Date Level</ParameterName>
      <ParameterType>Hierachy_Level</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>CalendarHierarchy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Utility Dimensions</LibraryPath>
    <Formular>Null, Visible=0
;

CREATE HIDDEN TodayDate = Format(Now(), "yyyyMMdd");

CREATE SET [CalendarToday] AS 
Filter(Date Level.Members, CalendarHierarchy.MemberValue = (CalendarHierarchy.[All], TodayDate));

CREATE MEMBER CURRENTCUBE.CalendarHierarchy.[All].[Current Month] AS
[CalendarToday].Item(0).Parent;

CREATE MEMBER CURRENTCUBE.CalendarHierarchy.[All].[Current Quarter] AS
[CalendarToday].Item(0).Parent.Parent;

CREATE MEMBER CURRENTCUBE.CalendarHierarchy.[All].[Current Year] AS
[CalendarToday].Item(0).Parent.Parent.Parent;

CREATE MEMBER CURRENTCUBE.[Measures].[DummyTX] AS Null</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Division</FunctionName>
    <FunctionDescription>Divedes a number with another, and checks for zerodivisions, if the divisor is zero, the function returns NULL.</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Divisor</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Dividend</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Calculations</LibraryPath>
    <Formular>iif(Divisor, Dividend/Divisor, NULL)</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Earlier Period</FunctionName>
    <FunctionDescription>Returns the Value for an earlier period.

For instance, if the Year Level is selected and the distance is set to one, it will give a Previous Year measure.

This function will not roll over parent periods, so if month level is selected, january will not roll to december of the previous year.</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Level</ParameterName>
      <ParameterType>Dimension_Level</ParameterType>
      <ParameterDecription>The time hierachy level that decides what level to travel by</ParameterDecription>
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Distance</ParameterName>
      <ParameterType>Numeric_Value</ParameterType>
      <ParameterDecription>The distance to travel, positive values goes back in time, negative ahead.</ParameterDecription>
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Value</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>2</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Time Based</LibraryPath>
    <Formular>(Level.CurrentMember.Lag(Distance), Value)</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Inventory Turns</FunctionName>
    <FunctionDescription />
    <FunctionParameter>
      <ParameterName>Cost of Goods Sold</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Average Inventory for the Period</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Inventory</LibraryPath>
    <Formular>Cost of Goods Sold / Average Inventory for the Period
</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Measure in Reporting Currency</FunctionName>
    <FunctionDescription>Described in a seperate document!</FunctionDescription>
    <FunctionParameter>
      <ParameterName>ReportingCurrencyDimension</ParameterName>
      <ParameterType>Dimension</ParameterType>
      <ParameterDecription>The Dimension that contains the Reporting Currencies</ParameterDecription>
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>TimeDimensionHierarchy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription>The Time Dimension Hierarchy that will be used to do the calculation</ParameterDecription>
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>CompanyDimension</ParameterName>
      <ParameterType>Dimension_Level</ParameterType>
      <ParameterDecription>The Dimension that contains the companies and their default currency</ParameterDecription>
      <ParameterOrdinal>2</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>BaseMeasure</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription>The Measure in default currency that will be the input for the calculation</ParameterDecription>
      <ParameterOrdinal>3</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>ExchRateMeasure</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription>The Measure that contains the exchangerate (often a hidden measure)</ParameterDecription>
      <ParameterOrdinal>4</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Currency</LibraryPath>
    <Formular>Iif
    (
     IsLeaf(ReportingCurrencyDimension.CurrentMember),
        Iif
            (
             	IsLeaf(TimeDimensionHierarchy.CurrentMember) And
             	IsLeaf(CompanyDimension.CurrentMember),
 		(BaseMeasure/ExchRateMeasure)*100,
		Sum(
		CrossJoin(                       			            			{Descendants(TimeDimensionHierarchy.CurrentMember,,Leaves)},
			{Descendants(CompanyDimension.CurrentMember,,Leaves)}
			), 
		(BaseMeasure/ExchRateMeasure)*100
		)
                ),
        Null
    ), 
NON_EMPTY_BEHAVIOR = { BaseMeasure }</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Opening</FunctionName>
    <FunctionDescription>Calculates the opening balance for a period. This is used with a Closing Business Function measure.</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Closing</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Time</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Opening and Closing Balances</LibraryPath>
    <Formular>(Closing, Time.currentmember.LAG(1))</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>ParallelPeriod</FunctionName>
    <FunctionDescription>ParallelPeriod function takes the ancestor of the specified member at the specified level, finds the ancestor's sibling with the specified lag, and finally returns the parallel period of the specified member among the descendants of the sibling.

</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Time Hierarchy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Hierarchy Level</ParameterName>
      <ParameterType>Hierachy_Level</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Distance</ParameterName>
      <ParameterType>Numeric_Value</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>2</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Measure</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>3</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Time Based</LibraryPath>
    <Formular>(ParallelPeriod(Hierarchy Level, Distance, Time Hierarchy.CurrentMember), Measure)
</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Percent for Columns</FunctionName>
    <FunctionDescription>Displays the percentage of the selected measure, as a part of the column total instead of grand total

Remember to set the Format string to 'Percent'!</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Number</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription>Amount or quantity</ParameterDecription>
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Percent</LibraryPath>
    <Formular>Case when isempty(Number)
then 0
else iif(isempty(Axis(1).Item(0).Item(0).Dimension.CurrentMember.Parent),1,Number/(Axis(1).Item(0).Item(0).Dimension.CurrentMember.Parent,Number))
End</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Percent for Rows</FunctionName>
    <FunctionDescription>Displays a percentage of the row total instead of the grand total

Remember to set the Format string to 'Percent'!</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Number</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription>The measure the use for the calculation</ParameterDecription>
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Percent</LibraryPath>
    <Formular>Case when isempty(Number)
then 0
else iif(isempty(Axis(0).Item(0).Item(0).Dimension.CurrentMember.Parent),1,Number/(Axis(0).Item(0).Item(0).Dimension.CurrentMember.Parent,Number))
End</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Percent of total</FunctionName>
    <FunctionDescription>How many percent does the current member of a dimension contriute towards the total for the dimension.

Example: In a Color dimension, how many percent does the color Red contribute with to the total.

Note: Use % in Format String to get the result as a percentage.</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Measure</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>DimensionHierarchy</ParameterName>
      <ParameterType>Dimension_Level</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Percent</LibraryPath>
    <Formular>(Measure)/Sum(DimensionHierarchy.[(All)],(Measure))</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Period Growth</FunctionName>
    <FunctionDescription>Calculates the growth for a measure by subtracting the value for the same measure a specified distance from the current member over a time dimension- and hierarchy

Sample usage could be to calculate the growth for a measure compared with the same measure 6 months, 1 year or 2 weeks back</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Time Hierarchy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Hierarchy Level</ParameterName>
      <ParameterType>Hierachy_Level</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Distance</ParameterName>
      <ParameterType>Numeric_Value</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>2</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Measure</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>3</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Time Based</LibraryPath>
    <Formular>(Time Hierarchy.CurrentMember, Measure) - (ParallelPeriod(Hierarchy Level, Distance, Time Hierarchy.CurrentMember), Measure)</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Periods to date (XTD)</FunctionName>
    <FunctionDescription>Returns the sum of values for all the members in a given period, up until the current member.

For instance, if a year level is specified as the level parameter, this will be a Year to Date measure (YTD). If a Month level is selected it will be MTD.</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Level</ParameterName>
      <ParameterType>Hierachy_Level</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Value</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Time Based</LibraryPath>
    <Formular>SUM(PeriodsToDate(Level), Value)</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Relative Dimension Contribution</FunctionName>
    <FunctionDescription>Calculates how much in percentage a member contributes to the total of the parent. 

For instance: With a [Date - YQMD] Hierachy, how big a percentage of the quarters turnover is made in each month in the quarter etc.

Use the format string 'Percent'</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Measure</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Dimension Hierarchy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Dimension</LibraryPath>
    <Formular>IIF((Measure, Dimension Hierarchy.CurrentMember.Parent) = 0,
	1,
	Measure
	/
	(Measure, Dimension Hierarchy.CurrentMember.Parent)
)
</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Remainder of Year</FunctionName>
    <FunctionDescription />
    <FunctionParameter>
      <ParameterName>Date Hierachy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Measure</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Time Based</LibraryPath>
    <Formular>SUM({Date Hierachy.CurrentMember:Date Hierachy.currentMember.lastsibling},Measure)</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Rolling 12 Months</FunctionName>
    <FunctionDescription />
    <FunctionParameter>
      <ParameterName>Year Level</ParameterName>
      <ParameterType>Hierachy_Level</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Date Hierarchy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Value</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>2</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Time Based</LibraryPath>
    <Formular>SUM(           { ParallelPeriod(
                                       Year Level,
                                       1,
                                       Date Hierarchy
                       ).NextMember : Date Hierarchy.CurrentMember
                     }, Value )
</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>Running Total</FunctionName>
    <FunctionDescription>Calculates the running total over a time hierachy</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Time Hierarchy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Measure</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Time Based</LibraryPath>
    <Formular>Sum(PERIODSTODATE(Time Hierarchy.[(All)]), Measure)</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>TimeCalculations</FunctionName>
    <FunctionDescription>MDX used for setting up dynamic time calculations.
EX.: YTD, Running Total, Previous Year, Difference this year/last year
</FunctionDescription>
    <FunctionParameter>
      <ParameterName>PeriodHierarchy</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription>Time Hierarchy to be used for the dynamic time calculations</ParameterDecription>
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>PeriodLowestLevel</ParameterName>
      <ParameterType>Dimension_Level</ParameterType>
      <ParameterDecription>Lowest level in the time dimension</ParameterDecription>
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>CalcDimName</ParameterName>
      <ParameterType>Member</ParameterType>
      <ParameterDecription>Name of the Time Calculation shell dimension</ParameterDecription>
      <ParameterOrdinal>2</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>AggregationLevel</ParameterName>
      <ParameterType>Member</ParameterType>
      <ParameterDecription>Name of the Aggregation level in the Time Calculation dimension</ParameterDecription>
      <ParameterOrdinal>3</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>PeriodAllYearMember</ParameterName>
      <ParameterType>Member</ParameterType>
      <ParameterDecription>Name of the Year all member in the time dimension</ParameterDecription>
      <ParameterOrdinal>4</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>PeriodAllMonthMember</ParameterName>
      <ParameterType>Member</ParameterType>
      <ParameterDecription>Name of the Month all member in the time dimension</ParameterDecription>
      <ParameterOrdinal>5</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>ComparisonLevel</ParameterName>
      <ParameterType>Member</ParameterType>
      <ParameterDecription>Name of the Comparison level in the Time Calculation dimension</ParameterDecription>
      <ParameterOrdinal>6</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Utility Dimensions</LibraryPath>
    <Formular>Null, Visible=0
;
///////////////////////////////////////////////////////////////////////////////////////
//
// Aggregations
//
///////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////
//
// RUNNING TOTAL - ID = 4 In TimeAggregations Table
//
///////////////////////////////////////////////////////////////////////////////////////
SCOPE ( 
    PeriodHierarchy.MEMBERS,
	PeriodLowestLevel.MEMBERS ); 

    ( CalcDimName.AggregationLevel.&amp;[4])
          = Aggregate
		    (
                     { CalcDimName.AggregationLevel.DefaultMember } *
                       { NULL : PeriodHierarchy.CurrentMember }
                     ); 

///////////////////////////////////////////////////////////////////////////////////////
//
// YEAR TO DATE - ID = 1 In TimeAggregations Table
//
///////////////////////////////////////////////////////////////////////////////////////
    ( CalcDimName.AggregationLevel.&amp;[1] )
          = Aggregate(
                     { CalcDimName.AggregationLevel.DefaultMember } *
                       PeriodsToDate(
                                    PeriodHierarchy.[Year],
                                    PeriodHierarchy.CurrentMember
                     ) 
		     );

///////////////////////////////////////////////////////////////////////////////////////
//
// LAST 12 MONTHS (ROLLING 12 MONTHS) - ID = 2 In TimeAggregations Table
//
///////////////////////////////////////////////////////////////////////////////////////
    ( CalcDimName.AggregationLevel.&amp;[2] ) 
          = Aggregate(
                     { CalcDimName.AggregationLevel.DefaultMember } *
                     { ParallelPeriod(
                                       PeriodHierarchy.[Year],
                                       1,
                                       PeriodHierarchy
                       ).NextMember : PeriodHierarchy.CurrentMember
                     } );

///////////////////////////////////////////////////////////////////////////////////////
//
// TOTAL YEAR - ID = 3 In TimeAggregations Table
//
///////////////////////////////////////////////////////////////////////////////////////
    ( CalcDimName.AggregationLevel.&amp;[3] ) 
          = ( CalcDimName.AggregationLevel.DefaultMember,
              Ancestor( PeriodHierarchy.CurrentMember, 
                        PeriodHierarchy.[Year] ) );

///////////////////////////////////////////////////////////////////////////////////////
//
// Tuple (All years, All Months) is the default number (keeps compatibility with OWC11)
//
///////////////////////////////////////////////////////////////////////////////////////
    ( PeriodAllYearMember, PeriodAllMonthMember,
      Except( CalcDimName.AggregationLevel.AggregationLevel.MEMBERS, CalcDimName.AggregationLevel.DefaultMember ) ) = CalcDimName.AggregationLevel.DefaultMember;

END SCOPE;
///////////////////////////////////////////////////////////////////////////////////////
//
// End Aggregations
//
///////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////
//
//    Comparison
//
///////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////
//
// PREVIOUS YEAR - ID = 1 In TimeComparison Table
//
///////////////////////////////////////////////////////////////////////////////////////
SCOPE 
	(PeriodHierarchy.MEMBERS,
	 PeriodLowestLevel.MEMBERS);

    ( 
		CalcDimName.ComparisonLevel.&amp;[1],
		CalcDimName.AggregationLevel.Members )
          = ( 
				CalcDimName.ComparisonLevel.DefaultMember,
				ParallelPeriod( PeriodHierarchy.[Year],
								1,
								PeriodHierarchy.CurrentMember)
	);

END SCOPE;

///////////////////////////////////////////////////////////////////////////////////////
//
// DIFF. OVER PREVIOUS YEAR - ID = 2 In TimeComparison Table
//
///////////////////////////////////////////////////////////////////////////////////////
SCOPE (CalcDimName.ComparisonLevel.&amp;[2]) ;
    THIS = IIF( IsEmpty( CalcDimName.ComparisonLevel.DefaultMember ) 
                         OR IsEmpty( CalcDimName.ComparisonLevel.&amp;[1] ),
                NULL,
                CalcDimName.ComparisonLevel.DefaultMember 
                - CalcDimName.ComparisonLevel.&amp;[1] );
    NON_EMPTY_BEHAVIOR(THIS) = CalcDimName.ComparisonLevel.DefaultMember;
END SCOPE;

///////////////////////////////////////////////////////////////////////////////////////
//
// DIFF. % OVER PREVIOUS YEAR - ID = 3 In TimeComparison Table
//
///////////////////////////////////////////////////////////////////////////////////////
SCOPE (CalcDimName.ComparisonLevel.&amp;[3]) ;
    THIS = IIF( IsEmpty( CalcDimName.ComparisonLevel.&amp;[2] ) 
                         OR IsEmpty( CalcDimName.ComparisonLevel.&amp;[1] ),
                NULL,
                CalcDimName.ComparisonLevel.&amp;[2]
                / CalcDimName.ComparisonLevel.&amp;[1] );
    NON_EMPTY_BEHAVIOR(THIS) = CalcDimName.ComparisonLevel.DefaultMember;
    FORMAT_STRING(THIS) = 'Percent';
END SCOPE;

///////////////////////////////////////////////////////////////////////////////////////
//
// Tuple (All years, All Months) is the default number (keeps compatibility with OWC11)
//
///////////////////////////////////////////////////////////////////////////////////////
( PeriodAllYearMember, PeriodAllMonthMember,
  Except( CalcDimName.ComparisonLevel.ComparisonLevel.MEMBERS, 
		  CalcDimName.ComparisonLevel.DefaultMember 
		) 
) = CalcDimName.ComparisonLevel.DefaultMember;

///////////////////////////////////////////////////////////////////////////////////////
//
// End Comparison
//
///////////////////////////////////////////////////////////////////////////////////////
//
//
//
CREATE MEMBER CURRENTCUBE.[Measures].[DummyTX] AS Null
</Formular>
  </BusinessFunction>
  <BusinessFunction>
    <FunctionName>YTD</FunctionName>
    <FunctionDescription>Sums the amount for the year, based on the specified date hierachy.</FunctionDescription>
    <FunctionParameter>
      <ParameterName>Amount</ParameterName>
      <ParameterType>Measure</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>0</ParameterOrdinal>
    </FunctionParameter>
    <FunctionParameter>
      <ParameterName>Year Level</ParameterName>
      <ParameterType>Hirachy</ParameterType>
      <ParameterDecription />
      <ParameterOrdinal>1</ParameterOrdinal>
    </FunctionParameter>
    <LibraryPath>Time Based</LibraryPath>
    <Formular>SUM(YTD(Year Level.CurrentMember), Amount)</Formular>
  </BusinessFunction>
</BusinessFunctions>