Использование DirectQuery в Power BIUsing DirectQuery in Power BI

При использовании Power BI Desktop или службы Power BI вы можете подключиться к различным типам источников данных разными способами.You can connect to all sorts of different data sources when using Power BI Desktop or the Power BI service, and you can make those data connections in different ways. Вы можете либо импортировать данные в Power BI, что является наиболее распространенным способом получения данных, либо подключиться непосредственно к данным в исходном репозитории источника, который известен как DirectQuery.You can either import data to Power BI, which is the most common way to get data, or you can connect directly to data in its original source repository, which is known as DirectQuery. В этой статье описывается DirectQuery и его возможности, включая следующие темы:This article describes DirectQuery and its capabilities, including the following topics:

  • различные параметры подключения для DirectQuery;Different connectivity options for DirectQuery
  • руководство по использованию DirectQuery (когда необходимо использовать именно DirectQuery, а не импорт);Guidance for when you should consider using DirectQuery rather than import
  • недостатки использования DirectQuery;Drawbacks of using DirectQuery
  • рекомендации по использованию DirectQuery.Best practice for using DirectQuery

Вкратце, импорт нужно использовать в следующих случаях:In short, the best practice for using import versus DirectQuery is the following:

  • Импортируйте данные в Power BI всякий раз, когда это возможно.You should import data to Power BI wherever possible. Таким образом можно использовать преимущества высокоэффективного обработчика запросов в Power BI, а также получить широкие возможности взаимодействия и расширенную функциональность при работе с данными.This takes advantage of the high performance query engine of Power BI, and provides a highly interactive and fully featured experience over your data.
  • Если же импорт не может удовлетворить ваши цели в полной мере, используйте DirectQuery.If your goals can't be met by importing data, then consider using DirectQuery. Например, если данные часто меняются, а отчеты должны отображать последние данные, лучше выбрать DirectQuery.For example, if the data is changing frequently and reports must reflect the latest data, DirectQuery may be best. Тем не менее использование DirectQuery в целом целесообразно, только если базовый источник данных может обеспечить интерактивные запросы (менее чем через 5 секунд) для обычного статистического запроса, а также может обработать сформированную загрузку запросов.However, using DirectQuery is generally only be feasible when the underlying data source can provide interactive queries (less than 5 seconds) for the typical aggregate query, and is able to handle the query load that will be generated. Кроме того, необходимо тщательно рассмотреть список ограничений по использованию DirectQuery, чтобы решить, сможет ли DirectQuery удовлетворить ваши потребности.Additionally, the list of limitations that accompany use of DirectQuery should be considered carefully, to ensure your goals can still be met.

Набор возможностей, предлагаемых Power BI для двух режимов подключения (импорта и DirectQuery), со временем будет меняться.The set of capabilities offered by Power BI for both connectivity modes – import and DirectQuery - will evolve over time. При использовании импортируемых данных обеспечивается большая гибкость, поэтому в большинстве случаев можно выбирать импорт. Кроме того, этот режим позволяет избежать некоторых недостатков, характерных для DirectQuery.This will include providing more flexibility when using imported data, such that import can be used in more cases, as well as eliminating some of the drawbacks of using DirectQuery. Несмотря на преимущества, при использовании DirectQuery следует всегда учитывать производительность базового источника данных.Regardless of improvements, when using DirectQuery the performance of the underlying data source will always remain a major consideration. Если такой базовый источник данных работает медленно, тогда использование DirectQuery для него нецелесообразно.If that underlying data source is slow, then using DirectQuery for that source it will remain unfeasible.

Здесь рассматривается DirectQuery в контексте Power BI, а не служб SQL Server Analysis Services.This topic covers DirectQuery with Power BI, and not SQL Server Analysis Services. DirectQuery также является функцией служб SQL Server Analysis Services, и многие дополнительные сведения, описанные ниже, относятся к использованию этой функции. Тут есть некоторые важные отличия.DirectQuery is also a feature of SQL Server Analysis Services, and many of the details described below apply to its use, there are also important differences. Сведения об использовании DirectQuery со службами SQL Server Analysis Services см. в этом техническом документе.For information about using DirectQuery with SQL Server Analysis Services, see the whitepaper that details DirectQuery in SQL Server Analysis Services 2016.

В этой статье рассматривается рекомендуемый рабочий процесс для DirectQuery, когда создается отчет в Power BI Desktop, однако здесь также приведены сведения о подключении непосредственно в службе Power BI.This article focuses on the recommended workflow for DirectQuery, where the report is created in Power BI Desktop, but also covers connecting directly in the Power BI service.

Режимы подключения Power BIPower BI connectivity modes

Power BI подключается к очень большому количеству различных источников данных, включая следующие:Power BI connects to a very large number of varied data sources, encompassing:

  • веб-службы (Salesforce, Dynamics 365 и другие);Online services (Salesforce, Dynamics 365, others)
  • базы данных (SQL Server, Access, Amazon Redshift и другие);Databases (SQL Server, Access, Amazon Redshift, others)
  • простые файлы (Excel, JSON и другие);Simple files (Excel, JSON, others)
  • другие источники данных (Spark, веб-сайты, Microsoft Exchange и другие).Other data sources (Spark, Web sites, Microsoft Exchange, others)

Для этих источников данные обычно можно импортировать в Power BI.For these sources, it's usually possible to import the data to Power BI. К некоторым можно подключиться с помощью DirectQuery.For some it is also possible to connect using DirectQuery. Точный набор источников, который поддерживает DirectQuery, приведен в статье Источники данных, поддерживаемые DirectQuery.The exact set of sources that support DirectQuery is described in the Data Sources supported by DirectQuery article. В будущем планируется поддержка в DirectQuery и других источников, преимущественно тех, которые обеспечивают оптимальную обработку интерактивных запросов.More sources will be DirectQuery enabled in the future, focusing primarily on sources that can be expected to deliver good interactive query performance.

Службы SQL Server Analysis Services нужно рассмотреть отдельно.SQL Server Analysis Services is a special case. При подключении к службам SQL Server Analysis Services вы можете либо импортировать данные, либо использовать динамическое подключение.When connecting to SQL Server Analysis Services, you can choose to import the data, or use a live connection. Режим динамического подключения напоминает DirectQuery. То есть в таком режиме данные не импортируются, а базовый источник данных всегда запрашивается, чтобы обновить визуальный элемент. Однако другие аспекты динамического подключения отличаются от DirectQuery. Именно поэтому используется другой термин (для их сравнения).Using a live connection is similar to DirectQuery, in that no data is imported, and the underlying data source is always queried to refresh a visual, but a live connection is different in many other regards, so a different term (live versus DirectQuery) is used.

Эти три варианта подключения к данным — импорт, DirectQuery и динамическое подключение — подробно рассматриваются в разделах ниже.These three options for connecting to data – import, DirectQuery, and live connection – are explained in detail in the following sections.

Подключения с помощью импортаImport connections

Если вы используете окно Получение данных в Power BI Desktop, чтобы подключиться к такому источнику данных, как SQL Server, а также выберите в качестве режима подключения импорт, произойдет следующее:When using Get Data in Power BI Desktop to connect to a data source like SQL Server, and you choose Import, the behavior of that connection is as follows:

  • Во время получения данных на начальном этапе каждый набор выбранных таблиц определяет запрос, который будет возвращать набор данных (эти запросы можно редактировать до загрузки данных, например можно применить фильтры или объединить данные, а также соединить разные таблицы).During the initial Get Data experience, the set of tables selected each define a query that will return a set of data (those queries can be edited prior to loading the data, for example to apply filters, or aggregate the data, or join different tables).
  • При загрузке все данные, определенные этими запросами, будут импортированы в кэш Power BI.Upon load, all of the data defined by those queries will be imported into the Power BI cache.
  • При создании визуализации в рамках Power BI Desktop будут запрашиваться импортированные данные.Upon building a visual within Power BI Desktop, the imported data will be queried. Хранилище Power BI гарантирует быстрое выполнение запроса, а значит все изменения визуализации будут сразу же отображаться.The Power BI store ensures the query will be very fast, hence all changes to the visual will be reflected immediately.
  • Любые изменения базовых данных не будут отражаться в визуальных элементах.Any changes to the underlying data will not be reflected in any visuals. После обновления данные будут повторно импортированы.It is necessary to Refresh, whereupon the data will be re-imported.
  • При публикации отчета (PBIX-файла) в службе Power BI создается набор данных, который затем отправляется в эту службу.Upon publishing the report (the .pbix file) to the Power BI service, a dataset is created and uploaded to the Power BI service. С этим набором данных также отправляются импортируемые данные.The imported data is included with that dataset. Затем можно настроить запланированное обновление данных, например, чтобы ежедневно повторно импортировать данные.It is then possible to set up scheduled refresh of that data, for example, to re-import the data every day. В зависимости от расположения исходного источника данных может потребоваться настроить локальный шлюз данных.Depending upon the location of the original data source, it might be necessary to configure an on-premises data gateway.
  • При открытии существующего отчета в службе Power BI или создании нового отчета импортируемые данные запрашиваются снова, что обеспечивает интерактивность.When opening an existing report in the Power BI service, or authoring a new report, the imported data is queried again, ensuring interactivity.
  • Визуальные элементы или все страницы отчета могут быть прикреплены в качестве плиток к панели мониторинга.Visuals, or entire report pages, can be pinned as dashboard tiles. Плитки будут автоматически обновляться при каждом обновлении базового набора данных.The tiles will be automatically refreshed whenever the underlying dataset is refreshed.

Подключения с помощью DirectQueryDirectQuery connections

