2016-01-28 3 views
0

Я видел это решение у другого пользователя, и на него был дан ответ (Opal). Я пытаюсь немного изменить результаты, но я застрял с пустыми значениями. У меня есть эта таблица необработанных данных (в качестве примера)Google Таблицы Обратный Transpose

ID: id name | d1 | d2 | d3 ...
id1 |/name1/| 23 | 13 | 56
ID2 |/name2/| 67 | 45 |
ID3 |/name3/| 43 |
id4 |/name4/| 78 | 34 | 45
. .

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

id1 |/name1/| дата1 | 23
id1 |/name1/| дата2 | 13
id1 |/name1/| дата3 | 56
ID2 |/name2/| дата1 | 67
ID2 |/name2/| дата2 | 45
ID3 |/name3/| дата1 | 43
id4 |/name4/| дата1 | 78
id4 |/name4/| дата2 | 34
id4 |/name4/| дата3 | 45
.
.

Как это сделать - мое текущее решение выглядит следующим образом, но не работает с пробелами. Я видел решение Opal, которое работало с пустыми пространствами, но не могло понять, как создать столбец даты (столбец 3 в результатах)

ArrayFormula ({transpose (split (query (rept (A2: A & "", COUNTA (C1: 1)) ,, 50000), «»)), транспонировать (split (query (rept (B2: B & «», COUNTA (C1: 1)) ,, 50000), «»)), TRANSPOSE (SPLIT (JOIN («", ARRAYFORMULA (REPT (join ("", (запрос (C1: 1))) & "", COUNTA (A2: A)))), "")), транспонировать (разделять («», запрос (транспонирование (C2: M) ,, 50000)), «»))))

Любые предложения? Это большой набор данных, и я нажимаю ограничения на все строковые функции, предел предел 32 000 и лимит соединения 50 000 Спасибо.

+0

Не могли бы вы добавить ссылку на «Опальное решение», на которое вы ссылаетесь? –

+0

http: // stackoverflow.com/questions/30354693/google-query-spreadsheet-reverse-transpose – user5853237

+0

Другой проблемой, с которой я столкнулся, является ограничение в 50 000 символов в функции соединения. – user5853237

ответ

0

Это довольно хорошая формула. Я уверен, что вы понимаете, что если пробелы равны 0, то формула работает. Я знаю, что это не идеальное решение, но оно работает. В другом использовании листа:

=ArrayFormula({transpose(split(query(rept(Sheet1!A2:A&" ", COUNTA(Sheet1!C1:1)),,50000)," ")),transpose(split(query(rept(Sheet1!B2:B&" ", COUNTA(Sheet1!C1:1)),,50000)," ")),TRANSPOSE(SPLIT(JOIN(" ", ARRAYFORMULA(REPT(join(" ",(query(Sheet1!C1:1)))&" ", COUNTA(Sheet1!A2:A)))), " ")),transpose(split(join(" ",query(transpose(Sheet1!C2:E5+0),,50000)), " "))})

C2:E5+0 заменяет заготовки с 0 для целей формулы. Это не влияет на исходные данные. Это возвращает данные, отформатированные правильно, но с ненужными 0 строками. На другом листе, очистить ненужные строки с:

=query(Sheet2!A:D,"select * where D != 0")

Это возвращает данные, которые вы хотите в правильном формате.