Расчет доходов проекта в DAX - PullRequest
0 голосов
/ 23 апреля 2019

Мне нужно рассчитать текущий доход для установки + обслуживания для проектов и рассчитать ежемесячный доход для целей управления в DAX в Power BI.

Проблемаявляется следующим.

Проекты хранятся в таблице КОНТРАКТОВ, как это:

enter image description here

И у меня есть отдельная таблица дат INST_DATE_TABLE:

enter image description here

Таблицы связаны через поле [INSTALLATION_DATE].

enter image description here

За каждый месяц выручка равна сумме [INSTALLATION_REVENUE], если установка была выполнена в этом месяце, плюс за первый месяц ежемесячного дохода от обслуживания, который указан как [MAINTENANCE_COST_PER_UNIT] * [MAINTENANCE_UNIT] / 12.

А доход от обслуживания следует рассчитывать только в том случае, если текущая дата выходит за пределы даты установки!

Некоторые контракты еще не подписаны, поэтому у них нет установленной даты установки (NULL)

Таким образом, DAX ВЫХОДА УСТАНОВКИ выглядит так:

    .INSTALLATION_REVENUE = 
     CALCULATE (
        SUMX(CONTRACTS; 
        CONTRACTS[INSTALLATION_REVENUE] 
            );
        CONTRACTS[INSTALLATION_DATE] > 0
     )

И ЕЖЕМЕСЯЧНЫЙ РЕГУЛЯРНЫЙ ВЫХОД выглядит следующим образом:

    .REGULAR_REVENUE = 
    CALCULATE ( 
       SUMX(CONTRACTS; 
       CONTRACTS[MAINTENANCE_COST_PER_UNIT]*CONTRACTS[MAINTENANCE_UNIT]
        ) / 12;
        CONTRACTS[INSTALLATION_DATE] > 0
     )

Для всех дат я могу рассчитать денежный поток последних следующим образом:

     .REGULAR_REVENUE_ONGOING = 
      CALCULATE ( 
          [.REGULAR_REVENUE];
          ALL(INST_DATE_TABLE[INSTALLATION_DATE])
      )

, что дает мне хорошую серию ежемесячныхдоходы за все периоды. Но я хотел бы видеть это только для периодов, которые выходят за пределы даты установки!

Так что, скажем, отфильтровано по контракту 1 Теперь у меня есть следующий денежный поток:

enter image description here

Но за периоды до 2019.04.01 я бы хотел видеть нули!

Как я могу это сделать?

Я просто не могу отфильтровать даты, относящиеся к дате установки проекта!

После получения ожидаемого результата для одного контрактабыло бы легко суммировать его для всех контрактов, подобных этому

      .TOTAL_REVENUE = 
      [.INSTALLATION_REVENUE] + [.REGULAR_REVENUE_EXPECTED]

ОБНОВЛЕНИЕ:

Я создал итоговую сумму, чтобы отобразить текущий доход как таковой:

   .REGULAR_REVENUE_ONGOING = 
   CALCULATE ( 
       [.REGULAR_REVENUE];
       FILTER(
           ALL(INST_DATE_TABLE[INSTALLATION_DATE]);
           INST_DATE_TABLE[INSTALLATION_DATE
             <=MAX(INST_DATE_TABLE[INSTALLATION_DATE])
           )
     )

это показывает правильную серию, но теперь у меня есть другая проблема.Когда я пытаюсь накопить этот и без того совокупный ряд данных, он не суммируется как совокупный ряд данных !

Буду признателен за любую помощь

   .REVENUE_TOTAL_CUMULATIVE = 
    CALCULATE(
       [.REVENUE_TOTAL];
       FILTER(
           INST_DATE_TABLE;
           INST_DATE_TABLE[INSTALLATION_DATE] <= MAX(INST_DATE_TABLE[INSTALLATION_DATE])
           )
    )

enter image description here

1 Ответ

1 голос
/ 23 апреля 2019

Предполагая, что у вашего текущего дохода нет конечных дат, попробуйте:

.REGULAR_REVENUE_ONGOING = 
VAR DateMin = 
    CALCULATE(
        MIN ( CONTRACTS[INSTALLATION_DATE] ),
        ALL ( INST_DATE_TABLE )
    )
VAR DateMax = 
    MAX ( INST_DATE_TABLE[INSTALLATION_DATE] )
RETURN
    SUMX ( 
        FILTER ( 
            ALL ( INST_DATE_TABLE ),
            INST_DATE_TABLE[INSTALLATION_DATE] >= DateMin && INST_DATE_TABLE[INSTALLATION_DATE] <= DateMax
        ),
        [.REGULAR_REVENUE]
    )

А для совокупного общего дохода:

.REVENUE_TOTAL_CUMULATIVE = 
VAR DateCurrent = MAX ( INST_DATE_TABLE[INSTALLATION_DATE] )
VAR CumulativeInstallationRevenue = 
    CALCULATE ( 
        [.INSTALLATION_REVENUE],
        FILTER ( 
            ALL ( INST_DATE_TABLE ),
            INST_DATE_TABLE[INSTALLATION_DATE] <= DateCurrent
        )
    )
VAR CumulativeOngoingRevenue = 
    SUMX ( 
        FILTER ( 
            ALL ( INST_DATE_TABLE ),
            INST_DATE_TABLE[INSTALLATION_DATE] <= DateCurrent
        ),
        [.REGULAR_REVENUE_ONGOING]
    )
RETURN
    CumulativeInstallationRevenue + CumulativeOngoingRevenue

enter image description here

См. https://pwrbi.com/so_55808659/ для рабочего примера файла PBIX

...