如何在MDX中创建周期测量?

如何在MDX中创建周期测量?,mdx,olap,mondrian,Mdx,Olap,Mondrian,我对MDX查询是相当陌生的,我很难理解如何计算一个周期一个周期的度量。例如,假设我有一个类似于收入的指标,我会随着时间的推移(比如按月计算)将收入分解出来。我如何计算该收入每月的变化百分比?现在让我们假设我想在任何时期,季度到季度,年度到年度,月度到月度,或者甚至与前几年的相同时期进行比较。2011年第一季度与2012年第一季度、2011年第二季度与2012年第二季度等 架构定义: <Dimension type="TimeDimension" highCardinality="fals

我对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>

对于期间与期间的计算,您需要研究使用PrevMember函数。。。

下面是一个片段,它应该给你们一个很好的开始

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>>]
与
成员[措施][工单实际金额PP]为
(
[订单日期][日历].CurrentMember.PrevMember
,[措施][工单实际金额]
)
,FORMAT_STRING=“Currency”
成员[措施][前期增长%]作为
IIF(
[措施].[工单实际金额PP]=0
“不适用”
,([计量].[工单实际金额]-[计量].[工单实际金额PP])/[计量].[工单实际金额PP]
)
,FORMAT_STRING=“百分比”
挑选
非空{
【措施】【工单实际金额】,
[措施][工单实际金额PP],
[措施][前期增长%]
}0,,
非空{
[订单日期][日历年][日历年].成员
}在1号
从…起
[]
对于上一年的同一时期或计算,您需要查看ParallelPeriod函数。。。

下面是一个片段,应该给你一个良好的开端,一年比一年

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>>]
与
会员【计量】【工单实际金额同比】为
(
平行周期(
[订单日期][日历][日历年]
1.
,[订单日期][日历].CurrentMember
)
,[措施][工单实际金额]
)
,FORMAT_STRING=“Currency”
成员[措施][前期增长%]作为
IIF(
【计量】【工单实际发生额同比】=0
“不适用”
,([计量][工单实收]-[计量][工单实收同比]/[计量][工单实收同比]
)
,FORMAT_STRING=“百分比”
挑选
非空{
【措施】【工单实际金额】,
【措施】【工单实际金额同比】,
[措施][前期增长%]
}0,,
非空{
[订单日期][日历月][日历月].成员
}在1号
从…起
[]

我尝试翻译第一个示例,但得到一个空的PP列。订单日期结构是如何做到这一点的?我有一个日期维度,下面有多个层次结构(年/季度/月、年/月、财年/季度/月、财年/月)。因此,我的成员看起来像:成员[Measures].[Head Count PP]为([employmentDate.yearMonth].CurrentMember.PrevMember,[Measures].[Head Count]),但它似乎从未返回任何内容。在表中,我没有时间戳或日期列,但年份、FY、季度、月份以整数字段分隔。我需要一个真实的日期栏来让这些东西发挥作用吗?你能用你的日期维度的屏幕截图更新你的原始帖子吗,这样我就可以更好地了解你在做什么了?我认为这应该很好…零个月的数字有点奇怪,但应该没关系。尝试复制计算成员时,是否将[employmentDate]维度中的任何成员放置在列轴或行轴上?如果不是,那么计算成员将不会返回任何内容…因为它引用CurrentMember函数,因此需要一些上下文谢谢!我想我一定是漏掉了入职日期。我希望在任何时期都有一个通用的解决方案,但我认为这可以适应使用模板的通用解决方案。