Страницы: 1
RSS
Power Query Не могу обратиться к столбцу
 
Здравствуйте, столкнулся с проблемой. Не знаю как ее лучше решить, поэтому обратился к функции List.Generate. Необходимо сравнить текущее значение строки столбца ПК с набором диапазонов из другого заброса и если есть вхождения, то выдать значение ячейки ПК. Но почему то функция выдает ошибку Expression.Error: Поле "ПК" записи не найдено. В языке М не силен. Буду премного благодарен, если вы мне поможете и укажите на ошибку. Файл прилагаю. Запрос называется РасстановкаСлева.

Вот сам код

let
   Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
   #"Удаленные дубликаты" = Table.Distinct(Источник, {"ПК", "Наименование"}),
   #"Добавлен пользовательский объект" = Table.AddColumn(#"Удаленные дубликаты", "Тип", each List.Accumulate (Справочник, [Наименование], (state, current) => Text.Replace (state, current[Найти], current[Заменить]))),
   #"Строки с примененным фильтром1" = Table.SelectRows(#"Добавлен пользовательский объект", each ([Тип] = "ПЧ")),
   #"Замененное значение" = Table.ReplaceValue(#"Строки с примененным фильтром1","+","",Replacer.ReplaceText,{"ПК"}),
   #"Измененный тип" = Table.TransformColumnTypes(#"Замененное значение",{{"Уклон слева", type number}, {"ПЧ слева", type number}, {"ПЧ справа", type number}, {"Уклон справа", type number}, {"ПК", type number}}),
   #"Строки с примененным фильтром" = Table.SelectRows(#"Измененный тип", each ([ПЧ слева] <> null)),
   #"Сгруппированные строки" = Table.Group(#"Строки с примененным фильтром", {"ПК", "Тип"}, {{"Число полос слева", each Table.RowCount(Table.Distinct(_)), Int64.Type}, {"ПЧ слева", each Number.Round(List.Sum([ПЧ слева]), 2), type nullable number}}),
   #"1" = Table.AddColumn(#"Сгруппированные строки", "Категория", each (if (тИсхИнф {0} [Значение]) <> null
  then if (
           ([ПК] >= (тИсхИнф {0} [ПК от]))
            and
           ([ПК] <= (тИсхИнф {0} [ПК до]))
          )
       then (тИсхИнф {0} [Значение])
       else 0
  else 0)
  +
 (if (тИсхИнф {1} [Значение]) <> null
  then if (
           ([ПК] >= (тИсхИнф {1} [ПК от]))
            and
           ([ПК] <= (тИсхИнф {1} [ПК до]))
          )
       then (тИсхИнф {1} [Значение])
       else 0
  else 0)
  +
 (if (тИсхИнф {2} [Значение]) <> null
  then if (
           ([ПК] >= (тИсхИнф {2} [ПК от]))
            and
           ([ПК] <= (тИсхИнф {2} [ПК до]))
          )
       then (тИсхИнф {2} [Значение])
       else 0
  else 0)),
   #"Добавлен пользовательский объект1" = Table.AddColumn(#"1", "Пользовательский", each
   //List.First(
       //List.Sort(
           List.Generate(
               () => [i = 1, state =
                                   //try (
                                           if (
                                               ([ПК] >= (Группировка2 {0} [ПК от]))
                                               and
                                               ([ПК] <= (Группировка2 {0} [ПК до]))
                                              ) = true then [ПК] else null
                                   //)
                                   //otherwise (null)
                     ],
               each [i] <= List.Count (Группировка2[ПК от]),
               each [
                   i = [i] + 1,
                   state =
                           //try (
                                   if (
                                       ([ПК] >= (Группировка2 {[i]} [ПК от]))
                                        and
                                       ([ПК] <= (Группировка2 {[i]} [ПК до]))
                                      ) = true then [ПК] else null
                           //)
                           //otherwise (null)
                    ],
               each [state]
                        )
               //, Order.Descending)
             //)
   )
in
   #"Добавлен пользовательский объект1"
Изменено: disfiguren - 07.03.2021 22:01:28
 
disfiguren, если честно не понятно, что должно получиться на выходе - можете показать на примере пары строк?
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik
На счет пары строк не знаю, но вот попробую объяснить.

Вот абстрактный пример:

Есть несколько диапазонов (такой диапазон находится в запросе Группировка2 и представлен в виде двух столбцов начало и конец) приблизительно выглядит так:

      Начало     Конец
1)    10             20
2)    50             70
3)    150           200

и т.д.

Скажем есть последовательность нарастаемых чисел, допустим от 0 до 300. Она представлена в столбце ПК с неким шагом (шаг может быть произвольным):

     ПК
1)   0
2)   5
3)   10
4)   15
5)   17.3
6)   20
7)   25

и т.д.

Мне нужно найти совпадения, т.е. совпадают ли числа с диапазоном и если совпадают, то вывести значение столбца ПК

Как-то так это должно выглядеть (здесь столбец с диапазоном приведу в качестве наглядного примера):

     ПК         Совпадение       Диапазон
1)   0           null                      null
2)   5           null                      null
3)   10         10                       10-20
4)   15         15                       10-20
5)   17.3      17.3                    10-20
6)   20         20                       10-20
7)   25         null                      null

и т.д.
Изменено: disfiguren - 07.03.2021 22:50:33
 
Доброе время суток.
Вариант
Страницы: 1
Наверх