|
Наверное простой вопрос по Tabular
|
|||
---|---|---|---|
#18+
Есть куб, в котором много всяких измерений, а 13 из них - это разные контрагенты, которые берутся из одной и той же таблицы в базе. Как правильнее/выгоднее с точки зрения времени процессинга их представлять? И варианты ответа: 1) 13 раз брать из таблицы, для каждого измерения отдельно 2) Читать один раз, а потом для остальных 12 делать типа "partitions": [ { "name": "CalculatedTable1", "source": { "type": "calculated", "expression": "Counterparty" } } 3) Джойнить нужные атрибуты из них (а их получится примерно от 13*4 до 13*5) сразу в таблицу фактов, во время ее загрузки. 4) Другой вариант, до которого я не додумался ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2021, 14:04 |
|
Наверное простой вопрос по Tabular
|
|||
---|---|---|---|
#18+
Нет однозначного ответа, ответ зависит от приоритетов, там обычная модель стоимость/выгода так минимум (в т.ч. финансово и обслуживание) от таких факторов как импортируемый размер и ограничения сервера по памяти, необходимая скорость получения данных (не только процессинга, но и получения результата на запрос пользователя) материализация всего (на разумно смоделированной гранулярности) обычно ведёт к ускорению получения ответа на запрос, если расчётами делать - снизив материализацию то можно ускорить процессинг но во время runtime запроса пользователями будет замедление. для мелких измерений в принципе всё равно, для крупных уже надо смотреть баланс факторов и предъявляемые к системе цели а дальше подбирать под эти приоритеты через профайлинг - что быстрее, с вариациями фильтраций на уровне M или DAX партиций из основного измерения/источника уже на уровне SSAS (которая всё-таки по идее работает всё равно на columnstore и там нет network overhead т.к. всё происходит внутри, многопользовательской нагрузки как на DWH т.к. SSAS обычно dedicated на одну задачу и нет на заднем плане параллельных ETL для других job-ов Ибн Хоттаб 2) Читать один раз, а потом для остальных 12 делать типа "partitions":... 4) Другой вариант,... Судя по тому что я помню от пары лет назад - партиции бывают как минимум следующих типов: Type:1-Query (Legacy),2-Calculated,3-None,4-M/PowerQuery,5-Entity, 6-?, 7-(calculation group?) может ещё что добавили ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2021, 07:09 |
|
Наверное простой вопрос по Tabular
|
|||
---|---|---|---|
#18+
vikkiv, то есть, если я правильно вас понял, снижение "материализации" ведет к ускорению процессинга, а не наоборот? Т.е. чем меньше я гружу из источника и больше вычисляю на основе этого, тем быстрее идет процессинг? Честно говоря это несколько расходится с тем что я наблюдаю: дневные порции данных залетают со свистом, за минуты, а вот process recalc потом идет часы. Вижу, к своему удивлению, что вопрос не такой уж простой. :( ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2021, 00:32 |
|
Наверное простой вопрос по Tabular
|
|||
---|---|---|---|
#18+
Ибн Хоттаб, Навскидку там не только calculated колонны (плюс отдельный вопрос: таблицы) но и меры если упрощённо разложить по шагам то насколько я помню под вечер - есть такие варианты: 1) в источнике (нагрузка на получение данных/сеть и sql? сервер) 2) в PowerQuery/M вычисляемые таблицы 3) в PowerQuery/M вычисляемые колонны 4) в DAX вычисляемые таблицы (в т.ч. основа Calculation Groups без колон/мер) 5) в DAX вычисляемые колонны 6) в DAX вычисляемые меры Первые 3 материализуются (во время процессинга, на разных его шагах, смотрим на нагрузку ядер cpu, ставим память побыстрее, с дисками - вроде всё в памяти, посл. не проверял - не было необх.) Последние 3 рассчитываются во время сессии пользователя / запросов (на разных шагах, некоторые сразу при инициализации, некоторые по необходимости - меры) По процессингу надо смотреть где тормозит (Data/Recalc) https://docs.microsoft.com/en-us/analysis-services/tabular-models/process-database-table-or-partition-analysis-services Может там на PowerQuery тормоза а не в источнике. может сеть очень узкая - тогда разумней вытащить нужный датасет один раз и уже на SSAS разложить по своим объектам При разумной организации если не городить непролазный лес (падение из-за низкокачественной модели/кода) и глобальная цель именно ускорение процесинга (и модификация источника невозможна, напр. cpu быстрее не поставить и пр.) то можно частично переложить часть ожидания на пользователя - расчёты во время сессии (DAX) если там пару сотен миллисекунд, если там минуты то естественно пользователь пошлёт такое решение куда подальше это всё так - пальцем в небо, в общем, а в реальности надо-бы определить - где тормозит. бывает паралельность лучше урезать.. у нас на нагрузочномм тестировании обычно гоняют и мониторинг на узкие места - потом смотрим можно-ли подкрутить получше.. ну в смысле если речь о 10+ миллионах записей в справочнике (партициями), если там пару тыс. строчек без особых перспектив стремительного роста - то какая разница, можно не заморачиваться (хоть direct query) // хотя конечно бывает и десяток нужных строчек тянут из многомилионных таблиц по 10 минут.. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2021, 01:51 |
|
Наверное простой вопрос по Tabular
|
|||
---|---|---|---|
#18+
Ибн Хоттаб, Чем меньше уникальных значений, тем быстрее идет процессинг, меньше весит куб и быстрее работают измерения. Обычно извлечение из БД занимает меньшую часть времени из всего цикла процессинга. Но если хочется оптимизировать чтение, можно попробовать сделать секционирование таблицы в БД таким образом, чтобы каждая секция содержала клиентов для того или иного измерения, без пересечений. Разумеется, если это не противоречит остальным задачам. И это нужно проверять, быть может кластерный индекс будет более выгодным. Лучше не злоупотреблять вычисляемыми таблицами, они несжимаемы и работают медленно. А еще рекомендую почитать все три раздела на этом сайте , для теоретического понимания, что происходит внутри куба при процессинге ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 22:33 |
|
|
start [/forum/topic.php?fid=49&fpage=5&tid=1857196]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
others: | 252ms |
total: | 375ms |
0 / 0 |