Страницы: 1
RSS
Подсчет количества номеров писем на одного адресата посредством PQ
 
Доброго времени суток!

Знатоки! Подскажите как решить задачку с помощью PQ: имеется таблица с 2-мя столбцами в одном указан адресат, а в другом Номер письма. На одного адресата может быть отправлено несколько писем и в данном случае номера этих писем различаются по хвостику и указываются через запятую. В итоге необходимо считать все отправленные письма и сделать это возможно по номерам указанным в столбце Номер. Если указано 270-06С-УРМ/1024-18 - это как одно письмо, а если указано 270-06С-УРМ/1024-19,31,30 - это считать как три письма.

Как можно реализовать данную задачу при помощь PQ?

Спасибо!
 
Примерно так
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Дублированный столбец" = Table.DuplicateColumn(Источник, "Номер", "Копия Номер"),
    #"Разделить столбец по разделителю" = Table.SplitColumn(#"Дублированный столбец", "Копия Номер", Splitter.SplitTextByEachDelimiter({"-"}, QuoteStyle.Csv, true), {"Копия Номер.1", "Копия Номер.2"}),
    #"Разделить столбец по разделителю1" = Table.ExpandListColumn(Table.TransformColumns(#"Разделить столбец по разделителю", {{"Копия Номер.2", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Копия Номер.2"),
    #"Сгруппированные строки" = Table.Group(#"Разделить столбец по разделителю1", {"Адресат", "Номер"}, {{"Количество", each Table.RowCount(_), type number}})
in
    #"Сгруппированные строки"
Изменено: Dyroff - 27.03.2019 14:31:25
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
у меня так получилось
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Разделить столбец по разделителю" = Table.SplitColumn(Источник, "Номер", Splitter.SplitTextByEachDelimiter({"-"}, QuoteStyle.Csv, true), {"Номер.1", "Номер.2"}),
    #"Разделить столбец по разделителю1" = Table.ExpandListColumn(Table.TransformColumns(#"Разделить столбец по разделителю", {{"Номер.2", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Номер.2"),
    #"Вычисленное количество значений" = List.NonNullCount(#"Разделить столбец по разделителю1"[Номер.2]),
    #"Преобразовано в таблицу" = #table(1, {{#"Вычисленное количество значений"}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Преобразовано в таблицу", "Номер", each "Итого количество"),
    #"Переименованные столбцы" = Table.RenameColumns(#"Добавлен пользовательский объект",{{"Номер", "Адресат"}, {"Column1", "Номер"}}),
    #"Добавленный запрос" = Table.Combine({Источник, #"Переименованные столбцы"})
in
    #"Добавленный запрос"
 
вариант формулой (массивная)
Код
=СУММ(ДЛСТР(E4:E7)-ДЛСТР(ПОДСТАВИТЬ(E4:E7;",";"")))+СЧЁТЗ(E4:E7)
 
Можно еще так:
Код
let
    Источник = Table.Buffer( Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content] )
in
    Table.InsertRows( Источник, Table.RowCount(Источник), {[Адресат = "Итого писем", Номер = List.Sum( Table.TransformColumns(Источник, {{"Номер", each List.Count( Text.Split( Text.AfterDelimiter(_, "-", {0, RelativePosition.FromEnd}), ",") ), type text}})[Номер]) ]} )
Изменено: PooHkrd - 27.03.2019 15:32:48
Вот горшок пустой, он предмет простой...
 
Ещё вариант:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    count = Table.AddColumn(Source, "count", each List.Count(Splitter.SplitTextByDelimiter(",")([Номер])))
in
    count
 
Большое спасибо за помощь! Попробую и отпишусь...)  
 
А если нужно чтобы эти файлы брались из папки и их количество и имя может быть различное, но формат единый.
 
naa700, какие ЭТИ? какое имя?
Приводите пример. Вот у Вас в голове родилась мысль, Вы ее коротенько описали и думаете, что мы тоже ее поймем?) я вот не понимаю о чем Вы говорите
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
naa700, посмотрите в приемах
 
Dyroff, прошу прощения если не понятно... Имею ввиду такие же файла как в примере только без привязки к имени файла и кол-во этих файлов может меняться.
 
Цитата
naa700 написал:
прошу прощения если не понятно...
Вот без обид, когда вы что-то пишите словами - почти всегда не понятно. Как только прилагаете пример почти всегда сразу все проясняется.
Попробуйте также и с новым условием.
Вот горшок пустой, он предмет простой...
 
Вариант с добавлением пользовательского столбца:
Код
Text.Length([Номер])-Text.Length(Text.Replace([Номер],",",""))+1
Изменено: Tefra - 28.03.2019 10:14:12
 
Цитата
Tefra написал:
Text.Length
Если по такой логике (хорошая идея), то можно еще так:
Код
List.Count( Text.PositionOfAny([Номер], {","}, Occurrence.All) ) + 1

чтобы не заменять ничего, а сразу посчитать количество вхождений.
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх