Страницы: 1
RSS
PQ. Использование списка имен столбцов вместо их перечисления
 
Здравствуйте, уважаемые знатоки... :)

... и, внимание, вопрос - можно ли использовать список имен столбцов вместо их перечисления, в частности, в таких функциях как Table.TransformColumnTypes и List.Sum?

Подозреваю, что да, и если да, то как?... у меня не получается.
Перерыл кучу сайтов, начиная с тутошнего, решения не нашел. Два раза попадались подобные вопросы от других, но ответа на них не дали.
Гуру от Power, чертегодери, Query, помогите...

На всякий случай сделал файлик с применением этих функций с ошибками...
Изменено: BodkhiSatva - 03.09.2020 17:52:30
 
Доброе время суток.
Как-то так
Код
let
    Источник = Table.NestedJoin(Excel.CurrentWorkbook(){[Name="Шапка"]}[Content],{"Партия"},Excel.CurrentWorkbook(){[Name="Расход"]}[Content],{"Партия"}, "Расход", JoinKind.LeftOuter),
    
    СписокШапка = Table.ColumnNames(Excel.CurrentWorkbook(){[Name="Шапка"]}[Content]),
    СписокРасход = Table.ColumnNames(Excel.CurrentWorkbook(){[Name="Расход"]}[Content]),
    Список = List.RemoveItems(СписокРасход, СписокШапка),

    Расход = Table.ExpandTableColumn(Источник, "Расход", Список),

    Сумма = Table.AddColumn(Расход, "Сумма", each List.Sum(Record.FieldValues(Record.SelectFields(_, Список))), type number),
    Тип = Table.TransformColumnTypes(Расход ,List.Transform(Список, each {_, type number}))

in
    Тип
 
BodkhiSatva,
ну а если подумать?
что вы пытались получить в

Код
= Table.AddColumn(Расход, "Сумма", each List.Sum(Список), type number)


Вы передали в функцию которая ждет на входе "non-null values" текстовые значения, о чем вас и информирует результат "Expression.Error: We cannot apply operator - to types Text and Text"

как вариант
Код
= Table.AddColumn(
     Расход, 
     "Сумма", 
     (row) => List.Accumulate(#"Список", 0, (state, current) => state + Record.Field(row,current)), 
     type number
)
 
del
Изменено: buchlotnik - 23.08.2021 18:25:25
Соблюдение правил форума не освобождает от модераторского произвола
 
Андрей VG, большое СПАСИБО

Цитата
DrillPipe написал:
ну а если подумать?что вы пытались получить в
я пытался и получил ответ на свой вопрос, а если подумать, то приведенная функция с ошибкой была использована как  пример того, что я хотел получить.
Спасибо за ответ, но с List.Accumulate мне трудновато, не до конца понимаю как она работает.

Цитата
buchlotnik написал:
просветите - чем список от перечисления отличается?
Ну Вы же поняли о чем речь? Списку можно присвоить имя и использовать его в дальнейшем как указание на все элементы этого списка.
В свете применения функции Table.TransformColumnTypes где используется список списков, каждый вложенный список - это имя столбца с присваемыми ему параметрами, т.е., фактически, перечисление имен столбцов. И если количество и имена столбцов будут динамическими, то эта функция с ранее обозначенными именами будет выдавать ошибку, что исключается при использовании имени динамически изменяемого списка. Хотя, кому я это рассказываю?   8-0  
Цитата
buchlotnik написал:
только среди моих сообщений на тутошнем сайте можно найти десятки примеров использования списков в качестве аргументов функций
buchlotnik - 2146 сообщений... эээ... ну да, конечно... проблема с поиском и, главное, правильной формулировки запроса...
"я не волшебник, я только учусь"(с), и я не программер. Спасибо и Вам, все работает.
К слову, справочная информация по PQ в отдельных закладках в браузере, пользуюсь,
Скрытый текст
 
Цитата
BodkhiSatva написал:
интересно, все гуру сидят в позе лотоса, в смысле такие зануды? или гуру - зануда это тавтология? )))) шутка
Не все) Есть пользователи  с очень высоким уровнем владения различными инструментами и очень долгим сроком пребывания на форуме, но  от которых ни разу назидательного тона замечено не было. А так- да, распространенное явление. :)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
Dyroff написал:
А так- да, распространенное явление.
Ну, началась критика отвечающих :)  А то что ТСы забегают на форум, как в курилку сигаретку стрельнуть - это нормально, так держать! Я так думаю именно поэтому того же Владимира ZVI на форуме почти что и не видно. Да, он не занудствует, но и не отвечает :)
 
