我有一个公司的样本数据集(按员工和工作日),这些数据集存在于多维多维数据集中。我需要计算用户选择的时间段内的有效FTE(全时等效)。
公式为:FTE_actual = SUM(WorkedHoursOverPeriod)/ SUM(ScheduleHoursInPeriod)* FTE
这是每月在SQL中的计算方式:
WITH fact AS (
SELECT 100 AS EmployeeID, 20190101 AS DateID, 8.00 AS WorkedHours, 8.00 AS ScheduleHours UNION
SELECT 100,20190102,2,8 UNION
SELECT 100,20190103,8,8 UNION
SELECT 100,20190104,0,0 UNION
SELECT 200,20190101,4,8 UNION
SELECT 200,20190102,0,0 UNION
SELECT 300,20190102,8,8 UNION
SELECT 300,20190103,8,8 UNION
SELECT 100,20190201,8,8 UNION
SELECT 200,20190201,8,8 UNION
SELECT 300,20190201,8,8
)
, Dim AS (
SELECT 100 AS EmployeeID, 1.00 AS FTE UNION
SELECT 200,0.50 UNION
SELECT 300,0.20
)
, FTE_Per_Employee AS (
SELECT
SUM(WorkedHours) / SUM(ScheduleHours) * FTE AS FTE_Per_Employee
,fact.EmployeeID
,fact.DateID / 100 AS Month
FROM fact
INNER JOIN Dim ON fact.EmployeeID = Dim.EmployeeID
WHERE ScheduleHours > 0
GROUP BY FTE, fact.EmployeeID, fact.DateID / 100
)
SELECT SUM(FTE_Per_Employee), Month AS FTE_Final
FROM FTE_Per_Employee
GROUP BY Month
到目前为止,在多维数据集中,当在行上选择“天”时,我得到的最好结果就是正确的结果。我试图通过这篇文章解决更长的时间: https://blog.crossjoin.co.uk/2013/05/29/aggregating-the-result-of-an-mdx-calculation-using-scoped-assignments/ 但这并没有真正起作用。 我的计算也可以
FTE_actual = SUM(WH) / SUM(SH) * SUM(FTE)
或
FTE_actual = SUM(WH / SH * FTE)
这两种方法都不正确,因为我无法在* FTE部分使用SUM()
我还试图提出一种以某种方式在事实表中完成此计算的方法,但是由于我不知道聚合周期,直到用户在浏览多维数据集时选择聚合周期,这似乎是不可能的。
有什么想法可以将计算转换为多维数据集度量值吗?