#azure-sql-database #powerbi #powerquery
#azure-sql-database #powerbi #powerquery
Вопрос:
Я помогаю своей команде устранять неполадки в отчете Power BI, который мы разрабатываем. У нас довольно сложная модель данных в исходной базе данных SQL, поэтому мы создали 5-6 представлений для лучшего управления данными. У нас есть требование использовать DirectQuery, поскольку одним из ключевых требований к отчету является отображение самых последних данных в базе данных, а не задержка загрузки / кэширования данных. У нас также есть единый источник данных, только одна база данных.
Когда мы запускаем отчет, мы видим всплеск 200-500 подключений к базе данных от конкретного пользователя для источника данных отчета, и эти подключения не закрываются. Это явно проблема и неприемлемо для любого продукта. У нас открыт запрос в службу поддержки Microsoft premium для решения проблем, связанных с тем, что соединения не закрываются, но в то же время мне интересно, делаем ли мы что-то не так в отчете?
Когда я просматриваю запросы в редакторе запросов, у нас в основном есть один запрос для каждого представления, и это простой:
let
Source = Sql.Database(Server, Database)
query_view_name = Source{[Schema ......]}[Data]
in
query_view_name
(У меня нет исходного кода передо мной, но в этом суть.)
Мне кажется, основываясь на аналитике в базе данных, что «Sql.Database» открывает новое соединение при каждом вызове этого представления. А при 5-6 представлениях это как минимум 5-6 подключений; затем каждый раз, когда меняется фильтр, это больше подключений, и он соединяется оттуда, пока пул подключений к базе данных не будет исчерпан.
Есть ли способ заполнить все таблицы, используя одно подключение к базе данных? Зачем Power BI использовать так много подключений? Можем ли мы заполнить несколько таблиц в расширенном редакторе запросов? Используя DirectQuery, есть ли какие-либо предложения относительно того, что мы можем просмотреть / устранить неполадки / изменить в отчете?
Спасибо!
Ответ №1:
Power BI устанавливает несколько подключений к базе данных для параллельной загрузки нескольких таблиц. Если вы этого не хотите, вы можете отключить его из Options
-> Current file
-> Data Load
-> Enable parallel loading of tables
:
Имейте в виду, что отключение этой опции, скорее всего, увеличит время загрузки модели.
Возможно, вы захотите взглянуть на Maximum connections per data source
опцию в Options
-> Current file
-> Direct query
и использовать весь раздел Query reduction
. Включение Slicer selection
и Filter selection
включение этой страницы настоятельно рекомендуется для случаев, подобных вашему, но вам нужно обучить своих пользователей тому, что им нужно щелкнуть apply
, чтобы увидеть результаты.
Ответ №2:
ОК.
У нас довольно сложная модель данных в исходной базе данных SQL, поэтому мы создали 5-6 представлений для лучшего управления данными.
Это нормально.
У нас есть требование использовать DirectQuery,
Но теперь у вас будут плохие времена. DirectQuery сложные представления — это путь к низкой производительности. Запросы к вашим представлениям добавят объединения, потенциально по всей модели для контекста фильтра, а также для измерения и вычисляемых выражений столбцов. И эти запросы будут динамически меняться в зависимости от взаимодействия пользователя с отчетом. Поэтому очень сложно увидеть и протестировать все возможные запросы.
Основное руководство — использовать режим импорта для представлений и использовать DirectQuery только для правильно проиндексированных таблиц. Чтобы обеспечить свежесть данных, вы можете заменить представления таблицами, которые вы загружаете и обновляете из своего приложения, или, возможно, использовать индексированное представление и т. Д.