Если вы используете окно Получение данных в Power BI Desktop, чтобы подключиться к источнику данных, а также выберите в качестве режима подключения DirectQuery, произойдет следующее:When using Get Data in Power BI Desktop to connect to a data source, and you choose DirectQuery, the behavior of that connection is as follows:

  • Во время получения данных на начальном этапе выбирается источник.During the initial Get Data experience, the source is selected. Для реляционных источников это означает, что набор выбранных таблиц по-прежнему определяет запрос, который логически возвращает набор данных.For relational sources, this means a set of tables are selected and each still define a query that logically returns a set of data. Для многомерных источников, таких как SAP BW, выбирается только источник.For multidimensional sources like SAP BW, only the source is selected.
  • Однако при загрузке данные не импортируются в хранилище Power BI.However, upon load, no data will actually be imported into the Power BI store. Вместо этого при создании визуализации в рамках Power BI Desktop запросы будут отправляться в базовый источник данных для получения необходимых данных.Instead, upon building a visual within Power BI Desktop, queries will be sent to the underlying data source to retrieve the necessary data. Время для обновления визуального элемента будет зависеть от производительности базового источника данных.The time then taken to refresh the visual will depend on the performance of the underlying data source.
  • Любые изменения базовых данных будут отражены в существующих визуальных элементах не сразу.Any changes to the underlying data will not be immediately reflected in any existing visuals. Нужно по-прежнему выполнить обновление, после чего необходимые запросы будут повторно отправлены для каждого визуального элемента, который при необходимости обновится.It is still necessary to Refresh, whereupon the necessary queries will be resent for each visual, and the visual updated as necessary.
  • При публикации отчета в службе Power BI также будет создан набор данных, как и при использовании режима импорта.Upon publishing the report to the Power BI service, it will again result in a Dataset in the Power BI service, just as for import. Однако данные с этим набором данных не отправляются.However, no data is included with that dataset.
  • При открытии существующего отчета в службе Power BI или создании нового для получения необходимых данных снова запрашивается базовый источник данных.When opening an existing report in the Power BI service, or authoring a new one, the underlying data source is again queried to retrieve the necessary data. В зависимости от расположения исходного источника данных может потребоваться настроить локальный шлюз данных, так же, как и для режима импорта в случае обновления данных.Depending upon the location of the original data source, it might be necessary to configure an on-premises data gateway, just as is needed for Import mode if the data is refreshed.
  • Визуальные элементы или все страницы отчета могут быть прикреплены в качестве плиток к панели мониторинга.Visuals, or entire report pages, can be pinned as Dashboard tiles. Чтобы обеспечить быстрое открытие панели мониторинга, плитки обновляются согласно расписанию (например, каждый час).To ensure that opening a dashboard will be fast, the tiles are automatically refreshed on a schedule (for example, every hour). Этой частотой обновления можно управлять, чтобы видеть все последние обновления данных.The frequency of this refresh can be controlled, to reflect how frequently the data is changing, and how important it is to see the very latest data. Таким образом при открытии панели мониторинга плитки будут отражать данные по состоянию на момент последнего обновления, а не последние изменения базового источника.Thus, when opening a dashboard, the tiles will reflect the data as of the time of the last refresh, and not necessarily the very latest changes made to the underlying source. Вы всегда можете обновить открытую панель мониторинга, чтобы использовать ее последнюю версию.An open dashboard can always be Refreshed to ensure it is up-to-date.

Динамические подключенияLive connections

При подключении к службам SQL Server Analysis Services (SSAS) вы можете либо импортировать данные из выбранной модели данных, либо динамически подключиться к этой модели.When connecting to SQL Server Analysis Services (SSAS), there is an option to either import data from, or connect live to, the selected data model. Если вы выберете импорт, вам нужно определить запрос применительно к этому внешнему источнику SSAS, что обеспечит импорт данных в обычном режиме.If you select import, then you define a query against that external SSAS source, and the data is imported as normal. Если вы выберете динамическое подключение, запрос не определяется и внешняя модель отображается в списке полей.If you select to connect live then there is no query defined, and the entire external model is shown in the field list. Если вы выберете DirectQuery, то при создании визуальных элементов запросы отправляются во внешний источник SSAS.If you select DirectQuery, as visuals are built, queries are sent to the external SSAS source. Однако в отличие от DirectQuery неважно, в каком режиме создается модель. Другими словами, невозможно определить новые вычисляемые столбцы, иерархии, связи и т. д.However, unlike DirectQuery, there is no sense in which a new model is being created; in other words, it's not possible to define new calculated columns, hierarchies, relationships, and so on. Вместо этого нужно просто подключиться непосредственно к внешней модели SSAS.Instead you are simply connecting directly to the external SSAS model.

Ситуация, описанная в предыдущем абзаце, также относится к подключению к следующим источникам (за исключением того, что из них невозможно импортировать данные):The situation described in the previous paragraph applies to connecting to the following sources as well, except that there is no option to import the data:

  • наборам данных Power BI (например, при подключении к набору данных Power BI, который был ранее создан и опубликован в службе, для создания нового отчета);Power BI datasets (for example, when connecting to a Power BI dataset that has previously been created and published to the service, to author a new report over it)
  • Common Data Services.Common Data Services

Режим работы отчетов через службы SSAS при публикации в службе Power BI аналогичен режимам работы отчетов DirectQuery в следующем:The behavior of reports over SSAS, upon publishing to the Power BI service, is similar to DirectQuery reports in the following ways:

  • При открытии существующего отчета в службе Power BI или создании нового запрашивается базовый источник SQL Server Analysis Services (возможно, потребуется локальный шлюз данных).When opening an existing report in the Power BI service or authoring a new report, the underlying SSAS source is queried (possibly requiring an on-premises data gateway)
  • Плитки панели мониторинга автоматически обновляются по расписанию (например, каждый час или в зависимости от определенной частоты обновления).Dashboard tiles are automatically refreshed on a schedule (such as every hour, or whatever frequency is defined)

Однако существуют важные различия, в том числе для динамических подключений. Удостоверение пользователя, который открывает отчет, всегда будет передаваться в базовый источник SSAS.However, there are also important differences, including that for live connections the identity of the user opening the report will always be passed to the underlying SSAS source.

Не будем углубляться в сравнения, а сосредоточимся только на DirectQuery.With these comparisons out of the way, let's focus solely on DirectQuery for the rest of this article.

Когда лучше использовать DirectQuery?When is DirectQuery useful?

В таблице ниже описаны сценарии, для которых рекомендуется подключение с помощью DirectQuery, включая случаи, когда предпочтительнее оставить данные в исходном источнике.The following table describes scenarios where connecting with DirectQuery could be especially useful, including cases where leaving the data in the original source would be considered beneficial. Описание включает обсуждение относительно доступности определенного сценария в Power BI.The description includes a discussion about whether the specified scenario is available in Power BI.

ОграниченияLimitation ОписаниеDescription
Данные часто меняются, и требуется создание отчета в режиме реального времениData is changing frequently, and near ‘real-time’ reporting is needed Модели с импортируемыми данными могут обновляться максимум один раз в час.Models with Imported data can be refreshed at most once per hour. Таким образом, если данные постоянно меняются, а отчеты должны содержать последние данные, тогда импорта с обновлением по расписанию может быть недостаточно.Hence, if the data is continually changing, and it is necessary for reports to show the latest data, then using Import with scheduled refresh might simply not meet those needs. Обратите внимание, что можно также выполнить потоковую передачу данных непосредственно в Power BI, хотя предусмотрены ограничения объемов данных.Note also that it is also possible to stream data directly into Power BI, though there a limits on the data volumes supported for this case.

И напротив, с помощью DirectQuery при открытии или обновлении отчета и панели мониторинга в источнике всегда будут отображаться последние данные.Using DirectQuery, by contrast, means that opening or refreshing a report or dashboard will always show the latest data in the source. Кроме того, плитки панели мониторинга могут обновляться чаще (например, каждые 15 минут).Additionally, the dashboard tiles can be updated more frequently (as often as every 15 mins).
Слишком большой объем данныхData is very large Если объем данных слишком большой, тогда импорт совсем нецелесообразен.If the data is very large, then it certainly would not be feasible to import it all. И напротив, DirectQuery не требует передачи большого объема данных, так как запрашивается на месте.DirectQuery, by contrast, requires no large transfer of data, as it is queried in place.

Однако большие объемы данных могут также подразумевать, что производительность запросов применительно к этому базовому источнику слишком низкая (что рассматривается в разделе о влиянии DirectQuery в этой статье).However, large data might also imply that the performance of the queries against that underlying source are too slow (as discussed in Implications of using DirectQuery section, later in this article). И конечно, не всегда необходимо импортировать полный набор данных.And of course it is not always necessary to import the full detailed data. Вместо этого во время импорта данные можно предварительно объединить (что очень просто сделать с помощью редактора запросов).Instead the data can be pre-aggregated during import (and Query Editor makes it easy to do exactly this). В крайнем случае можно импортировать именно объединенные данные, необходимые для каждого визуального элемента.In the extreme it would be possible to import exactly the aggregate data needed for each visual. Итак, учитывая, что для больших объемов данных лучше всего использовать DirectQuery, необходимо помнить о том, что импорт объединенных данных — отличное решение для базового источника с низкой производительностью.So while DirectQuery is the simplest approach to large data, you should always keep in mind that importing aggregate data might offer a solution if the underlying source is too slow.
Правила безопасности определены в базовом источникеSecurity rules are defined in the underlying source После импорта данных Power BI будет подключаться к источнику данных с помощью текущих учетных данных пользователей (из Power BI Desktop) или учетных данных, определенных как часть настройки запланированного обновления (в службе Power BI).When the data is imported, Power BI will connect to the data source using the current users credentials (from Power BI Desktop), or the credentials defined as part of configuring scheduled refresh (from the Power BI service). Таким образом при публикации и совместном использовании такого отчета необходимо обеспечить совместное использование отчета с пользователями, которые могут видеть те же данные, или определить безопасность на уровне строк в наборе данных.Thus, in publishing and sharing such a report, care must be taken to only share with users allowed to see the same data, or to define Row Level Security as part of the dataset.

В идеале, так как DirectQuery всегда запрашивает базовый источник, к нему можно применить любой уровень безопасности.Ideally, because DirectQuery always queries the underlying source, this would allow any security in that underlying source to be applied. Однако на сегодняшний день Power BI всегда подключается к базовому источнику, используя те же учетные данные, что используются для импорта.However, today Power BI will always connect to the underlying source using the same credentials as would be used for Import.

Таким образом, пока Power BI позволяет передавать идентификатор пользователя отчета в базовый источник, использование DirectQuery не дает никаких преимуществ в отношении обеспечения безопасности источника данных.Thus, until Power BI allows for the identity of the report consumer to pass through to the underlying source, DirectQuery offers no advantages with regard to data source security.
Применение ограничений к независимости данныхData sovereignty restrictions apply В некоторых организациях предусмотрены политики для независимости данных, что означает, что данные нельзя передать из локальной среды организации.Some organizations have policies around data sovereignty, meaning that data cannot leave the organization premises. Импорт не рассматривается как подходящее решение.A solution based on import would clearly present issues. С DirectQuery же эти данные остаются в базовом источнике.By contrast, with DirectQuery that data remains in the underlying source.

Однако стоит заметить, что даже при использовании DirectQuery некоторые кэши данных на уровне визуализации сохраняются в службе Power BI (из-за запланированного обновления плиток).However, it should be noted that even with DirectQuery, some caches of data at the visual level are retained in the Power BI service (due to scheduled refresh of tiles).
Базовый источник данных представляет собой источник OLAP, содержащий мерыUnderlying data source is an OLAP source, containing measures Если базовый источник данных содержит меры (например, SAP HANA или SAP Business Warehouse), тогда импорт данных приведет к другим проблемам.If the underlying data source contains *measures *(such as SAP HANA or SAP Business Warehouse) then importing the data brings other issues. Это значит, что импортированные данные находятся на определенном уровне статистической обработки в соответствии с запросом.It means that the data imported is at a particular level of aggregation, as defined by the query. Например, мера TotalSales по классу, году и расположению.For example, measure TotalSales by Class, Year, and City. Затем, если созданный визуальный элемент запрашивает данные на более высоком уровне статистической обработки (например, TotalSales по году), выполняется дальнейшая статистическая обработка агрегированного значения.Then if a visual is built asking for data at a higher level aggregate (such as TotalSales by Year) it is further aggregating the aggregate value. Это подходит для аддитивных мер (например, Sum, Min) и не подходит для неаддитивных (например, Average, DistinctCount).This is fine for additive measures (such as Sum, Min) but it's an issue for non-additive (such as Average, DistinctCount).

