Как я могу переформатировать «матричный отчет» в Google Таблицах в чистый лист данных?

#google-sheets #google-sheets-formula

Вопрос:

Извините за неточное название, я не уверен, как называется этот формат. Я получил «исследовательскую базу данных» в формате, который вы видите ниже, и мне нужно преобразовать ее (и еще десятки подобных ей) в удобный формат.

Простыни выглядят так:

Компания Отчет 1 Отчет 2 Отчет 3 Отчет 4
Компания 1 46.8 -0.2 0.2
Компания 2 45.7 -0.3

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

Компания Сообщить Счет
Компания 1 Отчет 1 46.8
Компания 1 Отчет 2 -0.2
Компания 1 Отчет 3
Компания 2 Отчет 4 0.2
Компания 2 Отчет 1 45.7
Компания 2 Отчет 3 -0.3
Компания 2 Отчет 4

Ничего страшного, если в итоге мы получим строки без значения, их достаточно легко очистить.

Образец листа здесь

Ответ №1:

Во-первых, вы захотите удалить то, что кажется тестовыми данными, из A9:C вашего листа «Данные как есть».

После этого удалите все, что у вас в настоящее время есть в листе результатов (или создайте новый пустой), и поместите следующую формулу в A1:

=ArrayFormula({"Company","Report","Score";SPLIT(QUERY(FLATTEN(IF('Data as Is'!B2:E="",,'Data as Is'!A2:Aamp;"~"amp;'Data as Is'!B1:E1amp;"~"amp;'Data as Is'!B2:E)),"Select * WHERE Col1 Is Not Null"),"~")})

Это приведет к созданию ваших заголовков и всех результатов, при этом строки без результатов уже будут удалены.

Оттуда вы можете форматировать заголовки и данные по своему усмотрению.

Комментарии:

1. Блестяще! Это прекрасно!

2. Рад, что это соответствовало вашим потребностям.

Ответ №2:

Попробуйте это, где вкладка-ваши данные

 =query({
arrayformula(vlookup((roundup(flatten(sequence(columns(tab),rows(tab),1,1)/columns(tab)))),{flatten(sequence(columns(tab),rows(tab),1,1)),flatten(transpose(tab))},2,0)),
arrayformula(vlookup(mod(flatten(sequence(rows(tab),columns(tab),0,1)),columns(tab)) 1,{flatten(sequence(rows(tab),columns(tab),1,1)),flatten(tab)},2,0)),
flatten(tab)
},"select * where Col1 is not null and Col2 is not null and Col3 is not null",0)