Как создать сводную таблицу Excel из таблицы с иерархическими столбцами?

В электронной таблице Excel у меня есть таблица со столбцами: «Эпические», «Истории» и «Задачи». Есть еще один столбец для ввода часов для каждой задачи:

| Code | Epic | Stories | Task | Hour |
| 1    | E1   |         |      |      |
| 1.1  |      | St1     |      |      |
| 1.1.1|      |         | Ts1  |10    |
| 1.1.2|      |         | Ts2  |20    |
| 1.2  |      | St2     |      |      |
| 1.2.1|      |         | Ts21 |5     |
| 1.2.3|      |         | Ts22 |2     |
| 2    | E2   |         |      |      |
| 2.1  |      |         |      |      |

Теперь я хочу создать сводную таблицу, чтобы показать сумму по каждому эпику. Например:

| Code | Epic | Hours | 
| 1    | E1   | 37    | 
| 2    | E2   | xyz   | 
|

Как мне этого добиться?

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам необходимо нормализовать исходную таблицу так, чтобы каждая строка содержала все значения. Вы можете скопировать значения в пробелы из строк выше несколькими щелчками мыши.

  • Выберите стол
  • нажмите F5 или используйте Ctrl G или Goto
  • нажмите Специальный
  • Отметьте «Пробелы» и нажмите «ОК».
  • введите знак = и нажмите стрелку вверх. Это создает формулу, которая ссылается на ячейку выше.
  • удерживайте клавишу Ctrl и нажмите Enter. Теперь эта формула находится во всех ранее пустых ячейках.
  • Скопируйте таблицу еще раз и вставьте ее в качестве значений.

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

Теперь вы можете построить сводную таблицу на основе этой исходной таблицы, суммировать часы и агрегировать по Epic.

Нормализация на самом деле не вариант... данные, которыми я поделился, представляют собой очень упрощенную версию, на самом деле там есть около 20 других столбцов с разными часами, и я не могу скопировать все повсюду. Кроме того, разным командам может потребоваться добавить больше строк и эпиков, а эта таблица очень динамична. В любом случае спасибо за ответ.

xbmono 14.03.2024 04:12

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

teylyn 14.03.2024 05:02
Ответ принят как подходящий

В наши дни существует множество способов достижения желаемых результатов. Если вы используете Modern Versions Excel, один из таких способов — использование Power Query или новых функций Excel, что делает его относительно простым.

• Использование GROUPBY(), если применимо -> работает с MS365 ExclusivelyBeta Version


• Формула, используемая в ячейке G1

=VSTACK({"Code","Epic","Hours"},
 GROUPBY(HSTACK(TEXTBEFORE(A2:A10&".","."),
 SCAN(,B2:B10,LAMBDA(x,y,IF(y = "",x,y)))),E2:E10,SUM,,0))

Или, если у кого-то нет доступа к GROUPBY() во время написания формулы, необходимо включить Office Insiders, если вы не хотите включать, то можно также попробовать следующее:

=LET(
     _Data, A2:E10,
     _Code, TEXTBEFORE(TAKE(_Data,,1)&".","."),
     _Epic, SCAN(,INDEX(_Data,,2),LAMBDA(x,y,IF(y = "",x,y))),
     _Uniq, UNIQUE(HSTACK(_Code,_Epic)),
     HSTACK(_Uniq, TAKE(MAP(_Uniq,LAMBDA(x,SUM(--(x=HSTACK(_Code,_Epic))*TAKE(_Data,,-1)))),,1)))

• Или используйте POWER QUERY, доступный в Windows Excel 2010+ и Excel 365 (Windows) --> Это однократный подход, поэтому вам не нужно увеличивать диапазон или диапазоны, только при добавлении новых данных в исходный источник необходимо обновить импортированную таблицу, и она обновится. в пределах нескольких.


Чтобы использовать Power Query, выполните следующие действия:

  • Сначала преобразуйте исходный диапазон в таблицу и назовите ее соответствующим образом. Для этого примера я назвал ее Table1.

  • Затем откройте пустой запрос на вкладке Data ​​--> Get & Transform Data --> Get Data --> From Other Sources --> Blank Query.

  • Приведенное выше позволяет открыть окно Power Query, теперь из вкладки Home --> Advanced Editor --> И вставьте следующее M-Code, удалив все, что вы видите, и нажмите Done

let
    Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
    #"Filled Down" = Table.FillDown(Source,{"Epic"}),
    #"Extracted Text Before Delimiter" = Table.TransformColumns(#"Filled Down", {{"Code", each Text.BeforeDelimiter(Text.From(_, "en-US"), "."), type text}}),
    #"Grouped Rows" = Table.Group(#"Extracted Text Before Delimiter", {"Code", "Epic"}, {{"Hours", each List.Sum([Hour]), type nullable number}})
in
    #"Grouped Rows"


  • Наконец, чтобы импортировать его обратно в Excel --> Нажмите Close & Load или Close & Load To --> Первый клик создаст New Sheet с требуемым результатом, а второй предложит вам окно с вопросом, куда поместить результат.

Это мило! Похоже, что запрос мощности — это именно то, что мне нужно, и ваш запрос сработал с первой попытки… спасибо!

xbmono 14.03.2024 04:09

Просто вопрос: используя PQ, автоматически обновляется ли результат, если мы вносим изменения в таблицу? Кажется, это не так, или я что-то упускаю?

xbmono 14.03.2024 04:26

Да, на самом деле вам нужно щелкнуть правой кнопкой мыши импортированную таблицу из PQ, чтобы обновить ее. Я уже упоминал об этом.

Mayukh Bhattacharya 14.03.2024 04:32

Ой, извини... для меня это что-то новое, и я пропустил это... спасибо

xbmono 14.03.2024 04:34

Никаких беспокойств. Извините за поздний ответ, на сегодня я закончил.

Mayukh Bhattacharya 14.03.2024 04:43

Другие вопросы по теме