I am trying to obtain the Index column (highlighted in yellow) that can count the number of times the product ID has iterated through 1 – 6 denoted by the Status Key and the tible is sorted in chronological order.
For detail: The Product ID follows a chronological order denoted by the timestamp and the Status Key can fluctuate back and forth (this a type of approval or rejecting process and the keys indicate the approval stage). I want the index column to count +1 every time the Status key starts to loop 1-6. The starting number will not always start at 1.
Advertisement
Answer
You do not state a clear rule for how to detect when the Status Key starts to increment. But this approach using List.Generate
should be adaptable in case the method I intuit from your data is not correct.
I increment the count by one starting after Status Key = 6
M Code
let
Source = Excel.CurrentWorkbook(){[Name="Products"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{
{"Product ID", Int64.Type}, {"Date", type datetime}, {"Status Key", Int64.Type}}),
//Generate List for Index column
// incrementing after SK = 6
sk = #"Changed Type"[Status Key],
IndexList = List.Generate(
()=>[Index = 1, idx = 0],
each [idx] < List.Count(sk),
each [Index = if sk{[idx]} = 6 then [Index]+1 else [Index],
idx=[idx]+1],
each [Index]
),
//Add Index column to table
integer = Int64.Type,
newTble = Table.FromColumns(
Table.ToColumns(#"Changed Type") & {IndexList},
type table[Product ID = integer, Date = datetime, Status Key = integer, Index = integer]
)
in
newTble