Чтобы упростить получение правильных агрегатных данных (необходимых для конкретного визуального элемента) непосредственно из источника, было бы необходимо отправлять запросы для каждого визуального элемента, как в DirectQuery.To make it easy to get the correct aggregate data (as needed for the particular visual) directly from the source, it would be necessary to send queries per visual, as in DirectQuery.

При подключении к SAP Business Warehouse (BW) с помощью DirectQuery можно обрабатывать меры таким образом.When connecting to SAP Business Warehouse (BW), choosing DirectQuery allows for this treatment of measures. Поддержка SAP BW рассматривается далее в статье об использовании DirectQuery с SAP Business Warehouse (BW).Support for SAP BW is covered further in DirectQuery and SAP BW.

Тем не менее на сегодняшний день при подключении к SAP HANA режим DirectQuery определяет данную меру как реляционный источник, а поэтому обеспечивает поведение, схожее с режимом импорта.However, currently DirectQuery over SAP HANA treats it the same as a relational source, and hence provides similar behavior to import. Это рассматривается далее в статье DirectQuery и SAP HANA.This is covered further in DirectQuery and SAP HANA.

Поэтому в целом, учитывая текущие возможности DirectQuery в Power BI, этот режим предоставляет преимущества в следующих сценариях:So in summary, given the current capabilities of DirectQuery in Power BI, the scenarios where it offers benefits are the following:

  • данные часто меняются, и требуется создание отчета в режиме реального времени;Data is changing frequently, and near ‘real-time’ reporting is needed
  • обработка больших объемов данных без необходимости предварительной статистической обработки;Handling very large data, without the need to pre-aggregate
  • применение ограничений к независимости данных;Data sovereignty restrictions apply
  • источником является многомерный источник, содержащий меры (например, SAP BW).The source is a multi dimensional source containing measures (such as SAP BW)

Обратите внимание, что сведения из списка выше связаны с использованием одной службы Power BI.Note that the details in the previous list relate to the use of Power BI alone. Вы всегда можете использовать внешнюю модель служб SQL Server Analysis Services (или Azure Analysis Services) для импорта данных, а затем использовать Power BI для подключения к этой модели.There is always the option of instead using an external SQL Server Analysis Services (or Azure Analysis Services) model to import data, and then using Power BI to connect to that model. Хотя такой подход и требует дополнительных навыков, он обеспечивает большую гибкость.While that approach would require additional skills, it does provide greater flexibility. Например, можно импортировать гораздо большие объемы данных, а также отсутствуют ограничения для частоты обновления данных.For example, much larger volumes of data can be imported, and there is no restriction on how frequently the data can be refreshed.

Ограничения использования DirectQueryImplications of using DirectQuery

Использование DirectQuery может вызвать некоторые последствия, подробнее описанные далее.Use of DirectQuery does have potentially negative implications, as detailed in this section. Некоторые из этих ограничений несколько отличаются в зависимости от конкретного используемого источника.Some of those limitations are slightly different depending upon the exact source that is being used. Так, будет рассмотрено общее влияние, а в отдельных разделах будут приведены сведения о влиянии для различных источников.This will be called out where applicable, and separate topics cover those sources that are substantially different.

Производительность и нагрузка в базовом источникеPerformance and load on the underlying source

При использовании DirectQuery ограничения использования в целом значительно зависят от производительности базового источника данных.When using DirectQuery, the overall experience depends very much on the performance of the underlying data source. Если обновление каждого визуального элемента (например, после изменения значения среза) занимает несколько секунд (< 5 секунд), тогда использование этого режима целесообразно, но все же, в сравнении с незамедлительным ответом при импорте данных в Power BI, остается не в приоритете.If refreshing each visual (for example, after changing a slicer value) takes a few seconds (<5s) then the experience would be reasonable, yet might still feel sluggish compared to the immediate response we are used to when importing the data to Power BI. Если же медленная работа источника подразумевает, что обновление отдельных визуальных элементов длится от 10 секунд, тогда использование DirectQuery нецелесообразно, возможно даже из-за истечения времени ожидания выполнения запроса.If instead the slowness of the source means that individual visuals take longer than that (tens of seconds), then the experience becomes extremely poor, possibly even to the point of queries timing out.

Таким же важным вопросом, как и производительность базового источника, является и нагрузка на этот источник (которая, конечно, часто влияет на производительность).Along with the performance of the underlying source, careful consideration should be paid to the load that will be placed upon it (that of course then often impacts the performance). При открытии общего отчета каждым пользователем, а также при периодическом обновлении каждой плитки панели мониторинга в базовый источник отправляется как минимум один запрос на один визуальный элемент.As discussed further below, each user that opens a shared report, and each dashboard tile that is periodically refreshed, will be sending at least one query per visual to the underlying source. Это значит, что источник должен справиться с обработкой такой нагрузки запроса, обеспечивая при этом оптимальную производительность.This fact requires that the source be able to handle such a query load, while still maintaining reasonable performance.

Использование одного источникаLimited to a single source

Во время импорта данных можно объединить данные из нескольких источников в одну модель, например, чтобы легко добавить некоторые данные из корпоративной базы данных SQL Server к некоторым локальным данным, сохраненным в файле Excel.When importing data, it is possible to combine data from multiple sources into a single model, for example, to easily join some data from a corporate SQL Server database with some local data maintained in an Excel file. При использовании DirectQuery это невозможно.This is not possible when using DirectQuery. Если вы выбираете DirectQuery для источника, можно использовать данные только из одного источника (например, отдельной базы данных SQL Server).When selecting DirectQuery for a source, it will then only be possible to use data from that single source (such as a single SQL Server database).

Ограничения для преобразования данныхLimited data transformations

Есть также ограничения для преобразования данных, которые можно применить с помощью редактора запросов.Similarly, there are limitations in the data transformations that can be applied within Query Editor. Для режима импорта перед созданием визуальных элементов можно также легко применить расширенный набор преобразований для очистки данных или их повторного формирования (например, анализ документов JSON или сведение данных из столбца в форму с поддержкой строк).With imported data, a sophisticated set of transformations can easily be applied to clean and re-shape the data before using it to create visuals (such as parsing JSON documents, or pivoting data from a column to a row orientated form). С DirectQuery используются большие ограничения для таких преобразований.Those transformations are more limited in DirectQuery. Во-первых, при подключении к источнику OLAP, например SAP Business Warehouse, определить преобразования вообще невозможно и отдельная внешняя модель берется из источника.First, when connecting to an OLAP source like SAP Business Warehouse, no transformations can be defined at all, and the entire external ‘model’ is taken from the source. Для реляционных источников, например SQL Server, все еще можно определить набор преобразований для каждого запроса, но эти преобразования ограничены из соображений производительности.For relational sources like SQL Server, it is still possible to define a set of transformations per query, but those transformations are limited, for performance reasons. Каждое такое преобразование необходимо было бы применить к каждому запросу базового источника, а не к общему обновлению данных. Таким образом, ограничением является возможность преобразования только для отдельного машинного запроса.Any such transformation will need to be applied on every query to the underlying source, rather than once on data refresh, so they are limited to those transformations that can reasonably be translated into a single native query. Если вы используете слишком сложное преобразование, вы получите ошибку. В таком случае вам нужно либо удалить преобразование, либо переключить модель в режим импорта.If you use a transformation that is too complex, then you will receive an error that either it must be deleted, or the model switched to Import mode.

Кроме того, запрос, полученный из диалогового окна получения данных или редактора запроса, будет использоваться в подзапросе в рамках запросов, созданных и отправленных для получения необходимых данных для визуального элемента.Additionally, the query that results from the Get Data dialog or Query Editor will be used in a subselect within the queries generated and sent to retrieve the necessary data for a visual. Таким образом, запрос, определенный в редакторе запросов, должен быть допустимым в данном контексте.Thus the query defined in Query Editor must be valid within this context. В частности, это означает, что невозможно использовать запрос с помощью обобщенных табличных выражений или хранимых процедур.In particular this means it is not possible to use a query using Common Table Expressions, nor that invokes Stored Procedures.

Ограничения моделированияModelling limitations

Термин моделирование в данном контексте означает процесс уточнения и расширения необработанных данных в рамках создания отчета.The term modelling in this context means the act of refining and enriching the raw data, as part of authoring a report using it. Примеры моделирования включают:Examples include:

  • определение связей между таблицами;Defining relationships between tables
  • добавление новых вычислений (вычисляемых столбцов и мер);Adding new calculations (calculated columns and measures)
  • переименование и скрытие столбцов и мер;Renaming and hiding columns and measures
  • определение иерархий;Defining hierarchies
  • определение порядка форматирования, формирования сводных данных по умолчанию и сортировки для столбца;Defining the formatting, default summarization and sort order for a column
  • группирование или кластеризацию значений.Grouping or clustering values

