Можно ли использовать ARRAYFORMULA для сгруппированного RANK? - PullRequest
1 голос
/ 28 октября 2019

Я не могу использовать RANK в сгруппированных строках в пределах ARRAYFORMULA.

У меня большой набор данных (≈100.000 строк), где я хочу создать ARRAYFORMULA, который создает другоеRANK для строк, которые имеют один и тот же идентификатор.

Хотя я получаю результат без проблем, перетаскивая формулу (объединяя RANK и FILTER), я не могу скопировать результат с ARRAYFORMULA. Этот файл с фиктивными данными повторяет проблему.

Заранее большое спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 28 октября 2019

Вы можете сделать это с помощью сортировки и подсчета в принципе, но на практике это сложно, потому что функции, которые вы хотели бы использовать, например, Countifs, не подходят для массивов. Вот довольно скучный способ сделать это, когда вы сортируете Vlookup по комбинации Slug и Points, получаете соответствующий номер строки и вычитаете номер строки, который вы получаете из Vlookup, просто совпадающего с Slug:

=ArrayFormula(if(A2:A<>"",vlookup(A2:A&"|"&B2:B,{sort(A2:A&"|"&B2:B,A2:A,true,B2:B,false),row(A2:A)},2,false)-
vlookup(A2:A,{sort(A2:A,A2:A,true),row(A2:A)},2,false)+1,""))

enter image description here

0 голосов
/ 28 октября 2019

также решение:

синтаксис США

=ARRAYFORMULA(IFNA(VLOOKUP(A2:A&"♥"&B2:B, SORT(SPLIT(TRANSPOSE(SPLIT(
 QUERY(TRANSPOSE(QUERY(TRANSPOSE("♦"&UNIQUE(SORT(FILTER(A2:A, A2:A<>"")))&"♥"&
 SPLIT(TRANSPOSE(QUERY(TRANSPOSE(IF(QUERY(QUERY({A2:A, B2:B+(ROW(B2:B)*0.00000001)}, 
 "select count(Col1) where Col1 is not null group by Col1 pivot Col2"), "offset 1", 0)=1, 
 ROUNDDOWN(QUERY(QUERY({A2:A, B2:B+(ROW(B2:B)*0.00000001)}, 
 "select count(Col1) where Col1 is not null group by Col1 pivot Col2"), "limit 0", 1), 0), ))
 ,,999^99)), " ")&"♠"&transpose(SORT(ROW(INDIRECT("A1:A"&COLUMNS(SPLIT(TRANSPOSE(
 QUERY(TRANSPOSE(IF(QUERY(QUERY({A2:A, B2:B+(ROW(B2:B)*0.00000001)}, 
 "select count(Col1) where Col1 is not null group by Col1 pivot Col2"), "offset 1", 0)=1, 
 ROUNDDOWN(QUERY(QUERY({A2:A, B2:B+(ROW(B2:B)*0.00000001)}, 
 "select count(Col1) where Col1 is not null group by Col1 pivot Col2"), "limit 0", 1), 0), ))
 ,,999^99)), " ")))), 1, 0))),,999^99)),,999^99), "♦")), "♠"), 2, 1), 2, 0)))

синтаксис ЕС:

=ARRAYFORMULA(IFNA(VLOOKUP(A2:A&"♥"&B2:B; SORT(SPLIT(TRANSPOSE(SPLIT(
 QUERY(TRANSPOSE(QUERY(TRANSPOSE("♦"&UNIQUE(SORT(FILTER(A2:A; A2:A<>"")))&"♥"&
 SPLIT(TRANSPOSE(QUERY(TRANSPOSE(IF(QUERY(QUERY({A2:A\ B2:B+(ROW(B2:B)*0,00000001)}; 
 "select count(Col1) where Col1 is not null group by Col1 pivot Col2"); "offset 1"; 0)=1; 
 ROUNDDOWN(QUERY(QUERY({A2:A\ B2:B+(ROW(B2:B)*0,00000001)}; 
 "select count(Col1) where Col1 is not null group by Col1 pivot Col2"); "limit 0"; 1); 0); ))
 ;;999^99)); " ")&"♠"&transpose(SORT(ROW(INDIRECT("A1:A"&COLUMNS(SPLIT(TRANSPOSE(
 QUERY(TRANSPOSE(IF(QUERY(QUERY({A2:A\ B2:B+(ROW(B2:B)*0,00000001)}; 
 "select count(Col1) where Col1 is not null group by Col1 pivot Col2"); "offset 1"; 0)=1; 
 ROUNDDOWN(QUERY(QUERY({A2:A\ B2:B+(ROW(B2:B)*0,00000001)}; 
 "select count(Col1) where Col1 is not null group by Col1 pivot Col2"); "limit 0"; 1); 0); ))
 ;;999^99)); " ")))); 1; 0)));;999^99));;999^99); "♦")); "♠"); 2; 1); 2; 0)))

enter image description here

...