Ssas MDX不同的每日\每周聚合
我有一个事实表,记录员工每天的时间事务(每个员工每天有许多事务)。我们还为每个工人制定了每日目标 我试图计算的是,每个工人每天是否达到了他们的每日目标(如果他们达到了=1,如果他们没有达到=0),然后在每日\每周\每月的水平上,我们需要统计达到目标的工人数量 因此,在我的SSAS多维数据集中,我使用以下逻辑创建了一个计算出的度量值,其范围为每天一个工作人员,当您在每天一个工作人员级别查看它时,它会正确显示。然而,我不确定我将如何处理得到的一天水平,以总结该子范围。在下面的示例屏幕截图中(请单击图像链接,因为我当前无法嵌入图像),我希望日级别的值为2(如图所示),因为有2人已达到当天的目标 目前,我对MDX的学习曲线有点陡峭,所以对于经验丰富的MDX来说,这可能是一件简单的事情:) 短暂性脑缺血发作Ssas MDX不同的每日\每周聚合,ssas,aggregate,mdx,Ssas,Aggregate,Mdx,我有一个事实表,记录员工每天的时间事务(每个员工每天有许多事务)。我们还为每个工人制定了每日目标 我试图计算的是,每个工人每天是否达到了他们的每日目标(如果他们达到了=1,如果他们没有达到=0),然后在每日\每周\每月的水平上,我们需要统计达到目标的工人数量 因此,在我的SSAS多维数据集中,我使用以下逻辑创建了一个计算出的度量值,其范围为每天一个工作人员,当您在每天一个工作人员级别查看它时,它会正确显示。然而,我不确定我将如何处理得到的一天水平,以总结该子范围。在下面的示例屏幕截图中(请单击图
如果使用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';