Как я могу исправить расчет DAX XIRR для проектов с разными датами начала инвестиций? - PullRequest
1 голос
/ 26 июня 2019

Я управляю корпоративной стратегией, которая перемещает людей и недвижимость в разных регионах. Стратегия состоит из большого количества проектов, которые можно считать независимыми друг от друга и объединять их в совокупности со стратегией. Объекты, которые мы собираем, включают в себя существующие затраты на рабочую силу и стоимость недвижимости, и мы сравниваем их с рабочей силой, недвижимостью и инвестиционными затратами на переезды. Каждый из этих элементов содержится в отдельных таблицах фактов, и все они связаны через таблицу измерений.

Мне удалось определить переменную, которая использует UNION и SELECTCOLUMNS для создания консолидированной таблицы для вычисления NPV, и это сработало отлично. Когда я использовал тот же подход для расчета XIRR, он работает для большинства проектов, но выдает ошибку для тех, у которых дата инвестирования больше года. Я пытался применить CALCULATE с ФИЛЬТРОМ, где Дата больше или равна дате Первой инвестиции для этого проекта, но это не сработало.

IRR:=VAR CashFlowTable =  
    UNION (  
        SELECTCOLUMNS (  
            LaborComponent,  
            "Date", LaborComponent[Date],  
            "Values", LaborComponent[Base vs Deploy],  
            "Index", LaborComponent[Index]  
        ),  
        SELECTCOLUMNS (  
            RealEstateCosts,  
            "Date", RealEstateCosts[Date],  
            "Values", RealEstateCosts[Base vs Deploy],  
            "Index", RealEstateCosts[Index]  
        ),  
        SELECTCOLUMNS (  
            HRCosts,  
            "Date", HRCosts[Date],  
            "Values", HRCosts[Base vs Deploy],  
            "Index", HRCosts[Index]  
        )  
    )  
RETURN  
    IFERROR (  
        CALCULATE (  
            XIRR ( CashFlowTable, [Values], [Date] ),  
            FILTER(CashFlowTable, [Date] >= [First Investment Date] )),  
        BLANK ()  
    )

, где

First Investment Date :=
CALCULATE (
    MIN ( 'Calendar'[Date] ),
    FILTER ( ALL ( 'Calendar'[Date] ), [Total Investment] < 0 )
)

и

Total Investment := SUM ( HRCosts[Value] )
...