Forum Discussion
Anonymous
5 years agoNot applicable
Calculated column
I need to create a calculated column that looks at ID, Type and Date in the table below, then: IF [type] = "121 meetings", [Date] switch earliest for "1st 121 meeting", the second earliest date i...
- 5 years ago
If I understand your requirements correctly, the new column is based on the occurrence of "121 meeting" per ID.
If creating a DAX calculated column, something like this should work (returning blank if Data[Type] <> "121 meeting"):
New column DAX = IF ( Data[Type] = "121 meeting", VAR MeetingDates = CALCULATETABLE ( VALUES ( Data[Date] ), ALLEXCEPT ( Data, Data[ID], Data[Type] ) -- Keep filters on ID and Type (must be "121 meeting") ) VAR Occurrence = RANKX ( MeetingDates, 'Data'[Date], , ASC ) VAR Result = SWITCH ( Occurrence, 1, "1st 121 meeting", 2, "2nd 121 meeting", "additional 121 meeting" ) RETURN Result )By the way, for ID=3 should the column be "1st 121 meeting".
Regards,
Owen
- 5 years ago
Hi, Anonymous , you might want to try
Solution CC = VAR __topn = TOPN ( 2, FILTER ( Schedule, Schedule[ID] = EARLIER ( Schedule[ID] ) && Schedule[Type] = EARLIER ( Schedule[Type] ) ), Schedule[Date], ASC ) VAR __1st = MINX ( __topn, Schedule[Date] ) VAR __2nd = MAXX ( __topn, Schedule[Date] ) RETURN SWITCH ( TRUE (), Schedule[Date] = __1st, "1ST", Schedule[Date] = __2nd, "2ND", "Additional" )Personllay, I prefer to accomplish it in PQ; here's the snippet of M code for your reference,
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTI0MlTITU0tycxLB/IMDPUNjPSNDIwMlWJ1sCowRlFghKnAnJACIxQFxpgKLDHcYGlpid+RaAqMCCnAdCReE7AoMCGgwJCQCYZIJsQCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, Type = _t, Date = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Type", type text}, {"Date", type date}}, "Fr"), #"Added Custom" = Table.AddColumn( #"Changed Type", "Solution PQ", each let dates = Table.Group(#"Changed Type", {"ID", "Type"}, {{"ar", each _}}){[ID=[ID], Type=[Type]]}[ar][Date], earliest = List.Min(dates), #"2nd ealiest" = List.MinN(dates, 2){1}? in if [Date]=earliest then "1st" else if [Date]=#"2nd ealiest" then "2nd" else "additional" ) in #"Added Custom"
CNENFRNL
5 years agoCommunity Champion
Hi, Anonymous , you might want to try
Solution CC =
VAR __topn =
TOPN (
2,
FILTER (
Schedule,
Schedule[ID] = EARLIER ( Schedule[ID] ) && Schedule[Type] = EARLIER ( Schedule[Type] )
),
Schedule[Date], ASC
)
VAR __1st = MINX ( __topn, Schedule[Date] )
VAR __2nd = MAXX ( __topn, Schedule[Date] )
RETURN
SWITCH (
TRUE (),
Schedule[Date] = __1st, "1ST",
Schedule[Date] = __2nd, "2ND",
"Additional"
)
Personllay, I prefer to accomplish it in PQ; here's the snippet of M code for your reference,
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTI0MlTITU0tycxLB/IMDPUNjPSNDIwMlWJ1sCowRlFghKnAnJACIxQFxpgKLDHcYGlpid+RaAqMCCnAdCReE7AoMCGgwJCQCYZIJsQCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, Type = _t, Date = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Type", type text}, {"Date", type date}}, "Fr"),
#"Added Custom" = Table.AddColumn(
#"Changed Type",
"Solution PQ",
each
let
dates = Table.Group(#"Changed Type", {"ID", "Type"}, {{"ar", each _}}){[ID=[ID], Type=[Type]]}[ar][Date],
earliest = List.Min(dates),
#"2nd ealiest" = List.MinN(dates, 2){1}?
in
if [Date]=earliest then "1st" else if [Date]=#"2nd ealiest" then "2nd" else "additional"
)
in
#"Added Custom"