Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
2 years ago
Solved

Sort by date and provide unique identifier

Hi,

 

My table consists of a range of activities with a huge range of start and end dates. I have written this piece of code to determine which activities are occurring in the 6 weeks (It seems to work but haven't done full testing):

 

if (((DateTime.IsInNextNHours([Start date], 1008) = true) or (DateTime.Date( DateTime.LocalNow() ) >= [Start date] and DateTime.Date( DateTime.LocalNow() ) <= [End date] )) and (DateTime.IsInNextNHours([End date], 1008) = true)) or ((DateTime.Date( DateTime.LocalNow() ) >= [Start date] and DateTime.Date( DateTime.LocalNow() ) <= [End date] )) then "6 week" else "out"

 

What I would ultimately like to do though is then give these activities a unique number that increases by 1, starting with the earliest Start date.

 

For example, the data would look something like:

ActivityStart dateEnd dateWithin 6 weeksUnique ID
Activity one8/3/202415/3/20246 week2
Activity two10/3/202210/4/2022outN/A
Activity three1/3/20243/3/20246 week1
Activity four17/3/202430/3/20246 week3

 

Some help would be wonderful!

 

Cheers,

K

  • Hi Anonymous, try this:

     

    Result:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WckwuySzLLKlUyM9LVdJRstA31jcyMDIBMg1NEWwzhfLU1GylWB0kDSXl+SBVBhBVRhC2CYydX1qCpjyjKBVkgyHCVGP8FqTllxaBNJgj6TDA1BILAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Activity = _t, #"Start date" = _t, #"End date" = _t, #"Within 6 weeks" = _t]),
        #"v1_Changed Type" = Table.TransformColumnTypes(Source,{{"Start date", type date}, {"End date", type date}}, "sk-SK"),
        #"v1_Added Index" = Table.AddIndexColumn(#"v1_Changed Type", "Index", 0, 1, Int64.Type),
        #"v1_Grouped Rows" = Table.Group(#"v1_Added Index", {"Within 6 weeks"}, {{"All", each Table.AddIndexColumn(Table.Sort(_, {"Start date", Order.Ascending}), "Unique ID", 1, 1, Int64.Type) , type table}}),
        v1_CombinedTables = Table.Combine(#"v1_Grouped Rows"[All]),
        v1_ReplaceValues = Table.ReplaceValue( v1_CombinedTables,
          each [Within 6 weeks],
          null,
          (x,y,z)=> if y = "out" then null else x,
          {"Unique ID"} ),
        #"v1_Sorted Rows" = Table.Sort(v1_ReplaceValues,{{"Index", Order.Ascending}}),
        #"v1_Removed Columns" = Table.RemoveColumns(#"v1_Sorted Rows",{"Index"})
    in
        #"v1_Removed Columns"

1 Reply

  • dufoq3's avatar
    dufoq3
    Community Champion

    Hi Anonymous, try this:

     

    Result:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WckwuySzLLKlUyM9LVdJRstA31jcyMDIBMg1NEWwzhfLU1GylWB0kDSXl+SBVBhBVRhC2CYydX1qCpjyjKBVkgyHCVGP8FqTllxaBNJgj6TDA1BILAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Activity = _t, #"Start date" = _t, #"End date" = _t, #"Within 6 weeks" = _t]),
        #"v1_Changed Type" = Table.TransformColumnTypes(Source,{{"Start date", type date}, {"End date", type date}}, "sk-SK"),
        #"v1_Added Index" = Table.AddIndexColumn(#"v1_Changed Type", "Index", 0, 1, Int64.Type),
        #"v1_Grouped Rows" = Table.Group(#"v1_Added Index", {"Within 6 weeks"}, {{"All", each Table.AddIndexColumn(Table.Sort(_, {"Start date", Order.Ascending}), "Unique ID", 1, 1, Int64.Type) , type table}}),
        v1_CombinedTables = Table.Combine(#"v1_Grouped Rows"[All]),
        v1_ReplaceValues = Table.ReplaceValue( v1_CombinedTables,
          each [Within 6 weeks],
          null,
          (x,y,z)=> if y = "out" then null else x,
          {"Unique ID"} ),
        #"v1_Sorted Rows" = Table.Sort(v1_ReplaceValues,{{"Index", Order.Ascending}}),
        #"v1_Removed Columns" = Table.RemoveColumns(#"v1_Sorted Rows",{"Index"})
    in
        #"v1_Removed Columns"