При использовании DirectQuery многие из этих модельных расширений можно применить, а также по-прежнему актуален принцип, что необработанные данные расширяются для их последующего эффективного использования.When using DirectQuery, many of these model enrichments can still be made, and certainly there is still the principle that the raw data is being enriched, so as to improve later consumption. Однако при использовании DirectQuery некоторые возможности моделирования недоступны или же ограничены.However, there some modeling capabilities are not available, or are limited, when using DirectQuery. Ограничения обычно применяются, чтобы избежать проблем с производительностью.The limitations are generally applied to avoid performance issues. Ограничения, общие для всех источников DirectQuery, перечислены в следующем маркированном списке.The set of limitations that are common to all DirectQuery sources are listed in the following bulleted list. Дополнительные ограничения могут применяться к отдельным источникам, что рассматривается в этой статье далее — в дополнительных сведениях об источнике данных.Additional limitations might apply to individual sources, as described in Data source specific details found near the end of this article.

  • Отсутствие встроенной иерархии по дате. При импорте данных для каждого столбца даты и времени по умолчанию будет доступна встроенная иерархия по дате.No Built in-date hierarchy: When importing data, then by default every date/datetime column will also have a built-in date hierarchy available by default. Например, если импортировать таблицу заказов на продажу, включая столбец OrderDate, тогда при использовании OrderDate в визуальном элементе можно будет выбрать соответствующий уровень (год, месяц, день).For example, if importing a table of sales orders including a column OrderDate, then upon using OrderDate in a visual, it will be possible to choose the appropriate level (Year, Month, Day) to use. В режиме DirectQuery эта иерархия недоступна.This built-in date hierarchy is not available when using DirectQuery mode. Тем не менее обратите внимание, что если в базовом источнике есть таблица дат (что характерно для многих хранилищ данных), тогда функции логики операций со временем в DAX можно использовать в обычном режиме.Note however that if there is Date table available in the underlying source (as is common in many data warehouses) then the DAX Time Intelligence functions can be used as normal.
  • Ограничения в вычисляемых столбцах. Вычисляемые столбцы ограничены возможностью выполнения операций внутри строки, то есть они могут только ссылаться на значения из других столбцов одной таблицы без возможности использования какой-либо агрегатной функции.Limitations in calculated columns: Calculated columns are limited to being intra-row, as in, they can only refer to values of other columns of the same table, without the use of any aggregate functions. Кроме того, разрешенные скалярные функции в DAX (например, LEFT()) будут ограничиваться функциями, которые передаются в базовый источник, поэтому будут зависеть от конкретных возможностей источника.Additionally, the DAX scalar functions (such as LEFT()) that are allowed will be limited to those which can simply be pushed to the underlying source, hence will vary depending upon the exact capabilities of the source. Неподдерживаемые функции не будут перечисляться в автозаполнении при создании DAX для вычисляемого столбца, и использование этих функций завершится ошибкой.Functions that are not supported will not be listed in autocomplete when authoring the DAX for a calculated column, and would result in an error if used.
  • Отсутствие поддержки функций DAX типа "родители — потомки". В модели DirectQuery невозможно использовать семейство функций DAX PATH(), которое обычно обрабатывает структуры типа "родители — потомки" (например, диаграмму учетных записей или иерархии сотрудников).No support for parent-child DAX functions: When in DirectQuery model, it is not possible to use the family of DAX PATH() functions, that generally handle Parent-Child structures (such as chart of accounts, or employee hierarchies).
  • Ограничения (по умолчанию) для мер. По умолчанию функции и выражения DAX, которые могут использоваться в мерах, ограничиваются.Limitations (by default) for measures: By default, the DAX functions and expressions that can be used in measures is restricted. Снова-таки автозаполнение ограничит перечисленные функции и использование недопустимой функции или выражение завершится ошибкой.Again, autocomplete will restrict the functions listed, and an error will occur if an invalid function or expression is used. При этом по умолчанию используются простые меры, которые вряд ли приведут к проблемам с производительностью.The reason is simply to ensure that, by default, measures are restricted to simple measures that are unlikely by themselves cause any performance issues. Опытные пользователи могут обойти это ограничение, выбрав Файл > Параметры, затем — Настройки > Параметры > DirectQuery, а затем выбрав параметр Разрешить неограниченные меры в режиме DirectQuery.Advanced users can choose to bypass this limitation by selecting File > Options and then Settings > Options > DirectQuery, then selecting the option Allow unrestricted measures in DirectQuery mode. При выборе этого параметра может использоваться любое выражение DAX, которое является допустимым для меры.When that option is selected, any DAX expression that is valid for a measure can be used. Однако пользователям необходимо иметь в виду, что в режиме DirectQuery некоторые выражения, которые оптимально работают при импорте данных, могут стать причиной очень медленного выполнения запросов к серверному источнику.Users must be aware, however, that some expressions that perform well when the data is imported may result in very slow queries to the backend source when in DirectQuery mode.

    • Например, по умолчанию:For example, by default:

      • Возможно создать меру, которая просто суммирует объем продаж:It would be possible to author a measure that simply summed the sales amount:

        SalesAmount = SUMX(Web_Sales, [ws_sales_price]* [ws_quantity])
        
      • Невозможно создать меру, которая впоследствии получает среднее значение SalesAmount по всем Items:It would not be possible to author a measure that then averaged that SalesAmount over all of the Items:

        AverageItemSalesAmount = AVERAGEX('Item', [SalesAmount])
        

      Причина кроется в том, что такая мера может привести к снижению производительности при наличии очень большого количества элементов.The reason is that such a measure could result in poor performance if there were a very large number of items.

  • Не поддерживаются вычисляемые таблицы. Возможность определения вычисляемой таблицы с помощью выражения DAX в режиме DirectQuery не поддерживается.Calculated tables are not supported: The ability to define a calculated table using a DAX expression is not supported in DirectQuery mode.
  • Фильтрация связей ограничена одним направлением. При использовании DirectQuery невозможно задать оба направления перекрестной фильтрации связи.Relationship filtering is limited to a single direction: When using DirectQuery, it is not possible to set the Cross Filter direction on a relationship to “Both”. Например, с тремя таблицами, приведенными ниже, невозможно создать визуальный элемент, отображающий каждого клиента[пол] и количество продуктов[категория], приобретенных каждым клиентом.For example, with the three tables below, it would not be possible to build a visual showing each Customer[Gender], and the number of Product[Category] bought by each. Использование такой двусторонней фильтрации описывается в этом техническом документе. В нем приведены примеры в контексте служб SQL Server Analysis Services, но основополагающие аспекты в равной степени относятся и к Power BI.Use of such bi-directional filtering is described in this detailed whitepaper (the paper presents examples in the context of SQL Server Analysis Services, but the fundamental points apply equally to Power BI).

    Ограничения снова-таки накладываются из-за соображений производительности.Again, the limitation is imposed due to the performance implications. Особенно важно применение фильтрации при определении безопасности на уровне строк в качестве части отчета, так как общая схема должна включать очень много связей между пользователями и сущностями, к которым у них есть доступ, и использование двусторонней фильтрации необходимо для усиления этой безопасности.One particularly important application of this is when defining Row Level Security as part of the report, as a common pattern is to have a many-many relationship between the users and the entities they are allowed access to, and use of bi-directional filtering is necessary to enforce this. Тем не менее следует тщательно рассмотреть вариант использования двусторонней фильтрации для моделей DirectQuery с учетом любого негативного влияния на производительность.However, use of bi-directional filtering for DirectQuery models should be used judiciously, with careful attention paid to any detrimental impact on performance.

  • Отсутствие кластеризации. При использовании DirectQuery возможность кластеризации для автоматического обнаружения групп отсутствует.No Clustering: When using DirectQuery, it is not possible to use the Clustering capability, to automatically find groups

Ограничения отчетностиReporting limitations

Для моделей DirectQuery поддерживаются почти все функции отчетности.Almost all reporting capabilities are supported for DirectQuery models. Таким образом, пока базовый источник предлагает подходящий уровень производительности, можно использовать один набор визуализаций.As such, so long as the underlying source offers a suitable level of performance, the same set of visualizations can be used. Однако существует несколько важных ограничений для некоторых других возможностей, предлагаемых службой Power BI после публикации отчета. Эти ограничения включают:However, there are some important limitations in some of the other capabilities offered in the Power BI service after a report is published, as described in the following bullets:

  • Отсутствие поддержки краткой аналитики. Краткая аналитика Power BI ищет различные подмножества наборов данных, применяя ряд сложных алгоритмов для обнаружения интересных комбинаций.Quick Insights is not supported: Power BI Quick Insights searches different subsets of your dataset while applying a set of sophisticated algorithms to discover potentially-interesting insights. Учитывая необходимость выполнения высокопроизводительных запросов, при использовании DirectQuery эта возможность недоступна.Given the need for very high performance queries, this capability is not available on datasets using DirectQuery.
  • Отсутствие поддержки функции "Вопросы и ответы". Функция "Вопросы и ответы" Power BI позволяет исследовать данные с помощью интуитивно понятных возможностей, основанных на естественном языке, получая ответы в виде диаграмм и графиков.Q&A is not supported: Power BI Q&A enables you to explore your data using intuitive, natural language capabilities and receive answers in the form of charts and graphs. На сегодняшний день при использовании DirectQuery эта функция не поддерживается для наборов данных.However, it is currently not supported on datasets using DirectQuery.
  • Использование функции обзора в Excel снижает производительность. Вы можете исследовать данные с помощью функции обзора в Excel для набора данных.Using Explore in Excel will likely result in poorer performance: It is possible to explore your data by using the “Explore in Excel” capability on a dataset. Это позволит создать в Excel сводные таблицы и диаграммы.This will allow Pivot Tables and Pivot Charts to be created in Excel. Хотя DirectQuery и поддерживает эту возможность для наборов данных, производительность становится значительно ниже, чем при создании визуальных элементов в Power BI. Поэтому, если использование Excel важно для сценариев, это следует учесть при решении использовать DirectQuery.While this capability is supported on datasets using DirectQuery, the performance is generally slower than creating visuals in Power BI, and therefore if the use of Excel is important for your scenarios, this should be accounted for in your decision to use DirectQuery.

БезопасностьSecurity

Как уже было описано выше, отчет DirectQuery всегда будет использовать те же самые основные учетные данные для подключения к базовому источнику данных после публикации в службе Power BI.As discussed earlier in this article, a report using DirectQuery will always use the same fixed credentials to connect to the underlying data source, after publish to the Power BI service. Мы рекомендуем снова обратить внимание на то, что это относится именно к DirectQuery, а не к динамическим подключениям к службам SQL Server Analysis Services. Для них этот аспект отличается.Again, note this refers specifically to DirectQuery, not to live connections to SQL Server Analysis Services, which is different in this respect. Поэтому сразу после публикации отчета DirectQuery следует настроить необходимые учетные данные пользователя.Hence immediately after publish of a DirectQuery report, it is necessary to configure the credentials of the user that will be used. Если этого не сделать, открытие отчета в службе Power BI завершится ошибкой.Until this is done, opening the report on the Power BI service would result in an error.

После указания учетных данных пользователя эти учетные данные и будут использоваться в дальнейшем, независимо от пользователя, который открывает отчет.Once the user credentials are provided, then those credentials will be used, irrespective of the user who opens the report. В этой связи это напоминает режим импорта данных, то есть каждый пользователь будет видеть те же данные, если только не определить безопасность на уровне строк как часть отчета.In this regard it is exactly like imported data, in that every user will see the same data, unless Row Level Security has been defined as part of the report. Если в базовом источнике определены какие-либо правила обеспечения безопасности, должное внимание необходимо также уделить совместному использованию отчета.Hence the same attention must be paid to sharing the report, if there are any security rules defined in the underlying source.

Как работает отчет в службе Power BIBehavior in the Power BI service

В этом разделе описывается работа отчета DirectQuery в службе Power BI. Этот вопрос рассматривается, чтобы понять степень нагрузки, которую получает внутренний источник данных, с учетом количества пользователей, которым будет предоставлен доступ к отчету и панели мониторинга, сложности отчета и вопроса безопасности на уровне строк.This section describes the behavior of a DirectQuery report in the Power BI service, primarily so as to be able to understand the degree of load that will be placed on the back end data source, given the number of users that the report and dashboard will be shared with, the complexity of the report, and whether Row Level Security has been defined in the report.

Отчеты: их открытие, взаимодействие с ними и редактированиеReports – opening, interacting with, editing

