I am using the following script to create time intellingence. It works well but my calculated measures return bad results. If the calculated measure does any division when you try to look at chage or change % it fails. We use Average order balue which is calculated as sales/ordercount. When I look at prior year change both the change and change % give obivously wrong results. When I look at total sales which is an additive calculated measure that sums up the various components of the sales value (it is never null) the prior year change works by prior year change % does not.
here is the script for the time intelligence.
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[Prior Year] ASNull;
CREATEMEMBERCURRENTCUBE.[Time Calculations].[Prior Year Chg] ASNull;
CREATEMEMBERCURRENTCUBE.[Time Calculations].[Prior Year Chg %] AS
IIF([Time Calculations].[Prior Year]=0,
NULL,
[Time Calculations].[Prior Year Chg] / [Time Calculations].[Prior Year]),
FORMAT_STRING
="Percent";
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[YTD] ASNull;
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[YTD Pr Yr] ASNull;
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[YTD Pr Yr Chg] ASNull;
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[YTD Pr Yr Chg %] AS
IIF([Time Calculations].[YTD Pr Yr]=0,
NULL,
[Time Calculations].[YTD Pr Yr Chg] / [Time Calculations].[YTD Pr Yr]),
FORMAT_STRING
="Percent";
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[QTD] ASNull;
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[MTD] ASNull;
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[WTD] ASNull;
--*************
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[QTD Pr Yr] ASNull;
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[QTD Pr Yr Chg] ASNull;
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[QTD Pr Yr Chg %] AS
IIF([Time Calculations].[QTD Pr Yr]=0,
NULL,
[Time Calculations].[QTD Pr Yr Chg] / [Time Calculations].[QTD Pr Yr]),
FORMAT_STRING
="Percent";
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[MTD Pr Yr] ASNull;
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[MTD Pr Yr Chg] ASNull;
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[MTD Pr Yr Chg %] AS
IIF([Time Calculations].[MTD Pr Yr]=0,
NULL,
[Time Calculations].[MTD Pr Yr Chg] / [Time Calculations].[MTD Pr Yr]),
FORMAT_STRING
="Percent";
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[WTD Pr Yr] ASNull;
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[WTD Pr Yr Chg] ASNull;
CREATE
MEMBERCURRENTCUBE.[Time Calculations].[WTD Pr Yr Chg %] AS
IIF([Time Calculations].[WTD Pr Yr]=0,
NULL,
[Time Calculations].[WTD Pr Yr Chg] / [Time Calculations].[WTD Pr Yr]),
FORMAT_STRING
="Percent";
--*************
Scope
([Time].[Fiscal Year].[Fiscal Year].members, [Time].[Date].members);
-- PRIOR YEAR CALCULATIONS
([Time Calculations].[Prior Year]=
(ParallelPeriod([Time].[Fiscal-Y-Q-M-W-D].[Fiscal Year], 1,
[Time].[Fiscal-Y-Q-M-W-D].CurrentMember) ,
[Time Calculations].[Current Period]) );
--Year over year change
([Time Calculations].[Prior Year Chg]=
aggregate([Time Calculations].[Current Period]) - aggregate([Time Calculations].[Prior Year]));
-- YTD CALCULATIONS
([Time Calculations].[YTD]=
Aggregate(
CrossJoin({[Time Calculations].&[Current Period]},
PeriodsToDate(
[Time].[Fiscal-Y-Q-M-W-D].[Fiscal Year],
[Time].[Fiscal-Y-Q-M-W-D].CurrentMember))
) );
-- QTD CALCULATIONS
([Time Calculations].[QTD]=
Aggregate(
CrossJoin({[Time Calculations].&[Current Period]},
PeriodsToDate(
[Time].[Fiscal-Y-Q-M-W-D].[Fiscal Quarter],
[Time].[Fiscal-Y-Q-M-W-D].CurrentMember))
) );
-- MTD CALCULATIONS
([Time Calculations].[MTD]=
Aggregate(
CrossJoin({[Time Calculations].&[Current Period]},
PeriodsToDate(
[Time].[Fiscal-Y-Q-M-W-D].[Fiscal Month],
[Time].[Fiscal-Y-Q-M-W-D].CurrentMember))
) );
-- WTD CALCULATIONS
([Time Calculations].[WTD]=
Aggregate(
CrossJoin({[Time Calculations].&[Current Period]},
PeriodsToDate(
[Time].[Fiscal-Y-Q-M-W-D].[Fiscal Week],
[Time].[Fiscal-Y-Q-M-W-D].CurrentMember))
) );
-- YTD PRIOR YEAR CALCULATIONS
([Time Calculations].[YTD Pr Yr]=
Aggregate(
CrossJoin({[Time Calculations].[Current Period]},
PeriodsToDate(
[Time].[Fiscal-Y-Q-M-W-D].[Fiscal Year],
ParallelPeriod(
[Time].[Fiscal-Y-Q-M-W-D].[Fiscal Year],1,
[Time].[Fiscal-Y-Q-M-W-D].CurrentMember)))
) );
--YTD Change
([Time Calculations].[YTD Pr Yr Chg] =
[Time Calculations].[YTD] - [Time Calculations].[YTD Pr Yr]);
--*****************
-- QTD PRIOR YEAR CALCULATIONS
([Time Calculations].[QTD Pr Yr]=
Aggregate(
CrossJoin({[Time Calculations].[Current Period]},
PeriodsToDate(
[Time].[Fiscal-Y-Q-M-W-D].[Fiscal Quarter],
ParallelPeriod(
[Time].[Fiscal-Y-Q-M-W-D].[Fiscal Year],1,
[Time].[Fiscal-Y-Q-M-W-D].CurrentMember)))
) );
--QTD Change%
([Time Calculations].[QTD Pr Yr Chg] =
[Time Calculations].[QTD] - [Time Calculations].[QTD Pr Yr]);
-- MTD PRIOR YEAR CALCULATIONS
([Time Calculations].[MTD Pr Yr]=
Aggregate(
CrossJoin({[Time Calculations].[Current Period]},
PeriodsToDate(
[Time].[Fiscal-Y-Q-M-W-D].[Fiscal Month],
ParallelPeriod(
[Time].[Fiscal-Y-Q-M-W-D].[Fiscal Year],1,
[Time].[Fiscal-Y-Q-M-W-D].CurrentMember)))
) );
--QTD Change%
([Time Calculations].[MTD Pr Yr Chg] =
[Time Calculations].[MTD] - [Time Calculations].[MTD Pr Yr]);
--*
-- QTD PRIOR YEAR CALCULATIONS
([Time Calculations].[WTD Pr Yr]=
Aggregate(
CrossJoin({[Time Calculations].[Current Period]},
PeriodsToDate(
[Time].[Fiscal-Y-Q-M-W-D].[Fiscal Week],
ParallelPeriod(
[Time].[Fiscal-Y-Q-M-W-D].[Fiscal Year],1,
[Time].[Fiscal-Y-Q-M-W-D].CurrentMember)))
) );
--QTD Change%
([Time Calculations].[WTD Pr Yr Chg] =
[Time Calculations].[WTD] - [Time Calculations].[WTD Pr Yr]);
--*****************
End
Scope