MDX - 在几个月内运行总和仅限于一个间隔

时间:2017-09-12 17:14:12

标签: mdx mondrian

我有一个问题,经过一些出汗和一些咒骂工作

WITH
    MEMBER [Measures].[m_active] AS ([Measures].[CardCount], [Operation].[Code].[ACTIVATION])
    MEMBER [Measures].[m_inactive] AS ([Measures].[CardCount], [Operation].[Code].[DEACTIVATION])
    MEMBER [Measures].[p_active] AS 
    SUM(
        [Calendar.YMD].[2016].[January]:[Calendar.YMD].CurrentMember, 
        [Measures].[m_active]
    )
    MEMBER [Measures].[p_inactive] AS
    SUM(
        [Calendar.YMD].[2016].[January]:[Calendar.YMD].CurrentMember, 
        [Measures].[m_inactive]
    )
    MEMBER [Measures].[tot_active] AS (
        SUM({[Calendar.YMD].[2010].Children}.Item(0):[Calendar.YMD].CurrentMember, [Measures].[m_active]) - 
        SUM({[Calendar.YMD].[2010].Children}.Item(0):[Calendar.YMD].CurrentMember, [Measures].[m_inactive])
    )
    MEMBER [Measures].[p_tot_active] AS 
    SUM(
        [Calendar.YMD].[2016].[January]:[Calendar.YMD].CurrentMember, 
        [Measures].[tot_active]
    )
SELECT
    {[Measures].[m_active], [Measures].[p_active], [Measures].[m_inactive], [Measures].[p_inactive], [Measures].[tot_active], [Measures].[p_tot_active]} ON COLUMNS,
    NonEmptyCrossJoin(
        {Descendants([Calendar.YMD].[2016].[January]:[Calendar.YMD].[2017].[August], [Calendar.YMD].[Month])},
        {Descendants([CardStatus.Description].[All CardStatus.Descriptions], [CardStatus.Description].[Description])}
    ) on ROWS
FROM [Cube]

我获得的是一个表格,每个月显示相对于该月的激活和停用,相对于所考虑的时段(从2016年1月1日开始到2017年8月1日结束)的累计激活以及来自开始时间(2010年1月)直到结束时间间隔。

这个区间是参数化的,并且要考虑这一天,通过这个查询,8月份所做的所有激活都被认为是在1日之后进行的。

我尝试做这样的修改。

WITH
    MEMBER [Measures].[m_active] AS ([Measures].[CardCount], [Operation].[Code].[ACTIVATION])
    MEMBER [Measures].[m_inactive] AS ([Measures].[CardCount], [Operation].[Code].[DEACTIVATION])
    MEMBER [Measures].[p_active] AS 
    SUM(
        [Calendar.YMD].[2016].[January].[1]:[Calendar.YMD].CurrentMember, 
        [Measures].[m_active]
    )
    MEMBER [Measures].[p_inactive] AS
    SUM(
        [Calendar.YMD].[2016].[January].[1]:[Calendar.YMD].CurrentMember, 
        [Measures].[m_inactive]
    )
    MEMBER [Measures].[tot_active] AS (
        SUM({[Calendar.YMD].[2010].[January].Children}.Item(0):[Calendar.YMD].CurrentMember, [Measures].[m_active]) - 
        SUM({[Calendar.YMD].[2010].[January].Children}.Item(0):[Calendar.YMD].CurrentMember, [Measures].[m_inactive])
    )
    MEMBER [Measures].[p_tot_active] AS 
    SUM(
        [Calendar.YMD].[2016].[January].[1]:[Calendar.YMD].CurrentMember, 
        [Measures].[tot_active]
    )
SELECT
    {[Measures].[m_active], [Measures].[p_active], [Measures].[m_inactive], [Measures].[p_inactive], [Measures].[tot_active], [Measures].[p_tot_active]} ON COLUMNS,
    NonEmptyCrossJoin(
        {Descendants([Calendar.YMD].[2016].[January]:[Calendar.YMD].[2017].[August], [Calendar.YMD].[Month])},
        {Descendants([CardStatus.Description].[All CardStatus.Descriptions], [CardStatus.Description].[Description])}
    ) on ROWS
FROM [Cube]

但我在相关字段上收到此错误:

#ERR: mondrian.olap.fun.MondrianEvaluationException: Members must belong to the same level

我该如何解决这个问题?感谢。

0 个答案:

没有答案