Ssas MDX不同的每日\每周聚合

Ssas MDX不同的每日\每周聚合,ssas,aggregate,mdx,Ssas,Aggregate,Mdx,我有一个事实表,记录员工每天的时间事务(每个员工每天有许多事务)。我们还为每个工人制定了每日目标 我试图计算的是,每个工人每天是否达到了他们的每日目标(如果他们达到了=1,如果他们没有达到=0),然后在每日\每周\每月的水平上,我们需要统计达到目标的工人数量 因此,在我的SSAS多维数据集中,我使用以下逻辑创建了一个计算出的度量值,其范围为每天一个工作人员,当您在每天一个工作人员级别查看它时,它会正确显示。然而,我不确定我将如何处理得到的一天水平,以总结该子范围。在下面的示例屏幕截图中(请单击图

我有一个事实表,记录员工每天的时间事务(每个员工每天有许多事务)。我们还为每个工人制定了每日目标

我试图计算的是,每个工人每天是否达到了他们的每日目标(如果他们达到了=1,如果他们没有达到=0),然后在每日\每周\每月的水平上,我们需要统计达到目标的工人数量

因此,在我的SSAS多维数据集中,我使用以下逻辑创建了一个计算出的度量值,其范围为每天一个工作人员,当您在每天一个工作人员级别查看它时,它会正确显示。然而,我不确定我将如何处理得到的一天水平,以总结该子范围。在下面的示例屏幕截图中(请单击图像链接,因为我当前无法嵌入图像),我希望日级别的值为2(如图所示),因为有2人已达到当天的目标

目前,我对MDX的学习曲线有点陡峭,所以对于经验丰富的MDX来说,这可能是一件简单的事情:)

短暂性脑缺血发作


如果使用SUM函数包装,是否有帮助

SUM(
  (
    [Ledger Date].[Financial Date].currentmember
   ,[Worker].[Personnel Number].currentmember
  )
,IIF(
  [Measures].[Target Timesheet Hours] > 0 
    AND 
      [Measures].[Hours] > [Measures].[Target Timesheet Hours]
  ,1
  ,NULL
)
)

代码的问题是多维数据集脚本中定义的计算度量值为NULL,因为它没有聚合

若要解决此问题,请尝试在datasource视图的事实表中添加一个新的命名计算,其表达式为:NULL

在多维数据集结构中,将命名的计算列作为实际度量添加到事实中,并选择作为聚合方法SUM

SCOPE([Measures].[Your Measure]);
    SCOPE([Ledger Date].[Financial Date].[Financial Date].MEMBERS);        
        SCOPE([Worker].[Personnel Number].[Personnel Number].MEMBERS);
            THIS = IIF([Measures].[Target Timesheet Hours] > 0 AND [Measures].[Hours] > [Measures].[Target Timesheet Hours], 1,0);
        END SCOPE;
    END SCOPE;
END SCOPE;
我的第一个猜测是:

CALCULATE;           
CREATE MEMBER CURRENTCUBE.[Measures].[TimesheetTargetMet] AS
SUM(
    NonEmpty(
        existing [Ledger Date].[Financial Date].[Financial Date].Members * [Worker].[Personnel Number].[Personnel Number].Members,
        [Measures].[Target Timesheet Hours]
    ),
    IIF(
        [Measures].[Hours] > [Measures].[Target Timesheet Hours],
        1,
        NULL
    )
), ASSOCIATED_MEASURE_GROUP = 'Worker Targets';

但是,使用钻取选择时,它可能运行缓慢。

否,我恐怕会收到错误“SUM函数要求1参数使用元组集表达式。使用了字符串或数值表达式”
CALCULATE;           
CREATE MEMBER CURRENTCUBE.[Measures].[TimesheetTargetMet] AS
SUM(
    NonEmpty(
        existing [Ledger Date].[Financial Date].[Financial Date].Members * [Worker].[Personnel Number].[Personnel Number].Members,
        [Measures].[Target Timesheet Hours]
    ),
    IIF(
        [Measures].[Hours] > [Measures].[Target Timesheet Hours],
        1,
        NULL
    )
), ASSOCIATED_MEASURE_GROUP = 'Worker Targets';