Forum Discussion

ArchStanton's avatar
ArchStanton
Power Participant
9 months ago
Solved

IF Statement Amendment

Hi,

I would like to add another condition to this IF Statement that says if the Created On date = Resolution Date then DAY+1

At the moment the Code is saying that when these dayes are the same then its 0 days which is wrong:

 

Case Length = 
IF (
    'Cases'[statecode] = "Active",
    DATEDIFF (
        IF (
            ISBLANK ( 'Cases'[legacycasecreationdate] ),
            'Cases'[Created On],
            'Cases'[legacycasecreationdate]
        ),
        NOW (),
        DAY
    ),
    DATEDIFF (
        IF (
            ISBLANK ( 'Cases'[legacycasecreationdate] ),
            'Cases'[Created On],
            'Cases'[legacycasecreationdate]
        ),
        'Cases'[Resolution Date],
        DAY
    )
)
  • Hi ArchStanton , try this formula.
    Logic Used:
    When the Created On equals the Resolution Date , return 1 day;
    otherwise for resolved cases return an inclusive day count (DATEDIFF + 1).
    For active cases the existing behaviour is preserved (you can switch to inclusive there too if you prefer).

    Case Length =
    VAR StartDate =
        IF(
            ISBLANK( 'Cases'[legacycasecreationdate] ),
            'Cases'[Created On],
            'Cases'[legacycasecreationdate]
        )
    VAR IsActive = 'Cases'[statecode] = "Active"
    VAR ResDate = 'Cases'[Resolution Date]
    RETURN
    IF(
        IsActive,
        -- Active: difference between StartDate and now (unchanged behaviour)
        DATEDIFF( StartDate, NOW(), DAY ),
        -- Resolved: handle blanks, same-day, otherwise inclusive DATEDIFF (+1)
        IF(
            ISBLANK( ResDate ),
            BLANK(),
            IF(
                DATEVALUE( StartDate ) = DATEVALUE( ResDate ),
                1,                                          -- same calendar day => 1
                DATEDIFF( StartDate, ResDate, DAY ) + 1    -- inclusive count
            )
        )
    )

    Notes / rationale

    • DATEVALUE(...) is used when comparing StartDate and ResDate so time components donโ€™t make two same-day timestamps look different.

    • DATEDIFF(...)+1 gives an inclusive day count (e.g., start = 1-Jan, end = 2-Jan โ†’ 2 days).

    • If you want inclusive logic for active cases too, change the active branch to DATEDIFF( StartDate, NOW(), DAY ) + 1.

    • If you prefer to always return 0 rather than BLANK() for missing Resolution Date, replace BLANK() with 0.

    โญHope this solution helps you make the most of Power BI! If it did, click 'Mark as Solution' to help others find the right answers.
    ๐Ÿ’กFound it helpful? Show some love with kudos ๐Ÿ‘ as your support keeps our community thriving!
    ๐Ÿš€Letโ€™s keep building smarter, data-driven solutions together!๐Ÿš€ [Explore More]

5 Replies

  • Hi ArchStanton , try this formula.
    Logic Used:
    When the Created On equals the Resolution Date , return 1 day;
    otherwise for resolved cases return an inclusive day count (DATEDIFF + 1).
    For active cases the existing behaviour is preserved (you can switch to inclusive there too if you prefer).

    Case Length =
    VAR StartDate =
        IF(
            ISBLANK( 'Cases'[legacycasecreationdate] ),
            'Cases'[Created On],
            'Cases'[legacycasecreationdate]
        )
    VAR IsActive = 'Cases'[statecode] = "Active"
    VAR ResDate = 'Cases'[Resolution Date]
    RETURN
    IF(
        IsActive,
        -- Active: difference between StartDate and now (unchanged behaviour)
        DATEDIFF( StartDate, NOW(), DAY ),
        -- Resolved: handle blanks, same-day, otherwise inclusive DATEDIFF (+1)
        IF(
            ISBLANK( ResDate ),
            BLANK(),
            IF(
                DATEVALUE( StartDate ) = DATEVALUE( ResDate ),
                1,                                          -- same calendar day => 1
                DATEDIFF( StartDate, ResDate, DAY ) + 1    -- inclusive count
            )
        )
    )

    Notes / rationale

    • DATEVALUE(...) is used when comparing StartDate and ResDate so time components donโ€™t make two same-day timestamps look different.

    • DATEDIFF(...)+1 gives an inclusive day count (e.g., start = 1-Jan, end = 2-Jan โ†’ 2 days).

    • If you want inclusive logic for active cases too, change the active branch to DATEDIFF( StartDate, NOW(), DAY ) + 1.

    • If you prefer to always return 0 rather than BLANK() for missing Resolution Date, replace BLANK() with 0.

    โญHope this solution helps you make the most of Power BI! If it did, click 'Mark as Solution' to help others find the right answers.
    ๐Ÿ’กFound it helpful? Show some love with kudos ๐Ÿ‘ as your support keeps our community thriving!
    ๐Ÿš€Letโ€™s keep building smarter, data-driven solutions together!๐Ÿš€ [Explore More]

  • Hi ArchStanton 

    Try this:

    -- Determine the "end date" depending on the case's state
    VAR _End =
        IF (
            'Cases'[statecode] = "Active",        -- If the case is still active,
            'Cases'[Resolution Date],             -- use its Resolution Date as end date,
            TODAY ()                              -- otherwise, use today's date or NOW() ?
        )
    
    -- Calculate the number of days between creation and end date
    VAR _DaysDiff =
        DATEDIFF (
            COALESCE (                             -- Use first available creation date:
                'Cases'[legacycasecreationdate],    -- Prefer legacy creation date if available,
                'Cases'[Created On]                 -- otherwise use the regular Created On date
            ),
            _End,                                  -- up to the end date determined above
            DAY                                    -- return the difference in days
        )
    
    -- Final return value:
    -- Add 1 day only if creation date equals resolution date; otherwise, return the normal difference
    RETURN
        IF (
            'Cases'[legacycasecreationdate] = 'Cases'[Resolution Date],
            _DaysDiff + 1,                         -- Same-day cases: count as 1 full day
            _DaysDiff                              -- Otherwise, just return the calculated difference
        )
    
  • ArchStanton 

     

    Case Length =
    VAR StartDate = IF(ISBLANK('Cases'[legacycasecreationdate]), 'Cases'[Created On], 'Cases'[legacycasecreationdate])
    VAR EndDate = IF('Cases'[statecode] = "Active", NOW(), 'Cases'[Resolution Date])
    VAR DaysDiff = DATEDIFF(StartDate, EndDate, DAY)
    RETURN
    IF(StartDate = EndDate, DaysDiff + 1, DaysDiff)

     

    If this answer helped, please click Kudos or mark as Solution.
    -Kedar
    LinkedIn: https://www.linkedin.com/in/kedar-pande

    • ArchStanton's avatar
      ArchStanton
      Power Participant

      I've accepted another solution but I did try this and its not correct.

      An Active case is active so it cannot be resolved & have a resolution date

      I'm seeing cases with a created on = resolution date showing as 0 days when it should be 1

      A small amendment and it will work I think