У меня есть набор данных в матричной форме, и я пытаюсь использовать формулу для создания реляционной таблицы из этой матрицы. Вот иллюстрация того, чего я пытаюсь достичь:
Матрица:
| 3/5 | 4/5 | 5/5 |
---------------------------
Player1 | 1 | 0 | 1 |
Player2 | 0 | 1 | 2 |
Player3 | 1 | 1 | 2 |
Цель:
Player | Date | Value |
------------------------
Player1 | 3/5 | 1 |
Player3 | 3/5 | 1 |
Player2 | 4/5 | 1 |
Player3 | 4/5 | 1 |
Player1 | 5/5 | 1 |
Player2 | 5/5 | 2 |
Player3 | 5/5 | 2 |
Смотрите реальные данные здесь:
https://docs.google.com/spreadsheets/d/1DNaoBnYMNbznUoAJahW9-UfGq6LbTG3TXgXPz90bWas
В любом случае, я следовал инструкциям в этом ответе и придумал следующую формулу:
=ArrayFormula(QUERY(VLOOKUP(HLOOKUP(matrix!A3,matrix!A3:A,INT((ROW(matrix!A3:A)-
ROW(matrix!A3))/COLUMNS(matrix!B1:Z1))+1,0),{matrix!A3:T, IF(ROW(matrix!A3:A),
matrix!B1:Z1)}, {SIGN(ROW(matrix!A3:A)), MOD(ROW(matrix!A3:A) -
ROW(matrix!A3), COLUMNS(matrix!B1:Z1)) + {2, 2+COLUMNS(matrix!B1:Z1)} }, 0 ),
"select Col1, Col3, Col2 where Col2 is not null and Col2 != 0 order by
Col3,Col2", 0))`
Это работает, вроде как, но с недостатком в том, что для генерации строк он использует много пустых строк в матричном листе и практически требует, чтобы матричный лист имел по крайней мере numCols * numRows количество строк. Теперь я мог бы просто добавить 3500 пустых строк в матрицу и покончить с этим, но почему-то кажется, что должен быть лучший способ. Есть идеи как его улучшить?