Максимальное количество подключений Power BI к БД :( Можем ли мы заполнить несколько таблиц одним вызовом Sql.Database? - PullRequest
1 голос
/ 15 апреля 2019

Я помогаю моей команде решить проблему с отчетом Power BI, который мы разрабатываем. У нас есть довольно сложная модель данных в исходной базе данных SQL, поэтому мы создали 5-6 представлений для лучшего управления данными. У нас есть требование использовать DirectQuery, поскольку одним из ключевых требований к отчету является то, что самые актуальные данные в базе данных видны, а не имеют задержки при загрузке / кэшировании данных. У нас также есть один источник данных, только одна база данных.

Когда мы запускаем отчет, мы видим всплеск 200-500 подключений к базе данных от конкретного пользователя для источника данных отчета, и эти подключения не закрываются. Это явно проблема и неустойчива для любого продукта. У нас есть открытая заявка с премиум-поддержкой Microsoft на решение о том, что соединения не закрываются, но в то же время мне интересно, делаем ли мы что-то неправильно в отчете?

Когда я просматриваю запросы в редакторе запросов, мы в основном имеем один запрос для каждого представления, и это просто:

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, есть ли какие-либо предложения по поводу того, что мы можем посмотреть / устранить неполадки / изменить в отчете?

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Power BI устанавливает несколько подключений к базе данных для параллельной загрузки нескольких таблиц. Если вы не хотите этого, вы можете отключить его из Options -> Current file -> Data Load -> Enable parallel loading of tables:

enter image description here

Имейте в виду, что отключение этой опции, скорее всего, увеличит время загрузки модели.

Возможно, вы захотите взглянуть на параметр Maximum connections per data source в Options -> Current file -> Direct query и на весь раздел Query reduction под ним. Включение Slicer selection и Filter selection на этой странице настоятельно рекомендуется для таких случаев, как ваш, но вам нужно обучить своих пользователей, чтобы они нажимали на apply, чтобы увидеть результаты.

0 голосов
/ 15 апреля 2019

Ok.

У нас есть довольно сложная модель данных в исходной базе данных SQL, поэтому мы создали 5-6 представлений для лучшего управления данными.

Все в порядке.

У нас есть требование использовать DirectQuery,

Но теперь у вас будет плохое время.Сложные представления DirectQuery + - это рецепт плохой производительности.Запросы к вашим представлениям добавят объединения, потенциально по всей модели для контекста фильтра, а также выражения Измерение и Вычисляемый столбец.И эти запросы будут меняться динамически, в зависимости от взаимодействия пользователя с отчетом.Поэтому очень трудно увидеть и протестировать все возможные запросы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...