Forum Discussion

lyndaGough's avatar
lyndaGough
Frequent Visitor
5 years ago
Solved

Generate New table or calculated columns based on column and rows

I am very new to PowerBi and I am learning how to do the things I want by finding answers to similar issues raised in the forums and on blogs/videos.   I need to work out a period (start date and e...
  • DataInsights's avatar
    5 years ago

    lyndaGough,

     

    This solution uses both calculated columns and a calculated table.

     

    1. Create calculated column [Start Date]:

     

    Start Date = 
    VAR vPerID = 'tbl_007SaferMeCIN – Form Details'[PER ID]
    VAR vMeetingDate = 'tbl_007SaferMeCIN – Form Details'[CALC_001 Date of Meeting]
    VAR vFirstMeetingDateOutcomeYes =
        CALCULATE (
            MIN ( 'tbl_007SaferMeCIN – Form Details'[CALC_001 Date of Meeting] ),
            ALLEXCEPT (
                'tbl_007SaferMeCIN – Form Details',
                'tbl_007SaferMeCIN – Form Details'[PER ID]
            ),
            'tbl_007SaferMeCIN – Form Details'[CALC_002 Safer Me CIN] = "Yes"
        )
    VAR vPrevMeetingDate =
        CALCULATE (
            MAX ( 'tbl_007SaferMeCIN – Form Details'[CALC_001 Date of Meeting] ),
            ALLEXCEPT (
                'tbl_007SaferMeCIN – Form Details',
                'tbl_007SaferMeCIN – Form Details'[PER ID]
            ),
            'tbl_007SaferMeCIN – Form Details'[CALC_001 Date of Meeting] < vMeetingDate
        )
    VAR vPrevMeetingDateOutcome =
        CALCULATE (
            MAX ( 'tbl_007SaferMeCIN – Form Details'[CALC_002 Safer Me CIN] ),
            ALLEXCEPT (
                'tbl_007SaferMeCIN – Form Details',
                'tbl_007SaferMeCIN – Form Details'[PER ID]
            ),
            'tbl_007SaferMeCIN – Form Details'[CALC_001 Date of Meeting] = vPrevMeetingDate
        )
    VAR vCountOutcomeNo =
        COUNTROWS (
            FILTER (
                'tbl_007SaferMeCIN – Form Details',
                'tbl_007SaferMeCIN – Form Details'[PER ID] = vPerID
                    && 'tbl_007SaferMeCIN – Form Details'[CALC_002 Safer Me CIN] = "No"
                    && 'tbl_007SaferMeCIN – Form Details'[CALC_001 Date of Meeting] > vFirstMeetingDateOutcomeYes
                    && 'tbl_007SaferMeCIN – Form Details'[CALC_001 Date of Meeting] < vMeetingDate
            )
        )
    VAR vResult =
        SWITCH (
            TRUE (),
            'tbl_007SaferMeCIN – Form Details'[CALC_002 Safer Me CIN] = "No", BLANK (),
            ISBLANK ( vCountOutcomeNo ), vFirstMeetingDateOutcomeYes,
            vPrevMeetingDateOutcome = "No", vMeetingDate
        )
    RETURN
        vResult

     

    2. Create calculated column [End Date]:

     

    End Date = 
    VAR vMeetingDate = 'tbl_007SaferMeCIN – Form Details'[CALC_001 Date of Meeting]
    VAR vNextMeetingDateOutcomeNo =
        CALCULATE (
            MIN ( 'tbl_007SaferMeCIN – Form Details'[CALC_001 Date of Meeting] ),
            ALLEXCEPT (
                'tbl_007SaferMeCIN – Form Details',
                'tbl_007SaferMeCIN – Form Details'[PER ID]
            ),
            'tbl_007SaferMeCIN – Form Details'[CALC_002 Safer Me CIN] = "No",
            'tbl_007SaferMeCIN – Form Details'[CALC_001 Date of Meeting] > vMeetingDate
        )
    VAR vResult =
        SWITCH (
            TRUE (),
            'tbl_007SaferMeCIN – Form Details'[CALC_002 Safer Me CIN] = "No"
                || ISBLANK ( vNextMeetingDateOutcomeNo ), BLANK (),
            'tbl_007SaferMeCIN – Form Details'[CALC_002 Safer Me CIN] = "Yes", vNextMeetingDateOutcomeNo - 1
        )
    RETURN
       vResult

     

    3. Create calculated table:

     

    New Table = 
    CALCULATETABLE (
        SUMMARIZE (
            'tbl_007SaferMeCIN – Form Details',
            'tbl_007SaferMeCIN – Form Details'[PER ID],
            'tbl_007SaferMeCIN – Form Details'[Start Date],
            'tbl_007SaferMeCIN – Form Details'[End Date]
        ),
        NOT ( ISBLANK ( 'tbl_007SaferMeCIN – Form Details'[Start Date] ) )
    )