Power Query / Power BI получают данные из другой рабочей книги Excel - PullRequest
1 голос
/ 29 марта 2020

Я пытаюсь объединить листы из двух разных книг с Power Query, и у меня возникают проблемы с этим.

Я не хочу объединять две книги.

Я не хочу создавать отношения или "соединения".

Однако я хочу получить очень точную c информацию для одной рабочей книги, которая имеет только один столбец. Столбец «ID».

Столбец ID содержит строки с буквенными тегами: AB или BE. После этих букв связаны диапазоны sepcifi c цифра c. Как для AB, так и для BE номера вначале варьируются от 0000 до 3000 и от 3000 до 6000.

Таким образом, у меня есть следующие возможности: от AB0000 до AB3000 от AB3001 до AB6000 от BE0000 до BE3000 от BE3001 до AB6000

Каждая категория соответствует указанному элементу c в моем столбце географии, из другой рабочей книги: От AB0000 до AB3000, это ИталияZ От AB3001 до AB6000, это ИталияB От BE0000 до BE3000, это UKY От BE3001 - AB6000, это UKM

. Таким образом, я пытаюсь найти наибольшее число, связанное с первой категорией AB, второй категорией AB, первой категорией BE и второй.

I затем захотите «внести» это число в другой запрос и увеличивать его каждый раз, когда соответствующая страна будет найдена в другой книге. Например:

AB356 - это наибольшее число в первой книге.

Как только будет найден первый «ItalyB», в столбце, кроме того, будет написано «AB357». Как только второй «ItalyB» найден, столбец, кроме записи «AB358».

Вот один столбец рабочего листа: ![input

Вот другой лист с различными странами в географии: input

Вот пример результатов: result

имеют один столбец (география ) я думаю, что это то, к чему я должен стремиться:

Я добавил столбец индекса с началом как единое целое, потому что каждая строка (даже нулевая строка) должна увеличивать любой из четырех соответствующих кодов. enter image description here

Чтобы продолжать двигаться вперед, я также пытался создать какое-то отображение в третьем листе Excel, которое я импортировал в Power BI, но я не уверен, что это хороший путь вперед:

mapping

У меня следующий результат при создании пустого запроса: enter image description here

После исправления я все еще получаю этот результат при создании пустого запроса: enter image description here

1 Ответ

1 голос
/ 30 марта 2020

Это не простой ответ, так как есть много шагов, чтобы добраться до вашего результата. Я выбрал m-запрос из-за сложности.

В PBi нажмите Transform data, теперь вы находитесь в m-query.

  1. Таблица с идентификаторами (я назвал это «HighestID») нуждается в расширении, потому что нам нужно иметь возможность сопоставлять префикс
  2. . Вам нужна таблица сопоставления («GeoMapping»), иначе нет никакой связи между префиксами и геолокацией.
  3. Нам нужен newID в Гео-таблице (которую я назвал "Гео").

Разверните таблицу HighestID.

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

let
    Source = Csv.Document(File.Contents("...\HighestID.csv"),[Delimiter=";", Columns=1, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    #"Changed Type1" = Table.TransformColumnTypes(#"Promoted Headers",{{"ID", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type1", "Prefix", each Text.Middle([ID],0,2), type text),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Number", each Number.FromText(Text.Middle([ID],2,5)))
in
    #"Added Custom1"

Результат: enter image description here

Создать таблицу сопоставления

Нажмите правую кнопку под последней таблицей и нажмите Пустой запрос: enter image description here

Вставьте источник ниже, убедитесь, что имя таблицы слияния совпадает с именем вашей таблицы. Как я уже упоминал, я назвал его HighestID.

let
    Source = #table({"Prefix", "Seq_Start", "Seq_End","GeoLocation"},{{"AB",0,2999,"ItalyZ"},{"AB",3000,6000,"ItalyB"},{"BC",0,299,"UKY"},{"BC",3000,6000,"UKM"}}),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Seq_Start", Int64.Type}, {"Seq_End", Int64.Type}}),
    #"Merged Queries" = Table.NestedJoin(#"Changed Type", {"Prefix"}, HighestID, {"Prefix"}, "HighestID", JoinKind.LeftOuter),
    #"Expanded HighestID" = Table.ExpandTableColumn(#"Merged Queries", "HighestID", {"Number"}, {"Number"}),
    #"Filtered Rows" = Table.SelectRows(#"Expanded HighestID", each [Number] >= [Seq_Start] and [Number] <= [Seq_End]),
    #"Grouped Rows" = Table.Group(#"Filtered Rows", {"Prefix", "Seq_Start", "Seq_End", "GeoLocation"}, {{"NextSeq", each List.Max([Number]) + 1, type number}})
in
    #"Grouped Rows"

Результат: enter image description here

Добавление столбца NextSeq

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

1.Выберите таблицу, щелкните правой кнопкой мыши на Geography и нажмите Группировать по. выберите, как показано ниже: enter image description here

Объединить с таблицей Geomapping, как показано ниже: enter image description here

Развернуть GeoMapping с помощью NextSeq enter image description here

Добавить пользовательский столбец: enter image description here

Удалить ненужные столбцы, поэтому на шаге 4 создается только пользовательский.

Развернуть столбец (все выделенные). Конечный результат всех ваших столбцов, которые у вас были ранее, плюс столбец индекса.

enter image description here

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