У меня довольно сложный набор данных, но я постараюсь упростить его для этого поста.
У меня есть данные контракта в таблице F1_Contract в упрощенном формате:
Я пытаюсь рассчитать ожидаемую прибыль от контрактов.Первое, что мне было нужно, - это рассчитать добавочный объем по каждому контракту, который действовал между текущей датой и следующей датой, в зависимости от среза даты, используемого в представлении.После большой боли и страданий кто-то указал мне на сообщение в StackOverflow, которое решило мою проблему:
Создайте таблицу отключенных дат, используйте ее в качестве среза даты, а затем вычислите разницу в датах между Current Date
, START_DATE
среза, Next Date
и END_DATE
среза.
Полученная мера равна
DELTA DATE =
CALCULATE (
SUMX (
F1_Contract,
DATEDIFF (
MAX ( MAX ( F1_Contract[CURRENT_CONTRACT_DATE] ), [Disconnected_MIN_Date] ),
MIN ( MAX ( F1_Contract[NEXT_CONTRACT_DATE] ), [Disconnected_MAX_Date] ),
DAY
)
),
FILTER (
F1_Contract,
F1_Contract[CURRENT_CONTRACT_DATE] <= [Disconnected_MAX_Date]
&& F1_Contract[NEXT_CONTRACT_DATE] >= [Disconnected_MIN_Date]
)
)
Затем я беру эту Меру и умножаю ее на VOLUME_PER_DAY
, чтобы получить инкрементный объем для представления по следующей формуле:
Incremental Cumulative VOLUME =
CALCULATE(SUMX(F1_Contract,F1_Contract[VOLUME_PER_DAY]* [DELTA DATE]))
Чтобы вычислить F1 Revenue
и F1 Cost
, я беру F1 Unit Cost
и соответствующие F1 price
на основе добавочного объема и получаю следующие меры:
Incremental F1 Revenue =
CALCULATE (
MAX (
SUMX (
F1_Contract,
[Incremental Cumulative VOLUME] * [F1 Sell Rate @ GAD Per Shipment]
),
[Calc F1 MinCharge]
)
)
Incremental F1 Cost =
CALCULATE (
SUMX ( F1_Contract, [Incremental Cumulative VOLUME] * F1_Contract[F1_Cost] )
)
Все это прекрасно работает!Я могу создать отчет на уровне ID
, Indicator
или на уровне Lane
, и все числа верны.
Проблема в том, что у меня есть вторая таблица доходов, F2_Contract_Revenue
, который состоит из доходов F2, отформатированных следующим образом (обратите внимание, что может быть от 0 до 15 строк в F2_Contract_Revenue
для любого заданного ID
в F1_Contract
)
F2_Contract_Revenue:
Хотя ID
в F1_Contract
уникален, просто чтобы быть в безопасности, у меня есть отдельная таблица DISTINCT_ID
, которую я использовал для связи ID
с F1_Contract
иF2_Contract_Revenue
.
Теперь мне нужно рассчитать доход F2 для каждого ID
;используя визуальную формулу:
If(BASIS = “FLAT”, F2_Unit_Rev, MAX(F2_Min, (Incremental Volume * F2_Unit_Rev))
Мера, которую я создал после примерно 30 попыток:
F2 Revenue =
CALCULATE (
(
SUMX (
F2_Contract_Revenue,
(
MAX (
[Incremental Cumulative VOLUME]
* IF ( F2_Contract_Revenue[BASIS] = "RATE",
F2_Contract_Revenue[F2_Unit_Rev], 0 ),
F2_Contract_Revenue[F2_Min]
)
)
+ IF ( F2_Contract_Revenue[BASIS] = "FLAT",
F2_Contract_Revenue[F2_Unit_Rev], 0 )
)
),
FILTER (
F2_Contract_Revenue,
F2_Contract_Revenue[ID] = RELATED ( F1_Contract[ID] )
)
)
Это работает правильно на уровне Lane.Однако в представлениях на уровне ID
он немного отключен (я не смог отследить почему), а на уровне Indicator
экспоненциально отключен.
Мне нужно использовать этов формуле, которая будет представлена как F1 Revenue + F2 Revenue – F1 Cost
, которая, конечно, также экспоненциально отключена на уровне INDICATOR
(обратите внимание, что есть несколько строк INDICATOR = 1
и одна строка INDICATOR = 2
).
Данные являются собственностью, поэтому я не могу поделиться файлом PowerBI, однако я могу ответить на более конкретные вопросы с данными, которые я очистил здесь.
Любые советы, мысли, исправления, помощь очень ожидается и ценится !!!