При открытии отчета на видимой в данный момент странице будут обновлены все визуальные элементы.When a report is opened, then all the visuals on the currently visible page will refresh. Как правило, каждый визуальный элемент потребует хотя бы один запрос к базовому источнику данных.Each visual will generally require at least one query to the underlying data source. Некоторые визуальные элементы могут потребовать более одного запроса (к примеру, при наличии статистических выражений из двух разных таблиц фактов или содержании сложной меры или общих значений неаддиктивных мер, например Count Distinct).Some visuals might require more than one query (for example, if it showed aggregate values from two different fact tables, or contained a more complex measure, or contained totals of a non-additive measure like Count Distinct). Перемещение на новую страницу приведет к обновлению этих визуальных элементов, что в свою очередь завершится новым набором запросов к базовому источнику.Moving to a new page will result in those visuals being refreshed, resulting in a new set of queries to the underlying source.

Любое действие пользователя в отчете может привести к обновлению визуализаций.Every user interaction on the report might result in visuals being refreshed. Например, выбор другого значения среза потребует отправки нового набора запросов для обновления всех затронутых визуальных элементов.For example, selecting a different value on a slicer will require sending a new set of queries to refresh all of the effected visuals. Это будет также актуально, если щелкнуть визуальный элемент для перекрестного выделения других элементов или при изменении фильтра.The same is true for clicking on a visual to cross-highlight other visuals, or changing a filter.

Похожим образом изменение нового отчета требует отправки запросов для каждого действия, необходимого для получения конечного соответствующего визуального элемента.Similarly of course, editing a new report with require queries to be sent for each step on the path to produce the final desired visual.

Результаты кэшируются, что обеспечивает мгновенное обновление визуального элемента, если некоторые результаты соответствуют результатам в кэше.There is some caching of results, so that the refresh of a visual will be instantaneous if the exact same results have recently been obtained. Если безопасность на уровне строк определена как часть отчета, такие кэши не являются общими для пользователей.Such caches are not shared across users, if there is any Row Level Security defined as part of the report.

Обновление панели мониторингаDashboard Refresh

Отдельные визуальные элементы или целые страницы можно закрепить на панели мониторинга как плитки.Individual visuals, or entire pages, can be pinned to dashboard as tiles. Плитки, основанные на наборах данных DirectQuery, затем автоматически обновляются в соответствии с расписанием, что приводит к отправке запросов к серверному источнику данных.Tiles based on DirectQuery datasets are then refreshed automatically according to a schedule, resulting in queries being sent to the backend data source. По умолчанию это происходит каждый час, но этот процесс можно также настроить в параметрах набора данных. Так, можно установить еженедельное обновление или же обновление каждые 15 минут.By default, this occurs every hour, but can be configured as part of Dataset settings to be between weekly, and every 15 minutes.

Если в модели не определена безопасность на уровне строк, это означает, что каждая плитка будет обновлена один раз, а результаты будут доступны всем пользователям.If no Row Level Security is defined in the model, this means that each tile would be refreshed once, and the results shared across all users. Если же безопасность на уровне строк определена, тогда можно ожидать большого коэффициента пересчета — каждая плитка потребует, чтобы отдельные запросы на каждого пользователя были отправлены в базовый источник.If Row Level Security is defined, then there can be a large multiplier effect – each tile requires separate queries per user to be sent to the underlying source.

Таким образом, панель мониторинга с десятью плитками, доступная 100 пользователям, созданная в наборе данных с помощью DirectQuery с определенной безопасностью на уровне строк, а также настроенная на обновление каждые 15 минут, приведет как минимум к 1000 запросам, которые каждые 15 минут будут отправляться во внутренний источник.Hence a dashboard with ten tiles, shared with 100 users, created on a dataset using DirectQuery with Row Level Security, and configured to refresh every 15 minutes, would result in at least 1000 queries being sent every 15 minutes to the back end source.

Из этого следует, что должное внимание нужно уделить использованию безопасности на уровне строк, а также настройке расписания обновления.Hence careful consideration must be paid to the use of Row Level Security, and the configuring of the refresh schedule.

Истечение времени ожиданияTimeouts

В службе Power BI для отдельных запросов установлено время ожидания в четыре минуты. Это значит, что запросы, время ожидания которых превышает четыре минуты, завершатся сбоем.A timeout of four minutes is applied to individual queries in the Power BI service, and queries taking longer than that will simply fail. Как уже подчеркивалось ранее, мы рекомендуем использовать DirectQuery для источников, которые обеспечивают интерактивную обработку запросов. Поэтому это ограничение установлено для предотвращения проблем, связанных с чрезмерно долгим выполнением.As stressed earlier, it is recommended that DirectQuery be used for sources that provide near interactive query performance, so this limit is intended to prevent issues from overly long execution times.

Другие ограниченияOther implications

Ниже перечислены некоторые другие ограничения использования DirectQuery.Some other general implications of using DirectQuery are the following:

  • Если данные изменяются, необходимо выполнить обновление, чтобы обеспечить отображение последних данных. Возможность использования кэша не гарантирует отображения последних данных визуальным элементом.If data is changing, it is necessary to Refresh to ensure the latest data is shown: Given the use of caches, there is no guarantee that the visual is always showing the latest data. Например, визуальный элемент может отображать транзакции за последний день.For example, a visual might show the transactions in the last day. Из-за изменения среза его нужно обновить, чтобы показать транзакции за последние два дня, включая самые недавние.Then due to a slicer being changed, it might refresh to show the transactions for the last two days, including some very recent, newly arrived transactions. Возвращение среза к исходному значению приведет к тому, что он снова покажет недавно полученное кэшированное значение и не будет содержать новую транзакцию, которая прежде была доступна.Returning the slicer to its original value would result in it again showing the cached value previously obtained, that would not include the newly arrived transaction seen before.

    Операция обновления очистит кэш и обновит все визуальные элементы на странице, чтобы отобразить последние данные.Selecting Refresh will clear any caches, and refresh all the visuals on the page to show the latest data.

  • Если данные изменяются, гарантия согласованности между визуальными элементами отсутствует. Разные визуальные элементы (на одной странице или на разных) можно обновлять в разное время.If data is changing, there is no guarantee of consistency between visuals: Different visuals, whether on the same page or on different pages, might be refreshed at different times. Таким образом, если данные в базовом источнике изменяются, нет никакой гарантии, что каждый визуальный элемент будет отображать данные в одно время.Thus if the data in the underlying source is changing, there is no guarantee that each visual will be showing the data at the exact same point of time. На самом деле при условии, что визуальный элемент требует выполнения более одного запроса (например, чтобы получить подробные сведения и общие), — не гарантируется согласованность даже внутри отдельного визуального элемента.Indeed, given that sometimes more than one query is required for a single visual (for example, to obtain the details and the totals) then consistency even within a single visual is not guaranteed. Такая гарантия требует затрат на обновление всех визуальных элементов при каждом обновлении одного из них, а также использования дорогостоящих функций, например изоляции моментального снимка, в базовом источнике данных.To guarantee this would require the overhead of refreshing all visuals whenever any visual refreshed, in tandem with the use of costly features like Snapshot Isolation in the underlying data source.

    Эту проблему можно обойти, снова-таки используя операцию обновления, чтобы обновить все визуальные элементы на странице.This issue can be mitigated to a large extent by again selecting Refresh, to will refresh all of the visuals on the page. Следует также отметить, что даже в режиме импорта имеется похожая проблема обеспечения согласованности при импорте данных из нескольких таблиц.And it should be noted that even if using Import mode, there is a similar problem of guaranteeing consistency if importing data from more than one table.

  • Обновление в Power BI Desktop требуется для отражения любых изменений метаданных. После публикации отчета операция обновления просто обновит визуальные элементы в отчете.Refresh in Power BI Desktop is needed to reflect any metadata changes: After a report is published, Refresh will simply refresh the visuals in the report. Если изменилась схема базового источника, тогда эти изменения не будут автоматически применены для изменения доступных полей в списке полей.If the schema of the underlying source has changed, then those changes are not automatically applied to change the available fields in the field list. Таким образом, если таблицы или столбцы были удалены из базового источника, это может привести к сбою запроса при обновлении.Thus if tables or columns have been removed from the underlying source, it might result in query failure upon refresh. Если открыть отчет в Power BI Desktop и выполнить операцию обновления, поля в модели обновятся и отобразятся изменения.Opening the report in Power BI Desktop, and choosing Refresh, will update the fields in the model to reflect the changes.
  • Ограничение в один миллион строк, возвращаемых для любого запроса. Для количества строк, возвращаемых в любом отдельном запросе к базовому источнику, установлено фиксированное значение — один миллион.Limit of one million rows returned on any query: There is a fixed limit of one million rows placed on the number of rows that can be returned in any single query to the underlying source. Это обычно не приводит ни к каким результатам, и визуальные элементы сами по себе не отображают многие значения.This generally has no practical implications, and visuals themselves aren’t going to display that many points. Тем не менее столкнуться с этим ограничением можно в случаях, когда Power BI не полностью оптимизирует переданные запросы и запрашивается некоторый промежуточный результат, превышающий установленное ограничение.However, the limit can occur in cases where Power BI is not fully optimizing the queries sent, and there is some intermediate result being requested that exceeds the limit. Это ограничение актуально также при создании визуального элемента — при выполнении действий для получения соответствующего конечного состояния.It can also occur whilst building a visual, on the path to a more reasonable final state. Например, добавление столбцов Customer (Клиент) и TotalSalesQuantity превысило бы это ограничение, если бы число клиентов было больше 1 миллиона (если, конечно, не применить соответствующий фильтр).For example, including Customer and TotalSalesQuantity would hit this limit if there were more than 1m customers, until some filter were applied.

    В этом случае вы бы получили следующую ошибку: "Набор результатов запроса к внешнему источнику данных превышает максимально допустимое количество строк: (1000000 строк)".The error that would be returned would be “The resultset of a query to external data source has exceeded the maximum allowed size of '1000000' rows.”

  • Невозможно изменить режим импорта на режим DirectQuery. Имейте в виду, что в общем-то можно переключить модель из режима DirectQuery на режим импорта. Это значит, что все необходимые данные будут импортированы.Cannot change from import to DirectQuery mode: Note that while it's generally possible to switch a model from DirectQuery mode to use import mode, this means all the necessary data must be imported. Однако невозможно выполнить обратное переключение (из режима импорта на режим DirectQuery), так как в режиме DirectQuery не поддерживается некоторый набор функций.It is also not possible to switch back (primarily due to the set of features not supported in DirectQuery mode). Модели DirectQuery для многомерных источников, таких как SAP BW, также невозможно переключить из DirectQuery на режим импорта из-за отличной обработки внешних мер.DirectQuery models over multidimensional sources like SAP BW also cannot be switched from DirectQuery to import, due to the completely different treatment of external measures.

DirectQuery в службе Power BIDirectQuery in the Power BI service

