Страницы: 1
RSS
Power Query Ошибка при применении Столбца сведения, При применении столбца сведения выдает ошибку "Слишком много элементов для выполнения операции"
 
Всем добрый день. Обычная ситуация - есть два столбца в Excel (обработанная выписка из ЕГРП) - в одном название поля, в другом значение (например: в первом площадь,, во втором - 50 м.кв.). Все переведено в формат "текст". Получается всего 27 объектов по 11 разных записей на каждый объект. В итоге, при применении столбца сведения выдает ошибку "Слишком много элементов для выполнения операции". Но объем всего ничего - должно получиться 11 столбцов и 27 строчек. В чем может быть причина? Выкладываю скриншоты, файл Excel возможно содержит коммерческие сведения.
Изменено: Zagadka - 26.09.2022 12:21:00
 
Без файла вряд ли кто-то решиться давать конкретный ответ. Но судя по всему здесь подойдет List.Split, т.к. кол-во строк для каждого блока одинаковые.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Вот файл, после чистки индивидуальных данных.
 
Дмитрий(The_Prist) Щербаков, тут ошибка именно в том, что Вы указали :)
Zagadka, в результирующих «ячейках» сведения изначально список значений, которые попадают под условие текущей строки и столбца. Список может быть пустым {}, с одним значением {«а»}, и несколькими значениями {«а», «б», …}. Зависит от того, сколько значений соответствует пересечению строки и столбца.
Вы указываете «не агрегировать», что, в случае нескольких элементов, даст ошибку.
Чтобы из списка получить текст с перечислением всех элементов списка воспользуйтесь последним аргументом Table.Pivot - агрегирующей функцией.
К примеру, Table.Pivot ( …, (x) => Text.Combine ( x, “;#(lf)” ) ).
Все значения будут разделены ; и переносом строки.
Изменено: surkenny - 26.09.2022 15:02:36
 
surkenny, странно. На похожей таблице с гораздо большим количеством строк, "Столбец сведения" работал без проблем...
P.S. Всё получилось. (x)=> - это мы переменную задали?!)
Изменено: Zagadka - 26.09.2022 15:32:12
 
Zagadka, при чем тут количество строк?
Таблицу
x a
x b
Вы не сведете, потому что Вы не указали PQ, что делать со списком { “a”, “b” }.
Перечитайте мое сообщение. Если для какой-то строки и столбца уже сведенной таблицы будут соответствовать несколько строк плоской, то там будет ошибка. Потому что у Вас несколько значений. С ними нужно что-то сделать: просуммировать, конкатенировать, вывести только первое и тп.
 
Zagadka, глянул Ваш пример.
Я не понял, а какой результат Вы хотите получить от Table.Pivot?

Ошибки в Table.Pivot никакой нет.
Если хотите не агрегированные данные, можете посмотреть на результат:
Код
  #"Сведенный столбец" = Table.Pivot (
    #"Измененный тип1", 
    List.Distinct ( #"Измененный тип1"[Пользовательская.1] ), 
    "Пользовательская.1", 
    "Пользовательская.2", 
    ( x ) => x
  )

Только это вряд ли то, что Вам нужно.
В который раз убеждаюсь, что не зря пример данных и результата нужны :)
Изменено: surkenny - 26.09.2022 16:12:02
 
Цитата
Zagadka написал:
На похожей таблице с гораздо большим количеством строк, "Столбец сведения" работал без проблем...
Очень сомневаюсь, что данные реально "похожи" :)
К сожалению, PQ не умеет думать за Вас.
 
Zagadka, я с большой вероятностью предполагаю, что Вам нужно. Но я не хочу думать за Вас :)
Ну можно же вместо pivot использовать группировку и тупо транспонирование внутри группировки.
Или нельзя? :)
И лучше немного по-другому, но сложнее будет объяснить ;)
Я прошу помогающих притормозить. Мне надоели темы типа ЭТОЙ (уже миллион раз тут группировка и List.Generate внутри разбирались :) ).

Я могу ошибаться, пусть меня модераторы или коллеги поправят, но ТС должен (-а) подумать перед вопросом. Нужно помочь (в идеале - научить) с проблемой. А не решить за ТС.
 
surkenny,  да, мною не тот прием был использован для нужного результата. Что касается применения List.Generate, то на простых задачах теоретическое понимание есть его применения, а вот на практике не хватает опыта...нет комплексного понимания что делать для конечного результата... :oops:  
Изменено: Zagadka - 26.09.2022 18:25:25
 
Zagadka, а как Вы не путаетесь в бесконечно создаваемых столбцах и фильтрах? :)
Надеюсь, суть фильтров и замен понял правильно, проследить логику было тяжело :)
И попробовал понять, что же Вам нужно в результате:
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "Таблица1" ]}[Content],
  typed = Table.TransformColumnTypes ( src, { { "Столбец3", type text }, { "Столбец4", type text }, { "Столбец5", type text } } ),
  filter = Table.SelectRows (
    typed,
    each not Text.Contains ( [Столбец3] ?? ".", "." ) and [Столбец3] <> [Столбец4] and not Text.StartsWith ( [Столбец3], "недвижимости:" )
  ),
  transform = Table.FromRecords (
    Table.TransformRows (
      filter,
      ( r ) =>
        Record.TransformFields (
          r,
          {
            {
              "Столбец3",
              ( x ) =>
                List.Accumulate (
                  {
                    { "Виды разрешенного использования объекта", "Виды разрешенного использования объекта недвижимости:" },
                    { "Виды разрешенного использования объекта недвижимости: недвижимости:", "Виды разрешенного использования объекта недвижимости:" }
                  },
                  x,
                  ( s, c ) => Text.Replace ( s, c{0}, c{1} )
                )
            },
            { "Столбец4", ( x ) => x ?? r[Столбец5] }
          }
        )
    )
  ),
  fillDown = Table.FillDown ( transform, { "Столбец1" } ),
  group = Table.Group (
    fillDown,
    { "Столбец1" },
    { { "tbl", ( t ) => Table.FromList ( { t[Столбец4] }, ( x ) => x, t[Столбец3] ), type table } },
    GroupKind.Local
  ),
  combine = Table.Combine ( group[tbl] )
in
  combine
 
surkenny, не путаюсь, потому что применяемые шаги простые и обработка идет обычно к конкретному столбцу, затем последовательно, к другому, главное внимание. Суть фильтров и замен поняли правильно, результат - тоже.   ;)  
Страницы: 1
Наверх