Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Самый простой и быстрый шаблон запроса данных:
- Одна таблица или представление
- Предварительно отфильтрованный на сервере под ваши нужды
- Столбцы индексируются правильно для ожидаемых запросов
При разработке приложения необходимо подумать о том, как быстро запрашивать данные. Лучший способ запроса данных — использовать одну таблицу или представление со всеми нужными сведениями и отфильтровать их на сервере перед отображением в приложении. Кроме того, необходимо убедиться, что столбцы, используемые для фильтрации или сортировки данных, индексируются должным образом. Это делает приложение более быстрым и гладким.
Например, предположим, что у вас есть коллекция, показывающая список клиентов и их продавцов. Если вы храните сведения о клиенте и продавце в отдельных таблицах, необходимо использовать поисковые запросы, чтобы получить имя продавца для каждого клиента. Это замедляет работу приложения, так как оно должно выполнять множество запросов к другой таблице. Лучше всего создать представление, объединяющее сведения о клиенте и продавце в одной таблице, и использовать это представление в качестве источника данных для коллекции. Затем приложению необходимо выполнить только один запрос, чтобы получить все необходимые данные.
Существует компромисс между скоростью запросов и нормализацией данных. Нормализация данных означает, что вы храните данные только один раз и избегаете дублирования. Это помогает обеспечить согласованность и точность данных. Однако иногда необходимо дублировать некоторые данные, чтобы упростить и ускорить запросы. Эти две цели необходимо сбалансировать в структуре дизайна приложения и таблицы. В противном случае приложение будет медленно и отложено, так как для фильтрации и присоединения данных из разных таблиц необходимо выполнить многочисленные действия.
Используйте серверные представления
Представления, вероятно, являются наиболее распространенным инструментом для балансировки этих целей. Они предоставляют единую структуру таблицы для запросов, предварительно фильтруют данные, необходимые в запросе, а также обеспечивают возможность поиска и соединения с другими таблицами. Поскольку фильтры, поиски и соединения для представления вычисляются на сервере, как полезная нагрузка, так и вычисления на стороне клиента сводятся к минимуму.
Избегайте слишком большого количества поисков в коллекции
Коллекция может отображать множество записей из источника данных. Но иногда необходимо отобразить дополнительные сведения из другого источника данных, связанного с исходным. Например, у вас есть коллекция, в которой отображается список клиентов, и вы хотите показать имя продавца, которому назначен каждый клиент. Имя продавца хранится в другом источнике данных, отличном от сведений клиента. Чтобы отобразить имя продавца, необходимо использовать функцию поиска, которая находит соответствующую запись в другом источнике данных. Это расширяет исходную таблицу, добавляя значения поиска.
Однако расширение таблицы может быть очень медленным, если у вас много записей и обращений к данным. Для каждой записи в галерее приложение должно выполнить отдельный запрос к другому источнику данных и получить значение поиска. Это означает, что приложению может потребоваться выполнить много запросов для каждой записи, что может занять много времени и повлиять на производительность приложения. Этот неблагоприятный шаблон иногда называют проблемой «N в квадрате (n^2)» или «N+1».
Использование StartsWith или Filter
Power Fx предоставляет несколько способов поиска данных. Как правило, используйте выражение, которое использует индекс, например StartsWith или Filter , вместо того, чтобы считывать всю таблицу, например In. Оператор In отлично подходит для коллекций в памяти или если внешняя таблица источника данных очень мала.
Рассмотрите возможность создания дубликатов данных
Иногда данные медленно доступны в запросе, так как они хранятся в другом месте или формате. Чтобы ускорить запрос, можно скопировать медленные данные и сохранить их локально в таблице, которая быстро и легко запрашивается. Однако это означает, что локальные данные не могут быть самой обновленной версией исходных данных. Затем периодически выполняйте другой процесс, чтобы периодически обновлять локальные данные. Этот процесс может быть потоком Power Automate, подключаемым модулем, хранимой процедурой или любым другим методом, который может перемещать данные из одного места в другое.
Требование частоты обновления локальных данных зависит от потребностей бизнеса. Насколько свежими должны быть данные для вашего приложения? Например, предположим, что вы работаете в Компании Contoso, которая продает велосипеды. Список доступных велосипедов хранится в базе данных Products, доступ к которым можно получить через API в пользовательском соединителе. Но предположим, что вызов API медленный, и поэтому вы решили скопировать данные продукта и сохранить его локально в таблице. Затем вы создадите представление, которое объединяет таблицу с другими соответствующими данными для приложения. Вы также создаете поток Power Automate, который выполняется каждый день и обновляет таблицу с последними данными продукта из API. Затем ваше приложение может быстрее запрашивать локальные данные, причем возраст данных составляет максимум один день.
Дедупликация данных — это распространенный тип метода в приложениях корпоративного уровня, чтобы обеспечить высокую производительность. Вы можете использовать плагины Dataverse, хранимые процедуры или перемещение данных для дублирования данных в единую таблицу, оптимизированную для запросов. Ключевым вопросом является то, как актуальны эти данные должны быть? Если вы можете позволить себе некоторую задержку, вы можете использовать этот метод для ускорения приложения.
Suggestions
Чтобы достичь этой цели, рассмотрите следующие вопросы и предложения:
- Насколько важно, чтобы клиент видел значение данных в коллекции или сетке данных? Можно ли сначала выбрать запись, а затем отобразить данные в форме?
- Может ли представление выполнить предварительную работу, необходимую для просмотра данных в правильном формате?
- Используете ли вы оператор «IN» там, где будет работать «StartsWith»?
- Насколько текущими должны быть ваши данные? Существует ли стратегия дублирования данных, которую можно использовать для получения запроса для работы над одной таблицей по умолчанию?