Forum Discussion
Need help with a calculated column that assigns sequential series of numbers for each row group
Hello,
I need a follow-up assistance to this recently answered questsion (vapid128)
I'm trying to reproduce columns [WC#] and [WC Type] below.
[WC#] groups rows into sequential weight check numbers based on a grouping logic for [ValueName]:
- DispenseTipOffsets are grouped in triplets (X,Y,Z) and counted as 1 weight check.
- If the triplet is followed by a row where [ValueName] = "Dispense Weight Chec", the WC# grouping should include rows until [ValueName] does not contain "Flow Rate"
- Rows where [ValueName] = "Dispense Weight Chec" should be grouped as 1 weight check until [ValueName] does not contain "Flow Rate"
[WC Type] labels [WC#] as either Tip Change or Inline. Tip Changes are the DispenseTipOffset triplets followed by the first Dispense Weight Chec and Flow Rate WC# group.
| ValueName | CreatedDateTime | Dispense # | WC# | WC Type |
| DispenseTipXOffset | 1/24/2022 14:18 | 1 | Tip Change | |
| DispenseTipYOffset | 1/24/2022 14:18 | 1 | Tip Change | |
| DispenseTipZOffset | 1/24/2022 14:18 | 1 | Tip Change | |
| DispenseTipXOffset | 3/31/2022 10:25 | 2 | Tip Change | |
| DispenseTipYOffset | 3/31/2022 10:25 | 2 | Tip Change | |
| DispenseTipZOffset | 3/31/2022 10:25 | 2 | Tip Change | |
| DispenseTipXOffset | 3/31/2022 10:49 | 3 | Tip Change | |
| DispenseTipYOffset | 3/31/2022 10:49 | 3 | Tip Change | |
| DispenseTipZOffset | 3/31/2022 10:49 | 3 | Tip Change | |
| Dispense Weight Chec | 3/31/2022 12:08 | 1 | 3 | Tip Change |
| Dispense Weight Chec | 3/31/2022 12:08 | 2 | 3 | Tip Change |
| Dispense Weight Chec | 3/31/2022 12:12 | 3 | 3 | Tip Change |
| Dispense Weight Chec | 3/31/2022 12:12 | 4 | 3 | Tip Change |
| Dispense Weight Chec | 3/31/2022 12:12 | 5 | 3 | Tip Change |
| Dispense Weight Chec | 3/31/2022 12:12 | 6 | 3 | Tip Change |
| Dispense Weight Chec | 3/31/2022 12:12 | 7 | 3 | Tip Change |
| Manual Flow Rate | 3/31/2022 12:12 | 3 | Tip Change | |
| Dispense Weight Chec | 3/31/2022 12:23 | 1 | 4 | Inline |
| Dispense Weight Chec | 3/31/2022 12:23 | 2 | 4 | Inline |
| Dispense Weight Chec | 3/31/2022 12:24 | 3 | 4 | Inline |
| Dispense Weight Chec | 3/31/2022 12:24 | 4 | 4 | Inline |
| Dispense Weight Chec | 3/31/2022 12:24 | 5 | 4 | Inline |
| Manual Flow Rate | 3/31/2022 12:24 | 4 | Inline | |
| Dispense Weight Chec | 3/31/2022 13:08 | 1 | 5 | Inline |
| Dispense Weight Chec | 3/31/2022 13:08 | 2 | 5 | Inline |
| Dispense Weight Chec | 3/31/2022 13:08 | 3 | 5 | Inline |
| Dispense Weight Chec | 3/31/2022 13:08 | 4 | 5 | Inline |
| Dispense Weight Chec | 3/31/2022 13:08 | 5 | 5 | Inline |
| Calculated Flow Rate | 3/31/2022 13:08 | 5 | Inline | |
| Dispense Weight Chec | 3/31/2022 13:47 | 1 | 6 | Inline |
| Dispense Weight Chec | 3/31/2022 13:47 | 2 | 6 | Inline |
| Dispense Weight Chec | 3/31/2022 13:47 | 3 | 6 | Inline |
| Dispense Weight Chec | 3/31/2022 13:48 | 4 | 6 | Inline |
| Dispense Weight Chec | 3/31/2022 13:48 | 5 | 6 | Inline |
| Calculated Flow Rate | 3/31/2022 13:48 | 6 | Inline |
The JMP code for WC# is:
If(Row() == 1, 1,
(Right( Lag( :ValueName, 1 ), 4 ) == "Rate" & :ValueName != "Calculated Flow Rate") | :ValueName == "DispenseTipXOffset", Lag( :WC# ) + 1,
Lag( :WC# )
)
The JMP code for WC Type is:
If( Row() == 1 | :WC# == Lag( :WC# ) + 1,
If(
:ValueName == "DispenseTipXOffset", "Tip Change",
:ValueName == "Dispense Weight Chec", "Inline"
),
Lag( :WC Type )
)
Here are the PBI and data files: onedrive link
A line Number added.
IsRank =var _next = LOOKUPVALUE('Table'[ValueName],'Table'[Line Number],'Table'[Line Number]+1)return[ValueName] = "DispenseTipZOffset" && _next <> "Dispense Weight Chec" || RIGHT([ValueName],4)="Rate"WC#2 =RANKX(FILTER('Table','Table'[IsRank]),[Line Number],,ASC)Rank2 =RANKX(FILTER('Table',[WC#2]=EARLIER('Table'[WC#2])),[Line Number],,ASC)WC Type2 =var FirstValueName =LOOKUPVALUE('Table'[ValueName],[WC#2],[WC#2],[Rank2],1)returnIF(FirstValueName="DispenseTipXOffset","Tip Change","Inline")
2 Replies
- vapid128
Solution Specialist
A line Number added.
IsRank =var _next = LOOKUPVALUE('Table'[ValueName],'Table'[Line Number],'Table'[Line Number]+1)return[ValueName] = "DispenseTipZOffset" && _next <> "Dispense Weight Chec" || RIGHT([ValueName],4)="Rate"WC#2 =RANKX(FILTER('Table','Table'[IsRank]),[Line Number],,ASC)Rank2 =RANKX(FILTER('Table',[WC#2]=EARLIER('Table'[WC#2])),[Line Number],,ASC)WC Type2 =var FirstValueName =LOOKUPVALUE('Table'[ValueName],[WC#2],[WC#2],[Rank2],1)returnIF(FirstValueName="DispenseTipXOffset","Tip Change","Inline")- MorePowerBI
Helper II
Wow - I just want to keep you in my pocket. Thanks for the help!
IsRank =var _next = LOOKUPVALUE(WeightCheck[ValueName],WeightCheck[Index],WeightCheck[Index]+1)return[ValueName] = "DispenseTipZOffset" && _next <> "Dispense Weight Chec" || RIGHT([ValueName],4)="Rate" && RIGHT(_next,4)<>"Rate"
I added the fourth condition so that any consecutive rows with [ValueName] ending with "Rate" are counted towards the same WC#