MDX - пытается сопоставить этот расчет SQL - PullRequest
0 голосов
/ 22 мая 2019

У меня есть примерный набор данных от компании на сотрудника и день, который у меня есть в многомерном кубе.Мне нужно рассчитать эффективные 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)

в любом случае неверен, поскольку у меня не может быть SUM () для * FTE части

Я также пыталсяпридумать способ сделать этот расчет каким-либо образом в таблице фактов, но это кажется невозможным, поскольку я не знаю периода агрегации, пока он не будет выбран пользователем при просмотре куба.

Любые идеи, как перевестирасчет в меру куба?

...