Как создать период за период Измерение в MDX?
Я довольно новичок в запросах MDX, и у меня возникают проблемы с пониманием того, как я могу вычислить период по измерению периода. Например, скажем, у меня есть показатель, похожий на доход, и я делю этот доход с течением времени, скажем, от месяца к месяцу. Как бы я рассчитал изменение от месяца к месяцу этого дохода в процентах? Теперь предположим, что я хочу вычислить это в общем за любой период, квартал к кварталу, год к году, месяц к месяцу или даже сравнить его с идентичными периодами предыдущих лет. 2011 Q1 против 2012 Q1, 2011 Q2 против 2012 Q2 и т. Д.
Определение схемы:
<Dimension type="TimeDimension" highCardinality="false" name="Time">
<Hierarchy name="yearQuarterMonth" caption="Year/Quarter/Month" hasAll="true" primaryKey="id">
<Table name="Time"/>
<Level name="Year" column="year" type="Numeric" uniqueMembers="true" levelType="TimeYears" hideMemberIf="Never"/>
<Level name="Quarter" column="quarter" type="Numeric" uniqueMembers="false" levelType="TimeQuarters" hideMemberIf="Never"/>
<Level name="Month" column="month" type="Numeric" ordinalColumn="month" uniqueMembers="false" levelType="TimeMonths" hideMemberIf="Never"/>
<Level name="Day" column="day" type="Numeric" uniqueMembers="false" levelType="TimeDays" hideMemberIf="Never"/>
</Hierarchy>
<Hierarchy name="fiscalYearQuarterMonth" caption="Fiscal Year/Quarter/Month" hasAll="true" primaryKey="id">
<Table name="Time"/>
<Level name="Fiscal Year" column="fiscal_year" type="Numeric" uniqueMembers="true" levelType="TimeYears" hideMemberIf="Never"/>
<Level name="Quarter" column="quarter" type="Numeric" uniqueMembers="false" levelType="TimeQuarters" hideMemberIf="Never"/>
<Level name="Month" column="month" type="Numeric" ordinalColumn="month" uniqueMembers="false" levelType="TimeMonths" hideMemberIf="Never"/>
<Level name="Day" column="day" type="Numeric" uniqueMembers="false" levelType="TimeDays" hideMemberIf="Never"/>
</Hierarchy>
<Hierarchy name="yearMonth" caption="Year/Month" hasAll="true" primaryKey="id">
<Table name="Time"/>
<Level name="Year" column="year" type="Numeric" uniqueMembers="true" levelType="TimeYears" hideMemberIf="Never"/>
<Level name="Month" column="month" type="Numeric" ordinalColumn="month" uniqueMembers="false" levelType="TimeMonths" hideMemberIf="Never"/>
<Level name="Day" column="day" type="Numeric" uniqueMembers="false" levelType="TimeDays" hideMemberIf="Never"/>
</Hierarchy>
<Hierarchy name="fiscalYearMonth" caption="Fiscal Year/Month" hasAll="true" primaryKey="id">
<Table name="Time"/>
<Level name="Fiscal Year" column="fiscal_year" type="Numeric" uniqueMembers="true" levelType="TimeYears" hideMemberIf="Never"/>
<Level name="Month" column="month" type="Numeric" ordinalColumn="month" uniqueMembers="false" levelType="TimeMonths" hideMemberIf="Never"/>
<Level name="Day" column="day" type="Numeric" uniqueMembers="false" levelType="TimeDays" hideMemberIf="Never"/>
</Hierarchy>
</Dimension>
1 ответ
Для вычислений "Период за период" вы захотите изучить функцию PrevMember... http://msdn.microsoft.com/en-us/library/ms144719.aspx
Ниже приведен фрагмент, который должен дать вам хорошее начало периода за период...
WITH
MEMBER [Measures].[WO Actual Amount PP] AS
(
[Order Date].[Calendar].CurrentMember.PrevMember
,[Measures].[WO Actual Amount]
)
,FORMAT_STRING = "Currency"
MEMBER [Measures].[Prior Period Growth %] AS
IIF(
[Measures].[WO Actual Amount PP] = 0
,'N/A'
,([Measures].[WO Actual Amount]-[Measures].[WO Actual Amount PP])/[Measures].[WO Actual Amount PP]
)
,FORMAT_STRING = "Percent"
SELECT
NON EMPTY {
[Measures].[WO Actual Amount],
[Measures].[WO Actual Amount PP],
[Measures].[Prior Period Growth %]
} ON 0,
NON EMPTY {
[Order Date].[Calendar Year].[Calendar Year].Members
} ON 1
FROM
[<<cube name>>]
Для того же периода предыдущего года или для расчета вы захотите изучить функцию ParallelPeriod... http://msdn.microsoft.com/en-us/library/ms145500.aspx
Ниже приведен фрагмент, который должен дать вам хорошее начало года за годом...
WITH
MEMBER [Measures].[WO Actual Amount YoY] AS
(
ParallelPeriod(
[Order Date].[Calendar].[Calendar Year]
,1
,[Order Date].[Calendar].CurrentMember
)
,[Measures].[WO Actual Amount]
)
,FORMAT_STRING = "Currency"
MEMBER [Measures].[Prior Period Growth %] AS
IIF(
[Measures].[WO Actual Amount YoY] = 0
,'N/A'
,([Measures].[WO Actual Amount]-[Measures].[WO Actual Amount YoY])/[Measures].[WO Actual Amount YoY]
)
,FORMAT_STRING = "Percent"
SELECT
NON EMPTY {
[Measures].[WO Actual Amount],
[Measures].[WO Actual Amount YoY],
[Measures].[Prior Period Growth %]
} ON 0,
NON EMPTY {
[Order Date].[Calendar Month].[Calendar Month].Members
} ON 1
FROM
[<<cube name>>]