Андрей VG,  да неее, Андрей, какая критика.. Владимир- да, его уровню терпения остается только позавидовать.
Возможно, Вы правы, но вот я думаю, что просто интерес пропал и время занятое другими задачами стало более ценно чем время для форума, это нормлаьно.
Я вот смотрю на Вас, например и тоже не понимаю, что заставляет Вас отвечать на вопросы, помогать. Многие это делают в качестве тренировки.. но вот Вы.. для Вас же тут нет нерешаемых задач. И я вот смотрю все время на Вашу помощь и думаю- только бы не пропал интерес к форуму у него :)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
BodkhiSatva,
Power Query: как перестать бояться функционального программирования и начать работать в расширенном редакторе запросов
 
Цитата
Dyroff написал:
что заставляет Вас отвечать на вопросы,
Тренируюсь я :)  От того и ворчу, что абы как невнятно составленный вопрос без примера мешает тренировке. Пришли вы в спортзал, а там тренажёр полуразобран, а консультант: ну, ты же спец собери да занимайся, а то я как-то только устроился, да и вообще меня попросили помочь :)
BodkhiSatva, это камушек не в ваш огород. У вас просто отсутствуют базовые знания, их мышкоклацанием не приобретёшь.
 
Цитата
Андрей VG написал:
Пришли вы в спортзал, а там тренажёр полуразобран, а консультант: ну, ты же спец
Прикольное сравнение :)
В жизни тоже так бывает: приедешь арендовать магазин, а он без ремонта. И тебе говорят: отремонтируй и потом продавай свой товар. А пойдет дело (пойдут продажи) или нет - это уже твои убытки
 
Михаил Л,
Ваш пример уже из управления рисками, бизнес есть бизнес.
Возможно арендодатель понимает, что магазин с ремонтом не протянет долго и вы его вернёте. Он получить обновлённый магазин и сможет зарядить его уже с новой ценой.
в таком случае можно пытаться вести переговоры по разделению рисков- снизить арендную стоимость на какой то период, вернуть часть затрат на ремонт и т.д
 
Цитата
DrillPipe написал:
арендодатель понимает, что магазин с ремонтом не протянет долго и вы его вернёте. Он получить обновлённый магазин и сможет зарядить его уже с новой ценой.
Согласен. Если место гиблое, то это единственная возможность для арендодателя как то обогащаться
 
ох как тут у вас интересно  :)
Цитата
BodkhiSatva написал:
Списку можно присвоить имя
ага, потом он подрастет, пойдет в школу... и вырастет из него список списков  :D
Цитата
BodkhiSatva написал:
и я не программер
я тоже
по делу -
Цитата
BodkhiSatva написал:
каждый вложенный список
ну вы же сами написали - каждый - а в вашем коде как? в примере выше список списков формируется через List.Transform - здесь это наиболее уместно, а в общем виде - почитайте про List.Zip
Цитата
BodkhiSatva написал:
List.Accumulate мне трудновато
советую потренироваться - по крайней мере на вашем примере List.Accumulate отрабатывает быстрее

Цитата
BodkhiSatva написал:
интересно, все гуру сидят в позе лотоса
так вот почему никогда мне не стать гуру -  пузо мешает в позу лотоса сесть   :D
Изменено: buchlotnik - 05.09.2020 11:22:50
Соблюдение правил форума не освобождает от модераторского произвола
Страницы: 1
Наверх