Страницы: 1
RSS
В столбцах сведения PQ получается одно и тоже число
 
Добрый день! не получается столбец сведения с колонками срок и сумма. В двух колонках получается одно и тоже число. Подскажите, пжлста, что не так ?
Заранее спасибо
 
Смотрите, вы кол-во считаете
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Александр, мне какие параметры поставить?
 
Все зависит от того, что вы желаете получить
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Не агрегировать, выдает ошибку.
 
Хочу, чтобы было 2 столбца сроки и сумма, а в них данные
 
kristina S, вам же уже помогли, принскрин даже сделали, вместо кол-ва, которое у вас стоит, указывайте сумму
последняя строка кода должна быть
Код
= Table.Pivot(#"Замененное значение", List.Distinct(#"Замененное значение"[Атрибут.1]), "Атрибут.1", "Значение", List.Sum)
 
kristina S, Вы не новичок на форуме, додумывать за вас не кто не будет. Покажите как должно получится  
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Все варианты перебрала, суммы, количество, не агрегировать, а получается одно и тоже!
 
kristina S,
Так надо?
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Срок поставки Изделия1", Int64.Type}, {"Сумма поставки Изделия1", type number}, {"Срок поставки Изделия2", Int64.Type}, {"Сумма поставки Изделия2", type number}, {"Срок поставки Изделия3", Int64.Type}, {"Сумма поставки Изделия3", type number}}),
    #"Несвернутые столбцы" = Table.UnpivotOtherColumns(#"Измененный тип", {}, "Атрибут", "Значение"),
    #"Разделить столбец разделителем" = Table.SplitColumn(#"Несвернутые столбцы","Атрибут",Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false),{"Атрибут.1", "Атрибут.2"}),
    #"Измененный тип1" = Table.TransformColumnTypes(#"Разделить столбец разделителем",{{"Атрибут.1", type text}, {"Атрибут.2", type text}}),
    #"Замененное значение" = Table.ReplaceValue(#"Измененный тип1","поставки"," ",Replacer.ReplaceText,{"Атрибут.2"}),
    #"Added Index" = Table.AddIndexColumn(#"Замененное значение", "Индекс", 0, 1),
    #"Integer-Divided Column" = Table.TransformColumns(#"Added Index", {{"Индекс", each Number.IntegerDivide(_, 2), Int64.Type}}),
    #"Сведенный столбец" = Table.Pivot(#"Integer-Divided Column", List.Distinct(#"Integer-Divided Column"[Атрибут.1]), "Атрибут.1", "Значение")
in
    #"Сведенный столбец"

Это стандартная задача, если бы поискали по форуму Table.Pivot, то уверен что каждая вторая тема была бы именно с вашей проблемой.
Идея такая, если есть фиксированные по количеству группы строк, и пивотом надо развернуть их без агрегирования, то сначала надо сочинить идентификаторы, которые будут группировать эти строки. Для варианта когда строк всегда по 2 я вам вариант показал, а так алгоритмов таких вагон и маленькая тележка.
Изменено: PooHkrd - 11.06.2019 12:04:06
Вот горшок пустой, он предмет простой...
 
Мне не нужно суммировать, просто все оставить, как есть.
 
Цитата
kristina S написал:
Мне не нужно суммировать
Вы мой код пробовали? Там ничего не суммируется.
Вот горшок пустой, он предмет простой...
 
Спасибо PooHkrd!  Вы меня так выручили, а то мной уже овладело уныние. Я Вас очень уважаю и люблю.
 
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    ИзмененныйТип = Table.TransformColumnTypes(Источник,{{"Срок поставки Изделия1", Int64.Type}, {"Сумма поставки Изделия1", type number}, {"Срок поставки Изделия2", Int64.Type}, {"Сумма поставки Изделия2", type number}, {"Срок поставки Изделия3", Int64.Type}, {"Сумма поставки Изделия3", type number}}),
    RemovedBlankRows = Table.SelectRows(ИзмененныйТип, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))),
    AddedIndex = Table.AddIndexColumn(RemovedBlankRows, "Индекс", 1, 1),
    UnpivotedOther = Table.UnpivotOtherColumns(AddedIndex, {"Индекс"}, "Атрибут", "Значение"),
    Split = Table.SplitColumn(UnpivotedOther, "Атрибут", Splitter.SplitTextByEachDelimiter({" "," "}, QuoteStyle.Csv)),
    RemovedColumns = Table.RemoveColumns(Split,{"Атрибут.2"}),
    Pivoted = Table.Pivot(RemovedColumns, List.Distinct(RemovedColumns[Атрибут.1]), "Атрибут.1", "Значение"),
    RemovedColumns1 = Table.RemoveColumns(Pivoted,{"Индекс"}),
    Renamed = Table.RenameColumns(RemovedColumns1,{{"Атрибут.3", "Изделие"}})
