Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

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...
  • OwenAuger's avatar
    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

  • CNENFRNL's avatar
    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"