Объединение двух таблиц с помощью функции INDIRECT в Excel и отображение данных новой таблицы

Объединение двух таблиц с помощью функции INDIRECT в Excel и отображение данных новой таблицы
Объединение двух таблиц с помощью функции INDIRECT в Excel и отображение данных новой таблицы

Вы можете получить таблицы из файлов с помощью Power Query

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

Я покажу пример того, что можно сделать, когда у вас есть две таблицы. В моей рабочей книге я назвал их Table32 и Table33, но вы можете легко это изменить.

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

Чтобы использовать Power Query

  • Выберите ячейку в любой из ваших таблиц данных
  • Data => Get&Transform => from Table/Range
  • Когда откроется редактор PQ Editor: Home => Advanced Editor.
  • Обратите внимание на имя таблицы в двух строках, которые начинаются с Source= и Source1=.
  • Вставьте приведенный ниже M-код вместо того, что вы видите
  • Измените имена таблиц в этих строках на те, что были сгенерированы изначально.
  • Прочитайте комментарии и изучите Applied Steps, чтобы понять алгоритм
let

//Read in first table and get date from column 2 name
    Source = Excel.CurrentWorkbook(){[Name = "Table32"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Member", type text}, {Table.ColumnNames(Source){1}, Int64.Type}}),
    dt1 = Date.From(Table.ColumnNames(Source){1}),

//read in second table and get date from column 2 name
    Source1 = Excel.CurrentWorkbook(){[Name = "Table33"]}[Content],
    #"Changed Type1" = Table.TransformColumnTypes(Source1,{{"Member", type text}, {Table.ColumnNames(Source1){1}, Int64.Type}}),
    dt2 = Date.From(Table.ColumnNames(Source1){1}),

//calculate number of days
    days = Duration.TotalDays(dt2-dt1),

//join the two tables only with names from both
    join = Table.Join(#"Changed Type","Member",#"Changed Type1","Member",JoinKind.Inner),

//compute the total by subtracting the earlier dated column from the later
//then remove the dated columns
    #"Added Custom" = Table.AddColumn(join, "Total", each [2021.09.30]-[2021.08.31]),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"2021.08.31", "2021.09.30"}),

//Add Daily column = Total/number of days between the dates
//and Weekly = 7*Daily
    #"Added Custom1" = Table.AddColumn(#"Removed Columns", "Daily", each [Total]/days),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Weekly", each [Daily]*7),

//set data types and reorder the columns
    #"Changed Type2" = Table.TransformColumnTypes(#"Added Custom2",{{"Daily", Currency.Type}, {"Weekly", Currency.Type}}),
    #"Reordered Columns" = Table.ReorderColumns(#"Changed Type2",{"Member", "Total", "Weekly", "Daily"})
in
    #"Reordered Columns"

  • большая часть кода, но не весь, был сгенерирован пользовательским интерфейсом
  • часть кода относится конкретно к заголовкам столбцов Date в двух таблицах.
  • конечно, можно изменить код, чтобы он ссылался на столбцы в определенных позициях, а не на жестко заданные имена
  • Мои расчеты показывают результаты, отличные от вашего скриншота. Возможно, вы по-разному вычисляете дни? Я вычислил его, используя разницу в заголовках дат в двух колонках. Для вашего примера это было бы 30, что для Питера, я рассчитываю Daily от 90/30=3, в то время как вы показываете 2.89. Но математику легко изменить, как только я пойму правила, которые вы используете.

Прикрепляю к посту несколько видео по теме:

Прикрепленное видео 1 - Примеры использования функции ДВССЫЛ (INDIRECT)

Прикрепленное видео 2 - Как объединить две таблицы и более в одну?, Объединение нескольких таблиц в Excel

Прикрепленное видео 3 - Консолидация (сборка) данных из нескольких таблиц в Excel


NevaDev, 7 февраля 2023 г., 20:57