209 похожих чатов

В приложенном файле 73 квартал и перечень выделов (1-6, 9,

11, 12,15,16,32,34,37,40) необходимо, чтобы в каждое значение выдела соответствовало кварталу. Часть я сделала траспонированием те, что были через запятую, а те значения, что через тире 1-6, я сначала добавляю пустые строки, потом с единицы протягиваю до 6. Пожалуйста, подскажите, можно как-нибудь это оптимизировать?

14 ответов

26 просмотров

ну вариант let from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], f=(x)=>Expression.Evaluate("{"&Text.Replace(x,"-","..")&"}",#shared), lst=Table.ToList(from,(x)=>x), tr=List.TransformMany(lst,(x)=>f(List.Last(x)),(x,y)=>List.RemoveLastN(x,1)&{y}), to = Table.FromList(tr,(x)=>x,Value.Type(from)) in to

Marie- Автор вопроса
Marie
Спасибо, сейчас попробую

в следующий раз попробуйте показывать свои попытки в файле

Marie
Хорошо, поняла

может так будет проще для восприятия: let from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], f=(x)=>Expression.Evaluate("{"&Text.Replace(x,"-","..")&"}",#shared), tr = Table.TransformColumns(from,{"выдел",f}), to = Table.ExpandListColumn(tr,"выдел") in to

Andrey Kozlenok
интересный подход

надёжный если вот такое попадётся, например: 1-6,9,11,12-15,16,32-34,37,40

Mikhail Muzykin
надёжный если вот такое попадётся, например: 1-6,9...

Получается, принципиальной разницы, делать replace до evaluate или внутри нет?

Andrey Kozlenok
а, там же текст, добавил Number.From

а если гонять, то наверное так: let from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], f=(x)=>List.Combine(List.Transform(Text.Split(x,","),(x)=>[a=List.Transform(Text.Split(x,"-"),Number.From),b=if List.Count(a)>1 then {a{0}..a{1}} else a][b])), tr = Table.TransformColumns(from,{"выдел",f}), to = Table.ExpandListColumn(tr,"выдел") in to

Mikhail Muzykin
а если гонять, то наверное так: let from = Exc...

визуально не могу найти отличий, но это быстрее ))

Andrey Kozlenok
визуально не могу найти отличий, но это быстрее ))

ааа, прикольно - я не вчитывался - очень много стокав; но разница есть - у меня на одно пространство имён меньше )))

Mikhail Muzykin
ааа, прикольно - я не вчитывался - очень много сто...

let Source = Excel.CurrentWorkbook(){[Name="src"]}[Content], tableTransformColumns = Table.TransformColumns( Source, { "выдел", ( x ) => [ textSplit = Text.Split( x, "," ), listTransform = List.Transform( textSplit, ( y ) => if Text.PositionOf( y, "-" ) = -1 then { Number.From( y ) } else [ textSplit = Text.Split( y, "-" ), numberFrom = List.Transform( textSplit, Number.From ), listValues = { numberFrom{ 0 } .. numberFrom{ 1 } } ][ listValues ] ), listCombine = List.Combine( listTransform ) ][ listCombine ] } ), #"Expanded {0}" = Table.ExpandListColumn(tableTransformColumns, "выдел") in #"Expanded {0}"

Mikhail Muzykin
ааа, прикольно - я не вчитывался - очень много сто...

никогда бы не подумал, что скорость из-за имен так может влиять, тем более так существенно. либо я действительно не вижу разницу по функциям и их порядку, а она есть))

Похожие вопросы

Карта сайта