В электронной таблице 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 |
|
Как мне этого добиться?


Вам необходимо нормализовать исходную таблицу так, чтобы каждая строка содержала все значения. Вы можете скопировать значения в пробелы из строк выше несколькими щелчками мыши.
Вам следует удалить все строки, которые не содержат значений в столбце часов, поскольку они не добавляют в таблицу никакой полезной информации.
Теперь вы можете построить сводную таблицу на основе этой исходной таблицы, суммировать часы и агрегировать по Epic.
Ну тогда из него сводную таблицу не создать. Вы можете попробовать загрузиться в Power Query, очистить его и загрузить обратно в другой лист или модель данных, а затем создать сводную таблицу, но если вы хотите свести данные, вам придется избавиться от всех пустых ячеек.
В наши дни существует множество способов достижения желаемых результатов. Если вы используете 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.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"
Это мило! Похоже, что запрос мощности — это именно то, что мне нужно, и ваш запрос сработал с первой попытки… спасибо!
Просто вопрос: используя PQ, автоматически обновляется ли результат, если мы вносим изменения в таблицу? Кажется, это не так, или я что-то упускаю?
Да, на самом деле вам нужно щелкнуть правой кнопкой мыши импортированную таблицу из PQ, чтобы обновить ее. Я уже упоминал об этом.
Ой, извини... для меня это что-то новое, и я пропустил это... спасибо
Никаких беспокойств. Извините за поздний ответ, на сегодня я закончил.
Нормализация на самом деле не вариант... данные, которыми я поделился, представляют собой очень упрощенную версию, на самом деле там есть около 20 других столбцов с разными часами, и я не могу скопировать все повсюду. Кроме того, разным командам может потребоваться добавить больше строк и эпиков, а эта таблица очень динамична. В любом случае спасибо за ответ.