Как выбрать 10 лучших значений на основе определенных критериев? - PullRequest
0 голосов
/ 31 мая 2019

Я бы хотел выбрать десятку лучших продуктов по доходам за три недели:

enter image description here

Недели меняются автоматически (например, на этой неделе у меня 5/27, но на следующей неделе он автоматически обновится до 6/3).

Мой набор данных автоматически обновляется каждую неделю и выглядит следующим образом:

enter image description here

Я пытался использовать INDEX MATCH и LARGE, но я не мог понять, как это сделать автоматически.

Я ожидаю, что результатом будет формула, которая будет автоматически обновляться каждый раз, когда обновляется мой набор данных, добавляя дополнительный доход за несколько недель.

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 31 мая 2019

B4:

={ARRAYFORMULA(INDIRECT("Dataset!"&ADDRESS(1, MATCH(WEEKNUM(TODAY(), 21),
 WEEKNUM(INDIRECT("Dataset!A1:"&ADDRESS(1, COUNTA(Dataset!A1:1), 4)), 21), 0), 4))),
 ARRAYFORMULA(SUM(INDIRECT("Dataset!"&ADDRESS(2, MATCH(INDIRECT("Dataset!"&
 ADDRESS(1, MATCH(WEEKNUM(TODAY(), 21), WEEKNUM(INDIRECT("Dataset!A1:"&
 ADDRESS(1, COUNTA(Dataset!A1:1), 4)), 21), 0), 4)),
 Dataset!1:1, 0),4)&":"&ADDRESS(ROWS(Dataset!A:A), MATCH(INDIRECT("Dataset!"&
 ADDRESS(1, MATCH(WEEKNUM(TODAY(), 21), WEEKNUM(INDIRECT("Dataset!A1:"&
 ADDRESS(1, COUNTA(Dataset!A1:1), 4)), 21), 0), 4)), Dataset!1:1, 0),4))))}

B5:

={ARRAYFORMULA(INDEX(Dataset!B1:1, MATCH(MAX(MMULT(TRANSPOSE(ROW(
 Dataset!B2:INDEX(Dataset!B2:B, COUNTA(Dataset!A:A)-1)))^0, 
 Dataset!B2:INDEX(Dataset!B2:Z, COUNTA(Dataset!A:A)-1, 
 COUNTA(Dataset!1:1)-1))), MMULT(TRANSPOSE(ROW(
 Dataset!B2:INDEX(Dataset!A2:B, COUNTA(Dataset!A:A)-1)))^0,
 Dataset!B2:INDEX(Dataset!B2:Z, COUNTA(Dataset!A:A)-1, COUNTA(Dataset!1:1)-1)), 0))),
 ARRAYFORMULA(SUM(INDIRECT("Dataset!"&ADDRESS(2, MATCH(INDEX(Dataset!B1:1, 
 MATCH(MAX(MMULT(TRANSPOSE(ROW(
 Dataset!B2:INDEX(Dataset!B2:B, COUNTA(Dataset!A:A)-1)))^0, 
 Dataset!B2:INDEX(Dataset!B2:Z, COUNTA(Dataset!A:A)-1, 
 COUNTA(Dataset!1:1)-1))), MMULT(TRANSPOSE(ROW(
 Dataset!B2:INDEX(Dataset!A2:B, COUNTA(Dataset!A:A)-1)))^0,
 Dataset!B2:INDEX(Dataset!B2:Z, COUNTA(Dataset!A:A)-1, COUNTA(Dataset!1:1)-1)), 0)), 
 Dataset!1:1, 0), 4)&":"&ADDRESS(ROWS(Dataset!A:A), MATCH(INDEX(Dataset!B1:1, 
 MATCH(MAX(MMULT(TRANSPOSE(ROW(
 Dataset!B2:INDEX(Dataset!B2:B, COUNTA(Dataset!A:A)-1)))^0, 
 Dataset!B2:INDEX(Dataset!B2:Z, COUNTA(Dataset!A:A)-1, 
 COUNTA(Dataset!1:1)-1))), MMULT(TRANSPOSE(ROW(
 Dataset!B2:INDEX(Dataset!A2:B, COUNTA(Dataset!A:A)-1)))^0,
 Dataset!B2:INDEX(Dataset!B2:Z, COUNTA(Dataset!A:A)-1, 
 COUNTA(Dataset!1:1)-1)), 0)), Dataset!1:1, 0), 4))))}

