Страницы: 1
RSS
PQ сцепления столбцов с именем столбца Таблицы
 
Уважаемые форумчане подскажите как можно решить задачу

Имеется таблица в PQ размер которой и имена столбцов каждый раз разные



Хотелось бы  объединить сроки таблиц при этом чтоб первое значение имело Название столбца Таблицы по типу:
"Фамилия: Авросинов, Имя: Андрей, Дата начала: 07.01.2022, Дата конец:29.01.2022, Город: Тула"

Попытался сделать кроме "Авросинов, Андрей, 07.01.2022, 29.01.2022, Тула" пока ничего не получилось ((


Код
Text.Combine(
{[Фамилия],
", ",[Имя],  
", ",Text.From([Дата начала]),
", ",Text.From([Дата конец]), 
", ",[Город]})
Изменено: Виктор C - 29.09.2022 18:39:07
 
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Type = Table.TransformColumnTypes(Источник,{{"Фамилия", type text}, {"Имя", type text}, {"Дата начала", type datetime}, {"Дата конец", type datetime}, {"Город", type text}}),
    Add = Table.AddColumn(Type, "Пользовательский", each 
        [a = List.Transform(Record.FieldValues(_), each Text.From(_)),
         b = Table.ColumnNames(Источник),
         c = List.Transform(List.Zip({b,a}), each Text.Combine(_, ": ")),
         d = Text.Combine(c, ", ")
        ][d]
    )
in
    Add
 
Вариант
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    typ = Table.TransformColumnTypes(Источник,{{"Фамилия", type text}, {"Имя", type text}, {"Дата начала", type text}, {"Дата конец", type text}, {"Город", type text}}),
    nms = List.Buffer( Table.ColumnNames(Источник)),
    lst = Table.ToRows( typ),
    f=(x)=>[a = List.Combine( List.Zip({nms, x})),
    b = x&{Text.Combine( a,": ")}][b],
    #"Преобразовано в таблицу" = Table.FromList(lst, f,nms&{"tt"})
in
    #"Преобразовано в таблицу"
 
Спасибо большое @whateverlover ,  @nacimjon, что откликнулись на мою просьбу, чувствую учиться мне до вашего уровня знаний в данных вопросах еще долго.  Все прекрасно работает, непонятно как быть с функцией
Код
Table.TransformColumnTypes(Источник,{{"Фамилия", type text}, {"Имя", type text}, {"Дата начала", type text}, {"Дата конец", type text}, {"Город", type text}})
которая привязана к названию Столбцов Таблицы, возможно ли уйти от привязки к именам Столбцов Таблицы. Дело в том что у меня в работе рамдомные Таблицы как по размеру так и по названию Столбцов как правило разные. Я решил свой вопрос формулами Excel  однако из-за рамдомности Таблиц мое решение не подходит так требуются постоянные правка в формулах что не есть хорошо
Изменено: Виктор C - 30.09.2022 10:09:29
 
Виктор C, если все столбцы в текст - попробуйте так:
Код
Table.TransformColumnTypes ( Источник, List.Transform ( Table.ColumnNames ( Источник ), (x) => { x, type text } ) )
Изменено: surkenny - 30.09.2022 10:18:38
 
Виктор C, можно вообще убрать эту строчку. В результате мы получаем все равно Текст, можно не преобразовывать тип данных в столбцах.
Но если надо все-таки изначальным столбцам задать тип, то надо видеть какие варианты названий столбцов и какие типы данных бывают в столбцах бывают.
Можно сделать так, ЕСЛИ [Название столбца] СОДЕРЖДИТ "дата" ТО "сделать его datetime ИНАЧЕ text.
nacimjon все столбцы привел к тексту, это можно так:
Код
typ = Table.TransformColumnTypes(Источник,  List.Transform(Table.ColumnNames(Источник), each {_, type text}))
Изменено: whateverlover - 30.09.2022 10:43:53
 
Цитата
whateverlover написал:
можно вообще убрать эту строчку. В результате мы получаем все равно Текст
Не совсем так. К примеру, если там числа, то и без типизации они будут числами. И дадут ошибку, если с ними делать какие-то текстовые операции.
По сути, можно в самой обработке перед какими-то действиями преобразовать значения в текст.
У Вас в коде это List.Transform(Record.FieldValues(_), each Text.From(_)). И, по сути, типизация до не нужна.
Но если такого преобразования нет и ТС не особо понимает, куда в обработке это добавить, то проще типизировать перед :)
Изменено: surkenny - 30.09.2022 10:48:25
 
surkenny, ну да, я про свой вариант говорил скорее, у меня Text.From стоит)
 
как вариант уйти типа данных возможно просто в таблицу добавить апостроф ` во все ячейки, а после сцепки данных заменить апостроф на пустоту ""  
 
Виктор C, на каком этапе добавлять этот апостроф? еще непосредственно в excel? а потом после выгрузки на лист снова в excel менять обратно?
Ну можно что угодно понаделать, но уж делать в PQ так делать все  :) там есть Text.From
Изменено: whateverlover - 30.09.2022 10:57:04
 
whateverlover, согласен лишние движения не нужны
Страницы: 1
Наверх