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

Добрый день. К заметке из "танка" про "суммесли" есть пара вопросов: 1.

Как превратить суммесли в суммеслимн (сам придумал только на этапе после Table.Group выполнять Table CombineColumns получая таким образом одномерный ключ, который потом используется в Record.Field)

2. Есть ли возможность ещё сильнее сэкономить производительность, чем использование в итоге функций Table.AddColumn + Record.Field? (они же все равно перебирают большой массив?)

(пример прям в самой записи есть)

https://t.me/pbi_pq_from_tank/193

19 ответов

36 просмотров

2. О каком переборе идёт речь? Там прямое обращение к полю 1. Тут в группе пару раз выкладывал вариант с записью записей - как вариант В остальном - см. закреп

Pestunovich-Konstantin Автор вопроса

А в записи не ищется поле перебором? Тогда второй вопрос снят.

Pestunovich Konstantin
А в записи не ищется поле перебором? Тогда второй ...

Я неоднократно указывал, что на скорость принципиально влияет длина списка, но не число полей в записи

сколько условий вы в реальности перебираете?

Pestunovich-Konstantin Автор вопроса
Mikhail Muzykin
сколько условий вы в реальности перебираете?

Не менее 8, плюс будет несколько столбцов (~5) содержащих промежуточные суммы для разного набора условий.

Pestunovich-Konstantin Автор вопроса
Mikhail Muzykin
сколько условий вы в реальности перебираете?

Сейчас задача решена последовательными Join что очевидно удручает пользователей.

Pestunovich-Konstantin Автор вопроса
Mikhail Muzykin
чем удурчает?

Производительностью, запрос висит минут 5.

мне сравнивать не с чем, поэтому вариант строго по примеру: let from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], typ = Table.TransformColumnTypes(from,{"Марка продукта", type text}), lst = List.Buffer(List.RemoveLastN(Table.ColumnNames(typ),1)), g=(y,z)=>(x)=>Record.Field(z,Text.Combine(Record.FieldValues(Record.SelectFields(x,y)),"@")), f=(tbl,col)=>[ lst1=List.Buffer(List.RemoveItems(lst,{col})), cmb=Table.CombineColumns(tbl,lst1,(x)=>Text.Combine(x,"@"),"Name"), gr=Table.Group(cmb,"Name",{"Value",(t)=>List.Sum(t[тн])}), dict=Record.FromTable(gr), add=Table.AddColumn(tbl,"без "&col,g(lst1,dict))][add], to=List.Accumulate(lst,typ,f) in to

Pestunovich-Konstantin Автор вопроса
Mikhail Muzykin
мне сравнивать не с чем, поэтому вариант строго по...

А List.Buffer зачем нужен? Он производительность ускорит?

Pestunovich Konstantin
А List.Buffer зачем нужен? Он производительность у...

можете не использовать, если не хотите, а так в танке отдельный пост был

Pestunovich-Konstantin Автор вопроса

Очень круто, спасибо. Могу попросить комментарий словесный к функции "g = ..." написать?

Pestunovich Konstantin
Очень круто, спасибо. Могу попросить комментарий с...

и кстати, если плюнуть на порядок строк и делать именно join - по скорости выходит также let from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], typ = Table.TransformColumnTypes(from,{"Марка продукта", type text}), lst = List.Buffer(List.RemoveLastN(Table.ColumnNames(typ),1)), f=(tbl,col)=>[ lst1=List.Buffer(List.RemoveItems(lst,{col})), gr=Table.Buffer(Table.Group(tbl,lst1,{"без "&col,(t)=>List.Sum(t[тн])})), join=Table.Join(tbl,lst1,gr,lst1)][join], to=List.Accumulate(lst,typ,f) in to

Pestunovich-Konstantin Автор вопроса

Ммм а есть смысл тогда заморачиваться именно с Record.Field? Я думал он увеличивает скорость обработки запроса .

Pestunovich-Konstantin Автор вопроса
Mikhail Muzykin
и кстати, если плюнуть на порядок строк и делать и...

Порядок строк в итоговой таблице не важен, она будет использоваться через агрегированные значения.

Pestunovich Konstantin
Ммм а есть смысл тогда заморачиваться именно с Rec...

скорость обработки увеличивает хороший алгоритм и приемлемое железо на этом и закончим

Pestunovich-Konstantin Автор вопроса
Mikhail Muzykin
скорость обработки увеличивает хороший алгоритм и ...

И все же - есть преимущества у алгоритма через Record.Field перед алгоритмом через Table.Join?

Pestunovich Konstantin
И все же - есть преимущества у алгоритма через Rec...

нету, проста данные нужны правильные, чтобы join не тупил

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

Карта сайта