MDX-尝试匹配此SQL计算

时间:2019-05-22 11:14:47

标签: sql ssas mdx

我有一个公司的样本数据集(按员工和工作日),这些数据集存在于多维多维数据集中。我需要计算用户选择的时间段内的有效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()

我还试图提出一种以某种方式在事实表中完成此计算的方法,但是由于我不知道聚合周期,直到用户在浏览多维数据集时选择聚合周期,这似乎是不可能的。

有什么想法可以将计算转换为多维数据集度量值吗?

0 个答案:

没有答案