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