Mdx 蒙德里安:如何将一个连续值转换为N个波段

Mdx 蒙德里安:如何将一个连续值转换为N个波段,mdx,mondrian,Mdx,Mondrian,所以我有一个值,它表示事实表中的长度(以天为单位)。我想创建一个查询,按年份将该值分成N个带(比如4个带)。有没有办法用CalculatedMembers做到这一点?例如,我想要乐队:

所以我有一个值,它表示事实表中的长度(以天为单位)。我想创建一个查询,按年份将该值分成N个带(比如4个带)。有没有办法用CalculatedMembers做到这一点?例如,我想要乐队:<1年,1-3年,3-5年,5年以上。我可以用这样的日子来做:

0 - 365
365 - 1095
1096 - 1825
1826 - infinity
你知道怎么做吗?我用的是蒙德里安。我想动态地计算它,而不是添加字段和更改ETL脚本等等

我使用聚合函数定义了一个度量值,表示以天为单位的平均长度(显示为2.4年)。但我真的想定义一个全新的度量,它是在同一列上的一个计算度量,其中一个函数返回它所属的频带,如上所述,然后汇总每个频带中有多少个频带


我开始怀疑我必须在ETL中这样做,并创建一个新的专栏,将它们放在一个乐队中。我怀疑这确实是一个新的维度(与其说是一个经过计算的度量)

我从您的问题中了解到,您希望将乐队作为类别,这意味着您需要他们作为某些层次结构的成员。您可以在MDX中动态创建成员,但只能为现有层次结构创建成员。您没有声明一个,因此我只假设您有一个事件层次结构,您希望为其设置持续时间的种子,而且我假设包含维度键的层次结构名为
[Event].[Event Id]
。您还未说明“平均持续时间”度量值的名称。因此,我假设它被称为
持续时间

然后可以使用以下MDX:

WITH Member [Event].[Event Id].[< 1 year] AS
     Aggregate(Filter([Event].[Event Id].[Event Id].Members,
                      [Measures].[Duration] < 1.0
                     )
              )
     Member [Event].[Event Id].[1-3 years] AS
     Aggregate(Filter([Event].[Event Id].[Event Id].Members,
                      [Measures].[Duration] >= 1.0 AND [Measures].[Duration] < 3.0
                     )
              )
     Member [Event].[Event Id].[3-5 years] AS
     Aggregate(Filter([Event].[Event Id].[Event Id].Members,
                      [Measures].[Duration] >= 3.0 AND [Measures].[Duration] < 5.0
                     )
              )
     Member [Event].[Event Id].[5+ years] AS
     Aggregate(Filter([Event].[Event Id].[Event Id].Members,
                      [Measures].[Duration] >= 5.0
                     )
              )
SELECT ... // whatever you want to see
       ON COLUMNS,
       {
       [Event].[Event Id].[< 1 year],
       [Event].[Event Id].[1-3 years],
       [Event].[Event Id].[3-5 years],
       [Event].[Event Id].[5+ years]
       }
       ON ROWS
FROM [YourCube]
成员[Event].[Event Id].[1年]为
聚合(筛选器([Event].[Event Id].[Event Id])。成员,
[措施][持续时间]<1.0
)
)
成员[事件].[事件Id].[1-3年]身份
聚合(筛选器([Event].[Event Id].[Event Id])。成员,
[Measures].[Duration]>=1.0和[Measures].[Duration]<3.0
)
)
成员[事件].[事件Id].[3-5年]身份
聚合(筛选器([Event].[Event Id].[Event Id])。成员,
[Measures].[Duration]>=3.0和[Measures].[Duration]<5.0
)
)
成员[事件].[事件Id].[5年以上]身份
聚合(筛选器([Event].[Event Id].[Event Id])。成员,
[措施][持续时间]>=5.0
)
)
选择…//你想看什么就看什么
在专栏上,
{
[事件].[事件Id].<1年],
【事件】【事件Id】【1-3年】,
【事件】【事件Id】【3-5年】,
[事件].[事件Id].[5年以上]
}
成排
从[你的立方体]
将WHERE条件、其他层次结构添加到行或列中,然后根据需要进行子选择


我不确定这是否真的很快,但它解决了这个问题。

基本值(
天数长度
)是一种度量吗?它的聚合功能是什么?你想要什么样的典型输出报告?我更新了问题以澄清你的一些问题。我想我不能创建一个单独的级别或维度,作为一个单独的计算成员添加到多维数据集?@chubbsondubs我不知道Mondrian的详细情况。但在AnalysisServices中,您必须在一个级别中至少有一个成员,然后才能向其中添加计算成员。