in
    Renamed
F1 творит чудеса
 
Спасибо Максим! Спасибо всем за помощь. Я живу!!!
 
Доброе время суток.
Коллеги, а так не проще ли?
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    pairs = List.Split(Table.ColumnNames(Source), 2),
    maker = List.Transform(pairs, (item) =>
    let
        colPairs = Table.SelectColumns(Source, item),
        notNull = Table.SelectRows(colPairs, each List.MatchesAny(Record.FieldValues(_), (item) => not (item = null or item = "")) ),
        newColNames = List.Zip({item, {"Срок", "Сумма"}}),
        setNewColNames = Table.RenameColumns(notNull, newColNames),
        getProduct = Text.Range(item{0}, 14)
    in
        Table.AddColumn(setNewColNames, "Изделие", each getProduct)[[Изделие], [Срок], [Сумма]]
    ),
    result = Table.Combine(maker)
in
    result
 
Ошибка моя, не использовала столбец с индексом.
 
Цитата
Андрей VG написал:
Коллеги, а так не проще ли?
Андрей, я все таки адепт полукнопочного подхода, и теми категориями как вы не мыслю. Лично мне не проще. :D
А с точки зрения подходу к решению, как всегда красиво. Спасибо.
Вот горшок пустой, он предмет простой...
 
Андрей VG, у меня был похожий вариант:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Names = List.Transform(List.Split(Table.ColumnNames(Source),2), each Text.Range(_{0},14)),
    Values = List.Split(Table.ToColumns(Source),2),
    toRows = List.Transform(Values,List.Zip),
    toTables = List.Transform(toRows, each Table.FromRows(_, type table [Срок=Int64.Type, Сумма = number])),
    skipEmpty = List.Transform(toTables, each Table.SelectRows(_, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null})))),
    addNames = List.Zip({Names, skipEmpty}),
    addNamesColumn = List.Transform(addNames, each Table.AddColumn(_{1}, "Изделие", (r)=>_{0}, type text)),
    Final = Table.Combine(addNamesColumn)
in
    Final

но для этой задачи он тоже показался семантически сложным :)
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
показался семантически сложным
Зря, вы так Максим. Вот это добротный код. Спасибо!
 
Ещё вариант, до кучи:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    cols = List.Buffer(Table.ColumnNames(Source)),
    types = Table.TransformColumnTypes(Source, List.Transform(cols, each {_, type number})),
    i = Table.AddIndexColumn(types, "i", 0, 1),
    func = (list, label) =>
    [a = Table.SelectColumns(i, list),
     b =  Table.UnpivotOtherColumns(a, {"i"}, "Изделие", label),
     c = Table.TransformColumns(b, {"Изделие", each Text.AfterDelimiter(_, " ", {0, 1})})][c],
    table1 = func(List.Alternate(cols,1,1)&{"i"}, "Сумма"),
    table2 = func(List.Alternate(cols,1,1,1)&{"i"}, "Срок"),
    join = Table.Join(table1,{"i", "Изделие"},table2,{"i", "Изделие"})
in
    join

Понятно, что Table.Join использовать опасно (если не заполнена только сумма или срок - потеряем всю строку), но конкретно для данного датасета отрабатывает корректно.
Страницы: 1
Наверх