I need to pull filtered data from the Original Data Sheet and show the full row information in the Final Sheet.
If an ID has both 'Not Started' and 'Archived' statuses, I should pull 'Not Started' instead of 'Archived'. However, if 'Archived' is the only status for an ID, I need to pull 'Archived'.
Original Table:
| ID | Name | Status | Other Column |
|----|--------|-------------|--------------|
| 1 | Task 1 | Archived | Random Text |
| 2 | Task 2 | Not Started | Random Text |
| 2 | Task 2 | Archived | Random Text |
| 3 | Task 3 | Not Started | Random Text |
| 4 | Task 4 | Archived | Random Text |
| 5 | Task 5 | Archived | Random Text |
| 5 | Task 5 | Not Started | Random Text |
I need to pull filtered data from the Original Data Sheet and show the full row information in the Final Sheet.
If an ID has both 'Not Started' and 'Archived' statuses, I should pull 'Not Started' instead of 'Archived'. However, if 'Archived' is the only status for an ID, I need to pull 'Archived'.
Original Table:
| ID | Name | Status | Other Column |
|----|--------|-------------|--------------|
| 1 | Task 1 | Archived | Random Text |
| 2 | Task 2 | Not Started | Random Text |
| 2 | Task 2 | Archived | Random Text |
| 3 | Task 3 | Not Started | Random Text |
| 4 | Task 4 | Archived | Random Text |
| 5 | Task 5 | Archived | Random Text |
| 5 | Task 5 | Not Started | Random Text |
Try the following formula-
=FILTER(A2:D8,MAP(B2:B8,C2:C8,LAMBDA(x,y,OR(COUNTIFS(B2:B8,x)=1,(COUNTIFS(B2:B8,x)>1)*(y="Not Started")))))
Input:
ID | Name | Status | Other Column |
---|---|---|---|
1 | Task 1 | Archived | Random Text |
2 | Task 2 | Not Started | Random Text |
2 | Task 2 | Archived | Random Text |
3 | Task 3 | Not Started | Random Text |
4 | Task 4 | Archived | Random Text |
5 | Task 5 | Archived | Random Text |
5 | Task 5 | Not Started | Random Text |
Output:
ID | Name | Status | Other Column |
---|---|---|---|
1 | Task 1 | Archived | Random Text |
2 | Task 2 | Not Started | Random Text |
3 | Task 3 | Not Started | Random Text |
4 | Task 4 | Archived | Random Text |
5 | Task 5 | Not Started | Random Text |
This formula should work:
=LET(DataTable, Table1,
NotStarted, FILTER(DataTable,CHOOSECOLS(DataTable,3)="Not Started"),
Archived, FILTER(DataTable, NOT(ISNUMBER(XMATCH(CHOOSECOLS(DataTable,1),CHOOSECOLS(NotStarted,1))))),
SORT(VSTACK(NotStarted, Archived),1))
If you have values in Status other than just "Archived" or "Not Started" you should specify that it's returning "Archived" on the second filter:
=LET(DataTable, Table1,
NotStarted, FILTER(DataTable,CHOOSECOLS(DataTable,3)="Not Started"),
Archived, FILTER(DataTable, NOT(ISNUMBER(XMATCH(CHOOSECOLS(DataTable,1),CHOOSECOLS(NotStarted,1))))*(CHOOSECOLS(DataTable,3)="Archived")),
SORT(VSTACK(NotStarted, Archived),1))
This formula works in case of more than two status values and select the "Archived" row. A2:D8 is the table data range.
=LET(firstcol,CHOOSECOLS(A2:D8,1),
status,CHOOSECOLS(A2:D8,3),
tab,BYROW(A2:D8,LAMBDA(x,TEXTJOIN("|",FALSE,IF((SUM(--(CHOOSECOLS(x,1)=firstcol))>1)*
(CHOOSECOLS(x,3)="Archived"),x,IF(SUM(--(CHOOSECOLS(x,1)=firstcol))=1,x,""))))),
TEXTSPLIT(TEXTJOIN("#",TRUE,tab),"|","#",TRUE))