Forum Discussion
lyndaGough
5 years agoFrequent Visitor
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...
- 5 years ago
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 vResult2. 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 vResult3. 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] ) ) )
DataInsights
Super User
5 years ago
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] ) )
)
lyndaGough
5 years agoFrequent Visitor
Thank you so much for this. It seems to be working beautifully. Now I will study the code to learn how it works so I can write this style of code in the future.😁