Страницы: 1
RSS
Сводная таблица с текстовыми данными
 
Коллеги, подскажите, как получить сводную таблицу с текстовыми данными?
Видится, что решение элементарное, но не получается.
Пример во вложении, нужно из листа "есть" получить лист "надо".

На вводной задаче 70+ тысяч строк, параметры дублируются
Изменено: li_devender - 18.02.2022 17:01:39
 
а примеры смотрели?
 
Vik_tor, да, честно пыталась, но все закончилось на фразе "Поскольку у нас не бывает нескольких контейнеров в одном и том же городе в один и тот же месяц, то наша сводная выдаст, фактически, не сумму, а номера строк нужных нам контейнеров.", потому что у меня такая ситуация как раз бывает
Изменено: li_devender - 18.02.2022 17:10:59
 
можно попробовать в PQ. а количество типов устройств фиксировано?
 
Да нет, там анархия. В принципе, там ничего не фиксировано, кроме количества столбцов.
Я попробовала познакомиться с понятием "мера", но меня заплевало ошибками :(
Изменено: li_devender - 18.02.2022 22:59:02
 
Плохо, что часть параметров имеет одно и то же название "Тип устройства". Для 2-го и далее кодов/артикулов непонятно куда их "Тип устройства" вставлять...
Если бы все параметры имели свои уникальные названия, то тогда понятно в какой столбец вставлять данные, а так вот у 1-го артикула 6 "Тип устройства", а у других кодов может быть 3 "Тип устройства" или 10 "Тип устройства"  и когда мы начнём работать со вторым кодом и с его "Тип устройства", то непонятно в какой столбец вставлять его "Тип устройства", т.к. у каждого кода могут быть разное количество "Тип устройства"
 
li_devender, могу предложить вот такой вариант (см. файл)
Изменено: New - 20.02.2022 00:25:36
 
li_devender, вариант в PQ. Столбцы Тип устройства1, Тип устройства2 и тд создаются в нужном количестве динамически.
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "Table1" ]}[Content],
  group = Table.Group (
    src,
    { "Артикул", "Наименование", "Параметр" },
    {
      {
        "Значение",
        ( tbl ) =>
          [
            values = tbl[Значение],
            result =
              if tbl[Параметр]{0} = "Тип устройства" then
                Record.FromList ( values, List.Transform ( { 1 .. List.Count ( values ) }, ( x ) => "Тип устройства" & Text.From ( x ) ) )
              else
                values{0}
          ][result]
      }
    }
  ),
  pivot = Table.Pivot ( group, List.Distinct ( group[Параметр] ), "Параметр", "Значение" ),
  recNames = [
    filter        = Table.SelectRows ( src, each ( [Параметр] = "Тип устройства" ) ),
    group         = Table.Group ( filter, { "Артикул" }, { { "Количество", each Table.RowCount ( _ ), Int64.Type } } ),
    maxCountTypes = List.Max ( group[Количество] ),
    recNames      = List.Transform ( { 1 .. maxCountTypes }, ( x ) => "Тип устройства" & Text.From ( x ) )
  ][recNames],
  expand = Table.ExpandRecordColumn ( pivot, "Тип устройства", recNames )
in
  expand
Изменено: surkenny - 20.02.2022 00:34:53
 
Так, наверное, попроще:
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "Table1" ]}[Content],
  group = Table.Group (
    src,
    { "Артикул", "Наименование", "Параметр" },
    {
      {
        "tbl",
        ( tbl ) =>
          if Table.RowCount ( tbl ) = 1 then
            tbl
          else
            [
              addIndex     = Table.AddIndexColumn ( tbl, "Индекс", 1, 1 ),
              addParameter = Table.AddColumn ( addIndex, "Параметр_tmp", each [Параметр] & Text.From ( [Индекс] ) ),
              del          = Table.RemoveColumns ( addParameter, { "Параметр", "Индекс" } ),
              rename       = Table.RenameColumns ( del, { "Параметр_tmp", "Параметр" } )
            ][rename]
      }
    }
  ),
  combine = Table.Combine ( group[tbl] ),
  pivot = Table.Pivot ( combine, List.Distinct ( combine[Параметр] ), "Параметр", "Значение" )
in
  pivot
Изменено: surkenny - 20.02.2022 01:49:12
 
Цитата
написал:
li_devender , могу предложить вот такой вариант (см. файл)
Вариант классный, числовые значения добавленные можно быстро истребить, то есть это по сути не мешает
Но при добавлении полной версии таблицы спотыкается на "            arrResult(iRow, DictHeaders(arrData(i, 3))) = arrData(i, 4)"
Результат out of range

Цитата
написал:
Так, наверное, попроще:
Совсем не получилось перенести с полной таблицей, не может null в тип текст (в таблице все сейчас в типе текст)

Куда копать?
 
li_devender, если макрос работает в вашем примере, но не работает в вашем файле - значит данные отличаются (может там есть пустые строки и т.д.)
Изменено: New - 20.02.2022 14:42:51
 
Цитата
написал:
Попробуйте вставить ваши данные в этот файл и запустить. Макрос покажет какую строку таблицы он не может загрузить
114 строка (из 1523, будет больше)
По факту такая же абсолютно, как все предыдущие (не пустая)
908009270Наушники JBL T110 BlackРегулятор громкостида
 
li_devender, Подправил. Попробуйте
 
Цитата
написал:
Подправил. Попробуйте
Идеально!
Спасибо огромное, спасли от тонны бессмысленной работы  :)  
 
Идеально - это если бы Вы не жали бездумно на кнопку цитирования
Страницы: 1
Наверх