1

我对 MDX 查询还很陌生,而且我无法理解如何计算周期测量。例如,假设我有一个像收入这样的指标,并且我会随着时间的推移逐月分解该收入。我将如何计算该收入从月份到月份的变化百分比?现在假设我想在任何时期、季度到季度、年到年、月到月进行一般计算,甚至将其与前几年的相同时期进行比较。2011 年第一季度与 2012 年第一季度、2011 年第二季度与 2012 年第二季度等。

时间维度

架构定义:

<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>
4

1 回答 1

2

对于 Period over Period 计算,您需要研究使用 PrevMember 函数... http://msdn.microsoft.com/en-us/library/ms144719.aspx

下面是一个片段,可以让您在 Period over Period 上有一个良好的开端......

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

下面是一个片段,应该可以让您在 Year over Year 上有一个良好的开端......

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>>]
于 2012-03-28T13:43:23.757 回答