Это не простой ответ, так как есть много шагов, чтобы добраться до вашего результата. Я выбрал m-запрос из-за сложности.
В PBi нажмите Transform data, теперь вы находитесь в m-query.
- Таблица с идентификаторами (я назвал это «HighestID») нуждается в расширении, потому что нам нужно иметь возможность сопоставлять префикс
- . Вам нужна таблица сопоставления («GeoMapping»), иначе нет никакой связи между префиксами и геолокацией.
- Нам нужен 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"
Результат:
Создать таблицу сопоставления
Нажмите правую кнопку под последней таблицей и нажмите Пустой запрос:
Вставьте источник ниже, убедитесь, что имя таблицы слияния совпадает с именем вашей таблицы. Как я уже упоминал, я назвал его 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"
Результат:
Добавление столбца NextSeq
Это сложный вопрос, потому что, когда я дам вам только код, я боюсь, что он не сработает, поэтому я дам вам необходимые шаги.
1.Выберите таблицу, щелкните правой кнопкой мыши на Geography и нажмите Группировать по. выберите, как показано ниже:
Объединить с таблицей Geomapping, как показано ниже:
Развернуть GeoMapping с помощью NextSeq
Добавить пользовательский столбец:
Удалить ненужные столбцы, поэтому на шаге 4 создается только пользовательский.
Развернуть столбец (все выделенные). Конечный результат всех ваших столбцов, которые у вас были ранее, плюс столбец индекса.