Forum Discussion

barend_dronkers's avatar
barend_dronkers
Regular Visitor
4 years ago
Solved

Contract renewal, cancellation and renewal amount increase/decrease

I have a Contract table that includes the following columns:   ID Account Service Start Date End Date Amount ($) 1 Account A     Service 1      2021/05/18       ...
  • tamerj1's avatar
    4 years ago

    Hi barend_dronkers 
    Here is a sample file with the solution https://www.dropbox.com/t/MHLqHgqhR8T8rNOc

    Action = 
    VAR ContractsTable = Contracts
    VAR LatestContractEnd = MAXX ( ContractsTable, Contracts[End Date] )
    VAR LastContractStart = MAXX ( ContractsTable, Contracts[Start Date] )
    VAR PreviousContracts = FILTER ( ContractsTable, Contracts[End Date] < LatestContractEnd )
    VAR Last2ndContractEnd = MAXX ( PreviousContracts, Contracts[End Date] )
    VAR ContractGap = DATEDIFF ( Last2ndContractEnd, LastContractStart, DAY ) 
    VAR Result =
        SWITCH (
            TRUE ( ),
            LatestContractEnd <= TODAY ( ), "Cancel",
            ISBLANK ( Last2ndContractEnd ) || ContractGap > 1, "New",
            "Renew"
        )
    RETURN 
        Result
    Most Recent Contract ID = MAX ( Contracts[ID] )
    Renewal Rate (%) = 
    VAR ContractsTable = Contracts
    VAR LatestContractEnd = MAXX ( ContractsTable, Contracts[End Date] )
    VAR LastContractValue = MAXX ( FILTER ( ContractsTable, Contracts[End Date] = LatestContractEnd ), Contracts[Amount ($)] )
    VAR PreviousContracts = FILTER ( ContractsTable, Contracts[End Date] < LatestContractEnd )
    VAR PreviousContractEnd = MAXX ( PreviousContracts, Contracts[End Date] )
    VAR PreviousContractValue = MAXX ( FILTER ( PreviousContracts, Contracts[End Date] = PreviousContractEnd ), Contracts[Amount ($)] )
    RETURN 
        IF ( 
            [Action] = "Renew",
            DIVIDE ( LastContractValue, PreviousContractValue)
        )