Все источники поддерживаются из Power BI Desktop.All sources are supported from Power BI Desktop. Некоторые источники также доступны в рамках службы Power BI.Some sources are also available directly from within the Power BI service. Например, корпоративный пользователь может использовать Power BI для подключения к данным в Salesforce, а также получить мгновенный доступ к панели мониторинга без использования Power BI Desktop.For example, it is possible for a business user to use Power BI to connect to their data in Salesforce, and immediately get a dashboard, without use of Power BI Desktop.

Непосредственно в службе доступны только два источника для DirectQuery:Only two of the DirectQuery enabled-sources are available directly in the service:

  • Spark;Spark
  • Хранилище данных SQL AzureAzure SQL Data Warehouse

Однако мы настоятельно рекомендуем при любом использовании DirectQuery для этих двух источников запускать режим с помощью Power BI Desktop.However, it is strongly recommended that any use of DirectQuery over those two sources start within Power BI Desktop. Причина заключается в следующем. Если подключение изначально устанавливается в службе Power BI, можно столкнуться со многими существенными ограничениями. Так как установка подключения в службе Power BI была выполнена мгновенно (без включения расширенных процессов), есть вероятность столкнуться с ограничениями при дальнейшем расширении конечного отчета (например, в таком случае невозможно выполнить какие-либо вычисления, использовать аналитические функции или даже обновить метаданные для отображения изменений базовой схемы).The reason is that when the connection is initially made in the Power BI service, many key limitations will apply, meaning that while the start point was easy (starting in the Power BI service), there are limitations on enhancing the resulting report any further (for example, it's not possible then to create any calculations, or use many analytical features, or even refresh the metadata to reflect any changes to the underlying schema).

Руководство по успешному использованию DirectQueryGuidance for using DirectQuery successfully

Если вы собираетесь использовать DirectQuery, мы рекомендуем ознакомиться с этим разделом, чтобы обеспечить успешную работу с этим режимом.If you're going to use DirectQuery, then this section provides you with some high level guidance on how to ensure success. Рекомендации в этом разделе разработаны с учетом ограничений использования DirectQuery, описанных выше.The guidance in this section is derived from the implications of using DirectQuery that have been described in this article.

Производительность серверного источника данныхBackend data source performance

Мы настоятельно рекомендуем проверить возможность обновления отдельных визуальных элементов за определенное время.It is strongly recommended to validate that simple visuals will be able to refresh in a reasonable time. Для обеспечения соответствующей интерактивности обновление должно занимать не более 5 секунд.This should be within 5 seconds to have a reasonable interactive experience. Если обновление визуальных элементов занимает более 30 секунд, вполне вероятно возникновение дальнейших проблем после публикации отчета, из-за чего решение станет непригодным.Certainly if visuals are taking longer than 30 seconds, then it's highly likely that further issues will occur following publication of the report, which will make the solution unworkable.

Если запросы выполняются медленно, тогда в первую очередь необходимо изучить те из них, которые были отправлены в базовый источник, а также понять причину, повлиявшую на производительность запроса.If queries are slow, then the first point of investigation is to examine the queries being sent to the underlying source, and the reason for the query performance being observed. Этот раздел не охватывает весь ряд рекомендаций по оптимизации базы данных для всех наборов возможных базовых источников, однако в нем рассматриваются рекомендации для стандартной базы данных, которые применяются в большинстве случаев:This topic doesn't cover the wide range of database optimization best practices across the full set of potential underlying sources, but it does apply to the standard database practices that apply to most situations:

  • связи, основанные на столбцах с целыми числами, обычно имеют лучшую производительность, чем соединения в столбцах других типов данных;Relationships based on integer columns generally perform better than joins on columns of other data types
  • необходимо создать соответствующие индексы, что обычно означает использование индексов хранилищ столбцов в источниках, которые поддерживают эти индексы (например, SQL Server);The appropriate indexes should be created, which generally means the use of column store indexes in those sources that support them (for example, SQL Server).
  • должны быть обновлены все необходимые в источнике статистические данные.Any necessary statistics in the source should be updated

Руководство по проектированию моделиModel Design Guidance

При определении модели учитывайте следующее:When defining the model, consider doing the following:

  • Избегайте сложных запросов в редакторе запросов.Avoid complex queries in Query Editor. Запрос, определенный в редакторе запросов, будет преобразован в один запрос SQL, который затем будет включен в подзапрос каждого запроса, отправленного в таблицу.The query that's defined in the Query Editor will be translated into a single SQL query, that will then be included in the subselect of every query sent to that table. Если этот запрос будет сложным, это может привести к проблемам производительности каждого отправленного запроса.If that query is complex, it might result in performance issues on ever query sent. Фактический SQL-запрос для набора действий можно получить, если выбрать последнее действие в редакторе запросов, а также выбрать в контекстном меню Просмотреть машинный запрос.The actual SQL query for a set of steps can be obtained by selecting the last step in Query Editor, and choosing View Native Query from the context menu.
  • Используйте простые меры.Keep measures simple. По крайней мере поначалу мы рекомендуем ограничить меры, чтобы упростить статистические выражения.At least initially, it is recommended to limit measures to simple aggregates. Затем, если дальнейшая работа выполняется оптимально, можно определить более сложные меры, но при этом следить за производительностью каждой.Then if those perform in a satisfactory manner, more complex measures can be defined, but paying attention to the performance for each.
  • Избегайте связей в вычисляемых столбцах.Avoid relationships on calculated columns. Это особенно важно для баз данных, в которых необходимо объединять несколько столбцов.This is particularly relevant to databases where it is necessary to perform multi-column joins. На сегодняшний день в Power BI не предусмотрена связь на основе нескольких столбцов, как FK/PK.Power BI today does not allow a relationship to be based on multiple columns as the FK/PK. Наиболее распространенным решением является объединение столбцов с помощью вычисляемого столбца и установка соединения для этого столбца.The common workaround is to concatenate the columns together using a calculated column, and base the join on that. Хотя этот способ является оптимальным для режима импорта, при использовании DirectQuery это приводит к соединению в выражении, из-за чего становится невозможным использование любых индексов, а также снижается производительность.While this workaround is reasonable for imported data, in the case of DirectQuery it results in a join on an expression, that commonly prevents use of any indexes, and leads to poor performance. Единственное решение — фактически материализовать несколько столбцов в один столбец в базовой базе данных.The only workaround is to actually materialize the multiple columns into a single column in the underlying database.
  • Избегайте связей в столбцах с данными типа uniqueidentifier.Avoid relationships on uniqueidentifier columns. Power BI не поддерживает тип данных uniqueidentifier (уникальные идентификаторы).Power BI does not natively support a datatype of uniqueidentifier. Поэтому определение связи между столбцами типа uniqueidentifier приведет к запросу с соединением, включающим Cast.Hence defining a relationship between columns of type uniqueidentifier column will result in a query with a join involving a Cast. Это снова-таки вызовет снижение производительности.Again, this commonly leads to poor performance. Пока для этого случая не найдется оптимальное решение, единственным выходом остается материализовать столбцы альтернативного типа в базовой базе данных.Until this case is specifically optimized, the only workaround is to materialize columns of an alternative type in the underlying database.
  • Скройте в связях столбец для применения.Hide the to column on relationships. Столбец для применения в связях (преимущественно первичный ключ в таблице для применения) необходимо скрыть, чтобы он не отображался в списке поля и, таким образом, не мог быть использован в визуальных элементах.The to column on relationships (commonly the primary key on the to table) should be hidden, so that it does not appear in the field list, and therefore cannot be used in visuals. Часто столбцы, на которых основаны связи, являются по сути системными столбцами (например, суррогатными ключами в хранилище данных), и скрывать такие столбцы все же рекомендуется.Often the columns on which relationships are based are in fact system columns (for example, surrogate keys in a data warehouse) and hiding such columns is good practice anyway. Если столбец не имеет смысла, тогда представьте видимый вычисляемый столбец, который содержит простое выражение, равное значению первичного ключа.If the column does have meaning, then introduce a calculated column that is visible, and that has a simple expression of being equal to the primary key. Например:For example:

    ProductKey_PK   (Destination of a relationship, hidden)
    ProductKey (= [ProductKey_PK],   visible)
    ProductName
    ...
    

    Это нужно сделать, чтобы избежать проблем производительности, с которыми можно столкнуться, если визуальный элемент содержит столбец первичного ключа.The reason for doing this is simply to avoid a performance issue that can occur otherwise if a visual includes the primary key column.

  • Изучите все случаи использования вычисляемых столбцов и изменений типов данных.Examine all uses of calculated columns and data type changes. Использование этих возможностей не обязательно приведет к негативным последствиям. Скорее, к отправке запросов в базовый источник, содержащий выражения, а не обычные ссылки на столбцы, что в свою очередь может привести к отсутствию возможности использовать индексы.Use of these capabilities are not necessarily harmful, they result in the queries sent to the underlying source containing expressions rather than simple references to columns, that again might result in indexes not being used.
  • Избегайте использования (предварительной версии) двусторонней перекрестной фильтрации в связях.Avoid use of the (preview) bi-directional cross filtering on relationships.
  • Попробуйте установить флажок Предполагать целостность данных.Experiment with setting Assume referential integrity. Если для связей установить флажок Предполагать целостность данных, запросы смогут использовать инструкции INNER JOIN вместо OUTER JOIN.The Assume Referential Integrity setting on relationships enables queries to use INNER JOIN statements rather than OUTER JOIN. Это улучшит производительность запроса, хотя она и зависит в большей степени от конкретных параметров источника данных.This generally improves query performance, though it does depend on the specifics of the data source.
  • Не используйте относительную фильтрацию данных в редакторе запросов.Do not use the relative data filtering in Query Editor. Вы можете определить относительную фильтрацию данных в редакторе запросов.It's possible to define relative date filtering in Query Editor. Например, чтобы выполнить фильтрацию строк, содержащих данные за последние 14 дней.For example, to filter to the rows where the date is in the last 14 days.

    Однако при этом будет использоваться фильтрация на основе установленной даты на момент создания запроса.However, this will be translated into a filter based on the fixed date, as at the time the query was authored. Это можно увидеть, если просмотреть исходный запрос.This can be seen from viewing the native query.

    Конечно, результаты не будут соответствовать ожиданиям.This is almost certainly not what was wanted. Чтобы обеспечить применение фильтра на основе даты на момент выполнения отчета, примените параметр "Фильтр отчета".To ensure the filter is applied based upon the date as at the time the report is executed then instead apply the filter in the report as a Report Filter. На сегодняшний день это можно сделать, создав вычисляемый столбец, вычисляющий количество прошедших дней (с помощью функции DAX DATE()), а затем используя этот вычисляемый столбец в фильтре.Currently this would be done by creating a calculated column calculating the number of days ago (using the DAX DATE() function), and then using that calculated column in a filter.

Руководство по проектированию отчетаReport Design Guidance

Создавая отчет с помощью подключения DirectQuery, соблюдайте следующие рекомендации:When creating a report using a DirectQuery connection, adhere to the following guidance:

  • Сначала примените фильтры: при создании визуального элемента всегда применяйте все возможные фильтры.Apply filters first: Always apply any applicable filters at the start of building a visual. Например, вместо того чтобы выполнять ряд действий со столбцами TotalSalesAmount и ProductName, а затем выполнять фильтрацию по году, примените фильтр по году сразу же при создании визуального элемента.For example, rather than drag in the TotalSalesAmount, and ProductName, then filter to a particular year, apply the filter on Year at the very start. Это можно объяснить следующим образом. Так как на каждом шаге создания визуального элемента отправляется запрос, а также учитывая при этом возможность выполнения других действий (до непосредственного завершения выполнения первого запроса), на базовый источник создается ненужная нагрузка.This is because each step of building a visual will send a query, and whilst it is possible to then make another change before the first query has completed, this still leaves unnecessary load on the underlying source. Изначальное применение фильтров делает менее затратными промежуточные запросы.By applying filters early, it generally makes those intermediate queries less costly. Игнорирование изначального применения фильтров может привести к превышению ограничения в 1 млн строк, описанному выше.Also, failing to apply filters early can result in hitting the 1m row limit above.
  • Ограничьте количество визуальных элементов на странице: при открытии страницы (или изменении фильтра или среза на уровне страницы) происходит обновление всех визуальных элементов на странице.Limit the number of visuals on a page: When a page is opened (or some page level slicer or filter changed) then all of the visuals on a page are refreshed. Также имеется ограничение для количества одновременно отправленных запросов. При увеличении количества визуальных элементов некоторые из них будут обновляться в последовательном режиме, что увеличивает время, необходимое для обновления всей страницы.There is also a limit on the number of queries that are sent in parallel, hence as the number of visuals increases, some of the visuals will be refreshed in a serial manner, increasing the time taken to refresh the entire page. По этой причине рекомендуется ограничить количество визуальных элементов на одной странице и вместо этого использовать несколько более простых страниц.For this reason it's recommended to limit the number of visuals on a single page, and instead have more, simpler pages.
  • Отключите механизм взаимодействия между визуальными элементами: по умолчанию визуализации на странице отчета можно использовать для кроссфильтрации и перекрестного выделения других визуализаций на странице.Consider switching off interaction between visuals: By default, visualizations on a report page can be used to cross-filter and cross-highlight the other visualizations on the page. Например, если вы выберете на круговой диаграмме "1999", гистограмма станет перекрестно выделенной для отображения продаж по категории для запроса "1999".For example, having selected “1999” on the pie chart, the column chart is cross highlighted to show the sales by category for “1999”.

    Тем не менее этим взаимодействием можно управлять, о чем подробнее описано в этой статье.However, this interaction can be controlled as described in this article. В DirectQuery такие кроссфильтрация и перекрестное выделение требуют отправки запросов в базовый источник, поэтому взаимодействие следует отключить, чтобы сократить время ответа для пользовательских запросов.In DirectQuery such cross-filtering and cross-highlighting requires queries to be sent to the underlying source, so the interaction should be switched off if the time taken to respond to users' selections would be unreasonably long.

  • Включите совместное использование только для отчета: общий доступ к содержимому после публикации в службе Power BI можно включить разными способами.Consider sharing the report only: There are different ways of sharing content after publishing to the Power BI service. В случае с DirectQuery мы рекомендуем предоставить общий доступ только к готовому отчету (а не давать возможность пользователям создавать новые отчеты и, таким образом, ставить под потенциальную угрозу производительность создаваемых визуальных элементов).In the case of DirectQuery, it's advisable to only considering sharing the finished report, rather than allow other users to author new reports (and potentially encounter performance issues for the particular visuals that they build).

Кроме того, мы рекомендуем также обратить внимание на то, что каждая из приведенных ниже функций может вызвать проблемы производительности:In addition to the above list of suggestions, note that each of the following reporting capabilities can cause performance issues:

  • Фильтры мер: визуальные элементы, содержащие меры (или статистические выражения столбцов), могут содержать фильтры в этих мерах.Measure filters: Visuals containing measures (or aggregates of columns) can contain filters in those measures. Например, визуальный элемент ниже отображает столбец SalesAmount в параметре "Категория", но при этом включает категории с количеством продаж, превышающих 20 млн.For example, the visual below shows SalesAmount by Category, but only including those Categories with more than 20M of sales.

    Это приведет к отправке двух запросов в базовый источник данных.This will result in two queries being sent to the underlying source:

    • Первый запрос извлечет категории, соответствующие условию продаж свыше 20 млн.The first query will retrieve the Categories meeting the condition (Sales > 20M)
    • Второй запрос найдет необходимые данные для визуального элемента, включая категории, соответствующие условию предложения WHERE.The second query will then retrieve the necessary data for the visual, including the Categories that met the condition in the WHJERE clause.

    Это оптимальное решение для сотен и тысяч категорий, как показано в этом примере.This generally performs just fine if there are hundreds or thousands of categories, as in this example. В случае чрезмерно большого числа категорий производительность снизится. (Хотя по сути запрос завершится ошибкой, если число категорий, соответствующих условию, превысит миллион, т. е. установленное ограничение, рассмотренное в этой статье выше.)Performance can degrade if the number of categories is much larger (and indeed, the query will fail if there were more than a million categories meeting the condition, due to the one million row limit discussed earlier).

  • Фильтры TopN: можно определить расширенные фильтры для фильтрации только верхних (или нижних) значений N, сортированных по определенным мерам, например для включения только первых 10 категорий в визуальном элементе выше.TopN filters: Advanced filters can be defined to filter on only the Top (or Bottom) N values ranked by some measure, for example, to only include the Top 10 Categories in the visual above. Это снова приведет к отправке двух запросов в базовый источник данных.This will again result in two queries being sent to the underlying source. Однако первый запрос вернет все категории из базового источника, и фильтры TopN будут применены на основе возвращенных результатов.However, the first query will return all categories from the underlying source, and then the TopN are determined based on the returned results. В зависимости от количества включенных столбцов это может привести к проблемам с производительностью (или сбоям запросов из-за ограничения строк в 1 млн).Depending on the cardinality of the column involved, this can lead to performance issues (or query failures due to the 1m row limit).
  • Медиана: в целом любое статистическое выражение (Sum, Count Distinct и т. д.) передается в базовый источник.Median: Generally, any aggregation (Sum, Count Distinct, so on) is pushed to the underlying source. Но к медиане это не относится, так как это статистическое выражение обычно не поддерживается базовым источником.However, this is not true for Median, as this aggregate is generally not supported by the underlying source. В таких случаях подробные данные извлекаются из базового источника, и медиана вычисляется на основе возвращенных результатов.In such cases, the detail data is retrieved from the underlying source, and the Median calculated from the returned results. Это целесообразно, если медиана будет рассчитываться для относительно небольшого количества результатов, в противном случае производительность будет снижена (или же запросы завершатся сбоем из-за ограничения в 1 млн строк).This is reasonable when the median is to be calculated over a relatively small number of results, but performance issues (or query failures due to the 1m row limit) will occur if the cardinality is large. Оптимально использовать медиану населения страны, а не цены продажи.For example, Median Country Population might be reasonable, but Median Sales Price might not be.
  • Расширенные текстовые фильтры (для значений типа "содержит" и аналогичных): при фильтрации текстового столбца расширенная фильтрация позволяет выполнять фильтрацию для значений типа "содержит", "начинается с" и других.Advanced text filters (‘contains’ and similar): When filtering on a text column, the advanced filtering allows filters like ‘contains’ and ‘begins with’ and so on. Использование этих фильтров может привести к снижению производительности для некоторых источников данных.These filters can certainly result in degraded performance for some data sources. В частности, фильтр со значением по умолчанию типа "содержит" не рекомендуется использовать, если требуется точное соответствие ("имеется" или "не имеется").In particular, the default ‘contains’ filter should not be used if what is really required is an exact match (‘is’ or ‘is not’). Несмотря на то что результаты могут быть одинаковыми, в зависимости от фактических данных производительность может значительно отличаться из-за использования индексов.Although the results might be the same, depending on the actual data, the performance might be drastically different due to the use of indexes.
  • Выбор нескольких наборов элементов в срезе: по умолчанию можно выбрать только один набор элементов в срезе.Multi select slicers: By default, slicers only allow a single selection to be made. Выбор нескольких фильтров может вызвать проблемы производительности. Если пользователь выбирает один набор элементов в срезе (например, 10 заинтересовавших его продуктов), каждый следующий выбор нового набора приведет к отправке запроса в серверный источник.Allowing multi selection in filters can cause some performance issues, because as the user selects a set of items in the slicer (for example, the ten products they are interested in), then each new selection will result in queries being sent to the backend source. Хотя пользователь и может выбрать следующий элемент до завершения первого запроса, это вызовет дополнительную нагрузку на базовый источник.Whilst the user can select the next item prior to the query completing, this does result in extra load on the underlying source.

Диагностика проблем производительностиDiagnosing performance issues

В этом разделе описывается диагностика проблем с производительностью, а также получение более подробных сведений для оптимизации отчетов.This section describes how to diagnose performance issues, or how to get more detailed information to allow the reports to be optimized.

Мы настоятельно рекомендуем выполнять любую диагностику проблем производительности в Power BI Desktop, а не в службе Power BI.It's strongly recommended that any diagnosis of performance issues starts in Power BI Desktop, rather than in the Power BI service. Очень часто проблемы с производительностью возникают на основе уровня производительности базового источника, и их проще всего обнаружить и проанализировать в более изолированной среде, как например в Power BI Desktop, что также предотвращает возможность столкновения с определенными компонентами (например, Power BI Gateway).It's commonly the case that performance issues are simply based on the level of performance of the underlying source, and these are more easily identified and diagnosed in the much more isolated environment of Power BI Desktop, and initially eliminates certain components (such as the Power BI gateway). Только в том случае, если проблемы производительности невозможно диагностировать в Power BI Desktop, необходимо рассмотреть отдельные аспекты отчета в службе Power BI.Only if the performance issues are found to not be present with Power BI Desktop should investigation focus on the specifics of the report in the Power BI service.

Аналогичным образом рекомендуется в первую очередь обеспечить надежную защиту для отдельного визуального элемента, а не нескольких на странице.Similarly, it is recommended to first try to isolate any issues to an individual visual, rather than many visuals on a page.

Итак, давайте предположим, что эти действия (рассмотренные в предыдущих абзацах этого раздела) выполнены. Теперь у нас есть один визуальный элемент на странице в Power BI Desktop, производительность которого достаточно низкая.So, let's say those steps (in the previous paragraphs in this section) have been taken - we now have a single visual on a page in Power BI Desktop that is still sluggish. Чтобы определить запросы, отправленные в базовый источник Power BI Desktop, можно просмотреть сведения о трассировке (диагностике), предоставляемые этим источником.To determine the queries that are sent to the underlying source by Power BI Desktop, it's possible to view traces/diagnostic information that might be emitted by that source. Такие трассировки могут также содержать полезную информацию и дополнительные сведения о выполнении запроса и возможностях его оптимизации.Such traces might also contain useful information about the details of how the query was executed, and how it can be improved.

Кроме того, даже если мы не получим сведений о трассировке из источника, у нас все равно есть возможность просмотреть запросы, отправленные Power BI, а также время их выполнения, что будет рассматриваться далее.Further, even in the absence of such traces from the source, it's possible to view the queries sent by Power BI, along with their execution times, as described next.

Определение запросов, отправленных Power BI DesktopDetermining the queries sent by Power BI Desktop

По умолчанию Power BI Desktop записывает события во время определенного сеанса в файл трассировки, который называется FlightRecorderCurrent.trc.By default, Power BI Desktop logs events during a given session to a trace file called FlightRecorderCurrent.trc.

Для некоторых источников DirectQuery этот журнал включает все запросы, отправленные в базовый источник данных (другие источники DirectQuery будут включены позже).For some DirectQuery sources, this log includes all queries sent to the underlying data source (the remaining DirectQuery sources will be included in the future). Ниже перечислены источники, которые отправляют запросы в журнал.The sources that send queries to the log are the following:

  • SQL ServerSQL Server
  • База данных SQL AzureAzure SQL Database
  • Хранилище данных SQL AzureAzure SQL Data warehouse
  • OracleOracle
  • TeradataTeradata
  • SAP HANASAP HANA

Файл трассировки можно найти в папке AppData для текущего пользователя:The trace file can be found in the AppData folder for the current user:

\<User>\AppData\Local\Microsoft\Power BI Desktop\AnalysisServicesWorkspaces

Вот простой способ получить эту папку: в Power BI Desktop выберите Файл > Параметры и настройки > Параметры > , а затем выберите Диагностика.Here's an easy way to get to this folder: In Power BI Desktop select File > Options and settings > Options, and then select Diagnostics. Появится следующее диалоговое окно:The following dialog window appears:

Когда вы щелкните ссылку Открыть папку трассировки в параметрах диагностики, откроется следующая папка:When you select the Open traces folder link, under Diagnostic Options, the following folder opens:

\<User>\AppData\Local\Microsoft\Power BI Desktop\Traces

Когда вы перейдете к родительской папке, отобразится папка, содержащая AnalysisServicesWorkspaces, которая будет содержать одну вложенную папку рабочей области для каждого открытого экземпляра Power BI Desktop.Navigating to that folder's parent folder displays the folder containing AnalysisServicesWorkspaces, which will contain one workspace subfolder for every open instance of Power BI Desktop. Эти вложенные папки содержат в имени суффикс целого числа, например AnalysisServicesWorkspace2058279583.These subfolders are named with an integer suffix, such as AnalysisServicesWorkspace2058279583.

В этой папке находится вложенная папка \Data, содержащая файл трассировки FlightRecorderCurrent.trc для текущего сеанса Power BI.Inside that folder is a \Data subfolder that contains the trace file FlightRecorderCurrent.trc for the current Power BI session. Соответствующая папка рабочей области удаляется по завершении связанного сеанса Power BI Desktop.The corresponding workspace folder is deleted when the associated Power BI Desktop session ends.

Файлы трассировки можно считать с помощью средства SQL Server Profiler, которое доступно для скачивания бесплатно, как часть SQL Server Management Studio.The trace files can be read using the SQL Server Profiler tool, which is available as a free download as part of SQL Server Management Studio. Получить SQL Server Management Studio вы можете из этого расположения.You can get that from this location.

После скачивания и установки SQL Server Management Studio запустите SQL Server Profiler.Once you download and install SQL Server Management Studio, run SQL Server Profiler.

Чтобы открыть файл трассировки, сделайте следующее:To open the trace file, take the following steps:

  1. В SQL Server Profiler выберите Файл > Открыть > Файл трассировки.In SQL Server Profiler, select File > Open > Trace file
  2. Введите путь к файлу трассировки для текущего открытого сеанса Power BI, например:Enter the path to the trace file for the currently open Power BI session, such as:

      C:\Users\<user>\AppData\Local\Microsoft\Power BI Desktop\AnalysisServicesWorkspaces\AnalysisServicesWorkspace2058279583\Data
    
  3. Откройте файл FilghtRecorderCurrent.trc.Open FilghtRecorderCurrent.trc

Отобразятся все события текущего сеанса.All events from the current session are displayed. Ниже приведен пример, в котором выделены группы событий.An annotated example is shown below, which highlights groups of events. Каждая группа включает следующее:Each group has the following:

  • события Начало запроса и Окончание запроса, которые представляют отправку и завершение запроса DAX, созданного интерфейсом пользователя (например, визуальным элементом, заполнением списка значений в пользовательском интерфейсе фильтра);A Query Begin and Query End event, which represent the start and end of a DAX query generated by the UI (for example, from a visual, or from populating a list of values in the filter UI)
  • одну или несколько пар событий Начало DirectQuery и Окончание DirectQuery, которые представляют запрос, отправленный в базовый источник данных, как часть оценки запроса DAX.One or more pairs of DirectQuery Begin and DirectQuery End events, which represent a query sent to the underlying data source, as part of evaluating the DAX query.

Обратите внимание, что несколько запросов DAX могут выполняться параллельно, поэтому события из разных групп могут чередоваться.Note that multiple DAX queries can be executed in parallel, so events from different groups can be interleaved. Значение ActivityID может использоваться для определения событий, принадлежащих одной группе.The value of the ActivityID can be used to determine which events belong to the same group.

Другие столбцы, которые следует рассмотреть:Other columns of interest are the following:

  • TextData: текстовые сведения о событии.TextData: The textual detail of the event. Для событий "Начало запроса" и "Окончание запроса" будет использоваться запрос DAX.For “Query Begin/End” events this will be the DAX query. Для событий "Начало DirectQuery" и "Окончание DirectQuery" будет использоваться SQL-запрос, отправленный в базовый источник.For “DirectQuery Begin/End” events this will be the SQL query sent to the underlying source. Столбец TextData для текущего выбранного события также отображается в нижней области.The TextData for the currently selected event is also displayed in the region at the bottom.
  • EndTime: время завершения события.EndTime: When the event completed.
  • Duration: продолжительность времени, затраченного на выполнение запроса SQL или DAX, в миллисекундах.Duration: The duration, in milliseconds, taken to execute the DAX or SQL query.
  • Error: указывает, если произошла ошибка (в этом случае событие также отображается красным цветом).Error: Indicates if an error occurred (in which case the event is also displayed in red).

Обратите внимание, что на приведенном выше рисунке область со столбцами, которые мы не рассматриваем, сужена, что дает возможность сосредоточиться только на основных столбцах.Note that in the image above, some of the less interesting columns have narrowed, to allow the interesting columns to be seen more easily.

Чтобы диагностировать потенциальные проблемы производительности с помощью трассировки, мы рекомендуем сделать следующее:The recommended approach to capturing a trace to help diagnose a potential performance issue is the following:

  • Откройте отдельный сеанс Power BI Desktop (чтобы избежать путаницы с несколькими папками рабочей области).Open a single Power BI Desktop session (to avoid the confusion of multiple workspace folders)
  • Выполните необходимые действия в Power BI Desktop.Perform the set of actions of interest in Power BI Desktop. Выполните несколько дополнительных действий, чтобы убедиться, что нужные события записываются в файл трассировки.Include a few additional actions beyond that, to ensure that the events of interest are flushed into the trace file.
  • Откройте SQL Server Profiler и найдите файл трассировки, как описано выше.Open SQL Server Profiler and examine the trace, as described earlier. Помните, что файл трассировки после закрытия Power BI Desktop будет удален.Remember that the trace file will be deleted upon closing Power BI Desktop. Кроме того, дополнительные действия в Power BI Desktop будут отображены не сразу: файл трассировки следует закрыть, а затем повторно открыть, чтобы просмотреть новые события.Also, further actions in Power BI Desktop will not immediately appear – the trace file should be closed and re-opened to see the new events.
  • Используйте небольшие отдельные сеансы (десятки секунд на действие, не сотни) для быстрого анализа файла трассировки. (Из-за ограничения размера файла трассировки есть вероятность, что события длинных сеансов завершатся сбоем.)Keep individual sessions reasonably small (ten seconds of actions, not hundreds) to make it easier to interpret the trace file (and because there is a limit on the size of the trace file, thus for very long sessions there is a chance of early events being dropped).

Основные сведения о форме запроса, отправленного Power BI DesktopUnderstanding the form of query sent by Power BI Desktop

Общий формат запросов, созданных и отправленных Power BI Desktop, использует подзапросы для каждой связанной таблицы, в которой подзапрос такой же, как и запрос, определенный в редакторе запросов.The general format of queries created and sent by Power BI Desktop use subselects for each of the tables referenced, where the subselect is as defined by the query defined in Query Editor. Предположим, в SQL Server есть следующие таблицы TPC-DS:For example, assume the following TPC-DS tables in SQL Server:

Рассмотрим следующий запрос:Consider the following query:

Этот запрос вызовет следующий визуальный элемент:That query results in the following visual:

Обновление этого визуального элемента приведет к SQL-запросу, показанному ниже.Refreshing that visual will result in the SQL query shown below the next paragraph. Как вы видите, у нас три подзапроса, для Web Sales, Item и Date_dim, каждый из которых возвращает все столбцы соответствующей таблицы, несмотря на то, что визуальный элемент ссылается на четыре столбца.As you can tell, there are three subselects for Web Sales, Item, and Date_dim, that each return all the columns on the respective table, even though only four columns are actually referenced by the visual. Эти запросы в подзапросах (которые затенены) — это точный результат запросов, определенных в редакторе запросов.These queries in the subselects (they're shaded) are exactly the result of the queries defined in Query editor. Использование подзапросов таким образом не повлияло на производительность для источников данных, поддерживаемых для DirectQuery на сегодняшний день.Use of subselects in this manner has not been found to impact performance, for the data sources so far supported for DirectQuery. Такие источники данных, как SQL Server, просто оптимизируют ссылки на другие столбцы.Data sources like SQL Server simply optimize away the references to the other columns.

Одна из причин, по которым Power BI использует этот подход, заключается в том, что SQL-запрос может непосредственно предоставить аналитик, поэтому он используется "как есть" без попыток изменить его.One reason Power BI employs this pattern is because the SQL query used can be provided directly by the analyst, so it's used "as provided", without an attempt to rewrite it.

Дальнейшие действияNext steps

В этой статье описываются аспекты DirectQuery, общие для всех источников данных.This article describes aspects of DirectQuery that are common across all data sources. Существуют аспекты, касающиеся только отдельных источников.There are certain details that are specific to individual sources. Дополнительные сведения об отдельных источниках см. в следующих статьях:See the following topics covering specific sources:

Дополнительные сведения о DirectQuery см. в следующей статье:For more information about DirectQuery, check out the following resources: