Forum Discussion
tkavitha911
Helper III
1 year agourgent help needed
Hi Team I need your support in creating a DAX formula to calculate Demurrage Cost based on two tables, with the logic applied market-wise. Here's the requirement: For each record, if Day_at_port ≤...
- 1 year ago
Hi tkavitha911
Demurrage_Cost = SWITCH( TRUE(), 'Table'[Day_at_port] <= 'Table'[FREE days], 0, 'Table'[Markets] = "Australia", ('Table'[Day_at_port] - 7) * 50 * 'Table'[Count of Container Number], 'Table'[Markets] = "Korea", ('Table'[Day_at_port] - 7) * 24 * 'Table'[Count of Container Number], 'Table'[Markets] = "China", VAR ExtraDays = 'Table'[Day_at_port] - 14 VAR Charge = SWITCH( TRUE(), ExtraDays <= 4, 0, ExtraDays <= 12, (ExtraDays - 4) * 96, (8 * 96) + (ExtraDays - 12) * 125 ) RETURN Charge * 'Table'[Count of Container Number], 'Table'[Markets] = "Shenzhen", VAR ExtraDays = 'Table'[Day_at_port] - 14 VAR Charge = SWITCH( TRUE(), ExtraDays <= 4, 0, ExtraDays <= 12, (ExtraDays - 4) * 96, (8 * 96) + (ExtraDays - 12) * 125 ) RETURN Charge * 'Table'[Count of Container Number], BLANK() )The SWITCH(TRUE(), ...) structure allows for flexible multi-condition evaluation.
For each market, we calculate ExtraDays by subtracting the free threshold from Day_at_port.
Based on tiered rate structures, we apply the appropriate cost calculations and multiply by container count.
This formula assumes you're applying it in a table with fields like Markets, Day_at_port, FREE days, and Count of Container Number. Adjust field names if yours differ. You can convert this into a measure with additional aggregation (e.g., SUMX) if needed at the visual level.
techies
Super User
1 year agoHi tkavitha911 please try this, this is working here
Demurrage Cost =
VAR Market = SELECTEDVALUE('ContainerData'[Markets])
VAR DaysAtPort = SELECTEDVALUE('ContainerData'[Day_at_port])
VAR FreeDays = LOOKUPVALUE('RateStructure'[FreeDays], 'RateStructure'[Markets], Market)
VAR ExtraDays = MAX(0, DaysAtPort - FreeDays)
VAR FlatRate = LOOKUPVALUE('RateStructure'[FlatRateAfter], 'RateStructure'[Markets], Market)
VAR Rate_15_18 = LOOKUPVALUE('RateStructure'[Days_15_18], 'RateStructure'[Markets], Market)
VAR Rate_19_26 = LOOKUPVALUE('RateStructure'[Days_19_26], 'RateStructure'[Markets], Market)
VAR Rate_GT_26 = LOOKUPVALUE('RateStructure'[Days_GT_26], 'RateStructure'[Markets], Market)
RETURN
SWITCH(
TRUE(),
NOT ISBLANK(FlatRate),
ExtraDays * FlatRate,
NOT ISBLANK(Rate_19_26) || NOT ISBLANK(Rate_GT_26),
VAR Days15to18 = MIN(4, MAX(0, ExtraDays - 0))
VAR Days19to26 = MIN(8, MAX(0, ExtraDays - 4))
VAR DaysGT26 = MAX(0, ExtraDays - 12)
VAR Cost19to26 = Days19to26 * COALESCE(Rate_19_26, 0)
VAR CostGT26 = DaysGT26 * COALESCE(Rate_GT_26, 0)
RETURN Cost19to26 + CostGT26,
0
)