SSAS 计算成员 - 如何跨多个维度聚合度量?

SSAS Calculated Member - How do I aggregate a measure across multiple dimensions?

我有一个非常简单的多维数据集,其中包括按 date/30-minute 间隔计算的各种呼叫中心 phone 统计数据的成员。目标是随着时间的推移显示性能,同时突出潜在的问题区域。具体来说,我显示了一个月中每一天的平均回答速度(效果很好),但我不知道如何在给定的一天(从所有时间间隔)显示最大回答速度。例如,一天的平均回答速度可能为 2:44,但由于有一个错误的时间间隔,其中的回答速度为 10:26,我只想显示该时间间隔的值以及性能比较的平均值。

我想得到的是:

日期:2015-08-03

ASA:2:44

最大 ASA:10:26

但我得到的是:

日期:2015-08-03

ASA:2:44

最大 ASA:2:44

最大 ASA 值正在计算一整天的所有时间间隔,但我需要它计算每个时间间隔,然后从那里提取最大值。

我的ASA计算如下:

CREATE MEMBER CURRENTCUBE.[Measures].[Average Speed of Answer]
 AS 
    SUM([Measures].[Answer Time]) 
      / SUM([Measures].[Calls Answered]) 
        / 86400, 
FORMAT_STRING = "HH:mm:ss", 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Call Stats Interval - Group'; 

我认为您正在寻找类似的东西:

CREATE MEMBER CURRENTCUBE.[Measures].[Max Speed of Answer]
 AS 
    MAX(
      [Dim_CallID].[Dim_CallID].MEMBERS,
      [Measures].[Answer Time]
    ) 
        / 86400, 
FORMAT_STRING = "HH:mm:ss", 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Call Stats Interval - Group'; 

以上假设您的多维数据集中具有类似 [Dim_CallID].[Dim_CallID].MEMBERS 的属性层次结构。

正如 whytheq 的问题所暗示的,关于您是在每次呼叫的基础上寻找实际的 Max ASA(这需要 CallID 维 whytheq 建议)还是在间隔(30 分钟)基础。

我认为您正在寻找的是后者:找到具有最高平均 ASA 值(在该间隔内的所有调用中)的间隔(不是调用,您没有该粒度级别的数据) ).

您还没有发布完整的 MDX 代码,但我认为问题在于您的 MAX 值是在查询的上下文中计算的(可能在 [Date].[2015-08-03] 级别) ): 它给出了已经计算的平均值 在那个级别 的最大值,而你想要的是 间隔 级别的平均值的最大值.

解决方案是在时间间隔级别计算平均值,而不是在日期切片器级别。我不知道您的确切维度和度量名称,因此在此示例中它们是通用的:

WITH MEMBER Measures.ASA AS
Measures.[TimeToAnswer]/Measures.[NumberOfCalls]
MEMBER Measures.MaxASAPerHalfHour AS
MAX(DESCENDANTS([TimeDimension.CurrentMember,[TimeDimension].[HalfHourIntervals]),
Measures.ASA)
SELECT 
{Measures.[TimeToAnswer],Measures.  
[NumberOfCalls],Measures.ASA,Measures.MaxASAPerHalfHour} ON 0,
DESCENDANTS([TimeDimension].[Years].[2015],[TimeDimension].[Months]) ON 1
FROM [TheCube]

此查询使用会话级计算成员而不是立方体级计算成员,但原理是相同的。它显示 2015 年的所有月份,每个月的最大 ASA。由于 MAX 函数的第一个参数(半小时的集合),第一个计算的度量将针对该集合的每个成员(即每个半小时间隔)单独评估 before MAX 是评价。