B6:

={ARRAYFORMULA(INDIRECT("Dataset!"&ADDRESS(1, MATCH(WEEKNUM(TODAY(), 21),
 WEEKNUM(INDIRECT("Dataset!A1:"&ADDRESS(1, COUNTA(Dataset!A1:1), 4)), 21), 0), 4)))-7,
 ARRAYFORMULA(SUM(INDIRECT("Dataset!"&ADDRESS(2, MATCH(INDIRECT("Dataset!"&
 ADDRESS(1, MATCH(WEEKNUM(TODAY(), 21), WEEKNUM(INDIRECT("Dataset!A1:"&
 ADDRESS(1, COUNTA(Dataset!A1:1), 4)), 21), 0), 4))-7,
 Dataset!1:1, 0),4)&":"&ADDRESS(ROWS(Dataset!A:A), MATCH(INDIRECT("Dataset!"&
 ADDRESS(1, MATCH(WEEKNUM(TODAY(), 21), WEEKNUM(INDIRECT("Dataset!A1:"&
 ADDRESS(1, COUNTA(Dataset!A1:1), 4)), 21), 0), 4))-7, Dataset!1:1, 0), 4))))}

E5:

=ARRAYFORMULA({
 QUERY({Dataset!$A$2:$A, INDIRECT("Dataset!"&
 ADDRESS(2,                      MATCH(F$3, Dataset!$A$1:$1, 0), 4)&":"&
 ADDRESS(ROWS(Dataset!$A2:$A)+1, MATCH(F$3, Dataset!$A$1:$1, 0), 4))}, 
 "order by Col2 desc limit 10", 0),
 QUERY({Dataset!$A$2:$A, INDIRECT("Dataset!"&
 ADDRESS(2,                      MATCH(H$3, Dataset!$A$1:$1, 0), 4)&":"&
 ADDRESS(ROWS(Dataset!$A2:$A)+1, MATCH(H$3, Dataset!$A$1:$1, 0), 4))}, 
 "order by Col2 desc limit 10", 0),
 QUERY({Dataset!$A$2:$A, INDIRECT("Dataset!"&
 ADDRESS(2,                      MATCH(J$3, Dataset!$A$1:$1, 0), 4)&":"&
 ADDRESS(ROWS(Dataset!$A2:$A)+1, MATCH(J$3, Dataset!$A$1:$1, 0), 4))},
 "order by Col2 desc limit 10", 0)})

0

1 голос
/ 31 мая 2019

Хорошо, я сгенерировал некоторые случайные данные до того, как лист был предоставлен, и оказалось, что лучшая неделя была на прошлой неделе:

enter image description here

Исходные данные в листе данных:

enter image description here

Формулы:

B1

=index(Data!B1:1,COUNTA(Data!1:1)-1)
* * D1 тысячу двадцать-один * * тысяча двадцать две
=index(Data!B1:1,COUNTA(Data!1:1)-2)

F1

=ArrayFormula(index(Data!B1:1,match(max(mmult(transpose(row(Data!B2:index(Data!B2:B,counta(A:A)-1)))^0,Data!B2:index(Data!B2:Z,counta(A:A)-1,counta(Data!1:1)-1))),
mmult(transpose(row(Data!B2:index(Data!A2:B,counta(A:A)-1)))^0,Data!B2:index(Data!B2:Z,counta(A:A)-1,counta(Data!1:1)-1)),0)))

A3

=sortn({Data!A2:A,index(Data!B2:Z,0,counta(Data!1:1)-1)},10,0,2,false)

С3 * * один тысяча тридцать один

=sortn({Data!A2:A,index(Data!B2:Z,0,counta(Data!1:1)-2)},10,0,2,false)

E3

=sortn({Data!A2:A,index(Data!B2:Z,0,match(F1,Data!B1:1,0))},10,0,2,false)
...