Страницы: 1
RSS
Найти повторы в строке PQ
 
Всем привет!
В таблице есть 4 столбца К1, К2, К3, К4, нужно найти повторы в строке и вывести в отдельный столбец, в примере реализовал формулами
 
Доброе время суток.
Вариант
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Welds"]}[Content],
    typed = Table.TransformColumnTypes(Source, List.Transform(Table.ColumnNames(Source), each {_, Text.Type})),
    useColNames = List.Range(Table.ColumnNames(typed), 4),
    addRepead = Table.AddColumn(typed, "Repeat", (rec) =>
    let
        items = Record.ToTable(Record.SelectFields(rec, useColNames)),
        group = Table.Group(items, {"Value"}, {"count", each Table.RowCount(_)}),
        repeated = Table.SelectRows(group, each [count] > 1)
    in
        Text.Combine(repeated[Value], ";")
    )
in
    addRepead
 
Еще вариант
Код
= Table.AddColumn(Source, "a", each 
                              let a=List.Skip(Record.FieldValues(_),4),
                                  b=List.Count(a),
                                  c=List.Count(List.Distinct(a)) 
                              in if b=c then null else Text.Combine(List.Modes(a),"=="))
 
Андрей, спасибо!
Михаил, спасибо! Ваш код покороче, не посмотрел, что это часть кода)
Я тут совсем запутался, грешным делом подумал, что код Михаила нужно заменить, частью кода Андрея, со строчки  "Table.AddColumn", но в и тоге пришёл к тому, что это и есть все строки.
Код Михаила покороче, хотя по времени отрабатываю одинаково, и так как код проще (Андрей без обид, но для моего понимания ваш код очень сложный) я конечно его использовал, можете помочь разобраться:
Код
addRepead = Table.AddColumn(#"Объединенные столбцы3", "a", each 
                              let a=List.Skip(Record.FieldValues(_),4), //пропускаем первые четыре столбца
                                  b=List.Count(a), // выводим число элементов в списке
                                  c=List.Count(List.Distinct(a)) // выводим число элементов в списке, без повторов
                              in if b=c then null else Text.Combine(List.Modes(a),"==")) // если b<>с соединяем повторы, тут я запутался!
Изменено: adamm - 11.09.2020 10:29:01
 
Код
in if b=c then null else Text.Combine(List.Modes(a),"==")) // если b<>c то находим наиболее часто встречающиеся значения и объединяем с разделителем "=="
Раз столбца четыре, то варианты могут быть такие 1-1-1-1, 2-1-1, 2-2, 3-1. То есть больше двух значений для объединения не будет. Если бы столбцов было шесть, то формула при варианте 3-2-1 не сработала бы (показала бы только значение, которое встречается три раза)
 
Спасибо!
 
del
Изменено: buchlotnik - 23.08.2021 18:11:28
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
adamm написал:
Андрей без обид
А зачем нме обижаться? Вы же уже не молодь. Вот из-за них бывает обидно - нафига налоги на их обучение в школе плачу - толку же никакого. С другой стороны, иначе совсем были бы дикими :)
 
Цитата
Андрей VG написал:
нафига налоги на их обучение в школе плачу
Верите - нет, но я в этом году 11 класс закончил)
 
Цитата
Михаил Л написал:
в этом году 11 класс закончил
Отлично. Вы ж не попадаете под категорию
Цитата
Андрей VG написал:
толку же никакого.
Толк есть! :)
 
Цитата
Михаил Л написал:
11 класс закончил
Теперь я попадаю под другие категории. Могу и на официальную работу устроиться и гринкарту разыгрывать
ps. На работу то я уже устроился
Изменено: Михаил Л - 12.09.2020 08:55:40
 
Андрей VG,
Молодежь не хуже и не лучше , чем была раньше. Как обычно - просто они другие. Наверное то же самое говорили про каждое поколение:)
А вот что я заметил - в школе отбивают тягу к знаниям и развитию, и совсем отсутствует какое-то переживание за своих учеников. У меня сын  в этом году закончил 11. Не поверите  за весь старшекласный период ни одного сочинения они не писали. Изложения, диктанты , какие-то презентации по литературе - но ни одного настоящего сочинения. Для меня это странно.
Если бы налоги доходили до молодежи правильно - наверное было бы по другому. А так все сводиться к передачи  минимальных знаний (что бы набрать 30 баллов на ЕГЭ по предмету)), а получение остальных скилов через походы к репетиторам...

З.Ы
Помните?
https://m.youtube.com/watch?v=XzFSQcxMBFA
Изменено: DrillPipe - 12.09.2020 09:59:35
 
Цитата
DrillPipe написал:
чем была раньше
ну, что такое носители легендарного советского образования, я помню :)  И не склонен преувеличивать, что его носители хотели усвоить больше, чем современные выпускники. Но! Поворчать, как налогоплательщик, я могу только на нынешнюю молодежь. :)
 
Цитата
buchlotnik написал:
если ставить цель покороче
[QUOTE]а так еще на 2 символа короче :)
Код
Table.AddColumn(Excel.CurrentWorkbook(){[Name="Welds"]}[Content],"doubles",each let a=List.Skip(Record.FieldValues(_),4)in Text.Combine(List.Distinct(List.Difference(a,List.Distinct(a))),"; "))
F1 творит чудеса
 
del
Изменено: buchlotnik - 23.08.2021 18:11:50
Соблюдение правил форума не освобождает от модераторского произвола
Страницы: 1
Наверх