Используйте неизменяемую таблицу Budget, таблицу Actuals только для добавления данных, а также таблицы Commitments, CategoryMap и Summary. Стабильный ключ = MonthStart|CostCenter|Category. Сопоставляйте CategoryCode через CategoryMap, а несопоставленные транзакции оставляйте в Review, при этом включая их суммы в сверку.
Столбцы Summary: Month, CostCenter, Category, Owner, Budget, Actual, Commitments, OwnerRemainingEstimate, Forecast, ActualVariance, ActualVariancePct, ForecastVariance, ForecastVariancePct, Status, Comment. Заполняйте Actual с помощью SUMIFS по границам месяца PostingDate и сопоставленным измерениям; используйте те же измерения для обязательств. Forecast = Actual+Commitments+OwnerRemainingEstimate. Variance = Actual−Budget; если Budget равен нулю, процент возвращает N/A.
Примеры статусов: Review для несопоставленных данных; Forecast over budget, если прогноз превышает бюджет более чем на согласованный порог существенности; Timing, если фактические расходы низки, но разница объясняется обязательствами; в остальных случаях — On track. Не называйте отрицательное отклонение фактических расходов экономией автоматически. Сверьте общую сумму Actuals, включая Review, с финансовым экспортом; проверьте уникальность TransactionID; сверьте бюджет Summary с Budget_v2; отдельно покажите неклассифицированные суммы; заблокируйте ячейки с формулами и утверждённым бюджетом; запишите дату обновления и версию бюджета.