Введение

SharePoint Online ограничивает число элементов, которые может затронуть один запрос, значением 5 000 — это порог представления списка. Ограничение касается не того, сколько элементов хранит список и сколько строк показывает страница: список с 50 000 элементов работает нормально, пока каждый запрос может использовать индекс для отбора строк. Однако фильтр по столбцу без индекса заставляет SharePoint просматривать весь список, и как только в списке становится больше 5 000 элементов, SharePoint отклоняет запрос вместо его выполнения. Для пользователей List Filter Online это выглядит как ошибка или пустой результат в момент применения определённого фильтра.

В этой статье объясняется, как порог влияет на область фильтра, фильтры заголовков столбцов и предопределённый фильтр веб-части, как веб-часть указывает на столбцы фильтра, которым нужен индекс, и создаёт его за вас, как вместо этого добавить индекс в параметрах списка и какие правила удерживают фильтры, сортировку и группировку в пределах ограничения. Сама область фильтра описана в статье KB10255. Элементы управления области фильтра и поддерживаемые типы столбцов в List Filter Online.

Как порог влияет на фильтрацию

List Filter Online читает элементы через стандартный REST API SharePoint с помощью запроса CAML, который объединяет предопределённый фильтр администратора, условия области фильтра и фильтры заголовков столбцов, а также сортировку и группировку, настроенные в области свойств. SharePoint проверяет каждый такой запрос на соответствие порогу:

  • условие по индексированному столбцу позволяет SharePoint выбрать подходящие строки напрямую, и запрос выполняется при любом размере списка;
  • условие по неиндексированному столбцу требует просмотра всех элементов; в списке более 5 000 элементов SharePoint возвращает ошибку, и веб-часть показывает Что-то сработало неправильно! вместе с сообщением, которое вернул SharePoint;
  • сортировка или группировка по неиндексированному столбцу даёт тот же эффект, поскольку строки нужно упорядочить, прежде чем вернуть первую страницу;
  • списки значений элементов Раскрывающееся меню и фильтра заголовка столбца — тоже запросы; когда SharePoint их отклоняет, элемент просто не показывает значений.

Макс. число строк веб-части (от 1 до 1 000 строк на страницу) здесь не помогает. Оно ограничивает число возвращаемых строк, а не число строк, которые SharePoint должен просмотреть, чтобы их найти.

Ошибка порога, показанная веб-частью

Ошибка порога, показанная веб-частью

📝 Заметка
SharePoint применяет порог к каждому запросу, в том числе к запросам стандартного представления списка. Столбец, который нельзя использовать в области фильтра List Filter Online, нельзя отфильтровать и в самом списке; добавление индекса исправляет и то и другое.

Как помогает List Filter Online

Когда список, выбранный в группе Источник данных, содержит более 5 000 элементов, конфигуратор области фильтра проверяет каждый столбец, который вы выбираете для области. Столбец, который не индексирован и тип которого можно индексировать, помечается в двух местах:

  • в группе Область фильтра области свойств, под заголовком Выбранные столбцы, панель предупреждения перечисляет затронутые столбцы: «Тип договора, Клиент: Столбец не проиндексирован. Фильтрация большого списка по этому столбцу может не работать.»;
  • в панели Столбцы, открываемой кнопкой Выбрать столбцы, рядом с именем каждого затронутого столбца появляется жёлтый значок предупреждения. Его подсказка повторяет предупреждение и заканчивается словами Создать индекс.

Щелчок по значку предупреждения создаёт индекс: веб-часть устанавливает свойство Indexed столбца через REST API, значок исчезает после подтверждения SharePoint, а столбец пропадает из панели предупреждения. Если SharePoint отклоняет изменение, в области свойств появляется сообщение Произошла непредвиденная ошибка.; типичные причины перечислены в таблице в конце статьи.

Предупреждение о неиндексированных столбцах фильтра в области свойств

Предупреждение о неиндексированных столбцах фильтра в области свойств

Проверка выполняется по следующим правилам:

  • предупреждение появляется только для списков, число элементов которых, по данным SharePoint на момент загрузки области свойств, превышает 5 000; для меньших списков ничего не показывается даже для неиндексированных столбцов;
  • проверяются только столбцы, отмеченные в столбце Отображать конфигуратора;
  • столбцы, тип которых SharePoint не может индексировать — несколько строк текста, вычисляемые, выбор нескольких значений и столбец Вложения, — никогда не помечаются;
  • если веб-часть показывает данные с другого сайта, индекс создаётся в списке на том сайте.

Помимо области фильтра, конфигуратор столбцов группы Источник данных (Выбрать столбцы) показывает состояние индекса каждого столбца, если в группе Средства разработчика включён переключатель Включение режима разработчика: значок спидометра перед именем столбца зелёный с подсказкой (индексированный) или красный с подсказкой (неиндексированный). Используйте его для проверки столбцов, по которым планируется сортировка или группировка, — их проверка области фильтра не охватывает.

Состояние индекса столбцов в режиме разработчика

Состояние индекса столбцов в режиме разработчика

❗ Важно
Создание индекса изменяет список, а не веб-часть. Пользователю, который нажимает Создать индекс, нужно разрешение на управление списком — уровень разрешений Изменение, Проектирование или Полный доступ к списку, — иначе SharePoint отклонит запрос. Список может содержать не более 20 индексированных столбцов. Веб-часть не проверяет эти условия заранее; она сообщает результат, который вернул SharePoint.

Создание индексов из конфигуратора

  1. Откройте страницу в режиме редактирования и откройте область свойств веб-части List Filter.
  2. Разверните группу Область фильтра. Если список содержит более 5 000 элементов и некоторые из выбранных столбцов не индексированы, панель предупреждения под заголовком Выбранные столбцы перечисляет их.
  3. Нажмите Выбрать столбцы. В панели Столбцы найдите столбцы с жёлтым значком предупреждения.
  4. Щёлкните значок первого столбца. Пока выполняется запрос, значок недоступен; он исчезает, когда индекс создан.
  5. Повторите для остальных помеченных столбцов, затем нажмите Сохранить (или Отмена, если больше ничего не меняли — индексы уже созданы).
  6. Убедитесь, что панель предупреждения под Выбранные столбцы исчезла, повторно опубликуйте страницу и примените фильтры, которые раньше не работали.

Значок «Создать индекс» в конфигураторе области фильтра

Значок «Создать индекс» в конфигураторе области фильтра

Альтернатива: создание индекса в параметрах списка

Тот же индекс можно создать в самом SharePoint — это единственный способ для столбцов, используемых в сортировке, группировке или предопределённом фильтре, поскольку конфигуратор проверяет только столбцы области фильтра.

  1. Откройте список или библиотеку и выберите Параметры → Параметры списка (или Параметры библиотеки) в меню шестерёнки.
  2. В разделе Столбцы щёлкните Индексированные столбцы.
  3. Щёлкните Создать индекс.
  4. Выберите столбец в поле Основной столбец для этого индекса и нажмите Создать.
  5. Повторите для каждого столбца, используемого в фильтрах, сортировке или группировке, в пределах ограничения в 20 индексов на список.

Страница «Индексированные столбцы» в параметрах списка

Страница «Индексированные столбцы» в параметрах списка

SharePoint Online может индексировать столбцы следующих типов: одна строка текста, выбор (одно значение), число, валюта, дата и время, да/нет, подстановка (одно значение), пользователь или группа (одно значение) и управляемые метаданные (одно значение). Нельзя индексировать несколько строк текста, выбор нескольких значений, подстановку с несколькими значениями, пользователя или группу с несколькими значениями, управляемые метаданные с несколькими значениями, вычисляемые столбцы и столбцы гиперссылок или рисунков. Для списка, в котором уже 5 000 элементов, SharePoint создаёт индекс в фоновом режиме, и до начала работы фильтра может пройти некоторое время.

Проектирование фильтров для больших списков

Индекс ускоряет отдельное условие; от конструкции всего запроса зависит, останется ли список работоспособным по мере роста.

Начинайте предопределённый фильтр с индексированного столбца. В конструкторе запросов группы Фильтр сделайте первым условием группы верхнего уровня сравнение по индексированному столбцу, которое само по себе оставляет менее 5 000 элементов — статус, год, отдел. SharePoint использует первое индексированное условие для сужения набора перед проверкой остальных; условия по неиндексированным столбцам допустимы после него. Внутри группы OR все столбцы должны быть индексированы.

Выбирайте элементы, формирующие сравнения, совместимые с индексом. Eq, Neq, In, Geq, Leq, Gt, Lt и BeginsWith могут использовать индекс; Contains — нет. В области фильтра это означает Раскрывающееся меню, Раскрывающееся меню (множество значений), Пользователь или группа, Выбор даты, Диапазон дат, Относительная дата, Числовой диапазон и Да/Нет вместо Текст, а также Равно или Начинается с вместо Содержит в элементе Текст (с параметрами). Элемент Термин тоже использует Contains, и в больших списках его следует заменить на Раскрывающееся меню.

Учитывайте автоматические значения по умолчанию. Выбор даты применяет Содержит данные, а Относительная дата — Сегодня сразу при открытии страницы, поэтому эти элементы выполняют запрос по столбцу ещё до того, как пользователь что-либо тронет. Назначайте их только индексированным столбцам.

Сортируйте и группируйте по индексированным столбцам. Группы Сортировка и Группировка принимают любой столбец; в большом списке выбирайте индексированные и предпочитайте один уровень группировки. Помните, что пользователь также может сортировать из меню заголовка любого столбца с отметкой Возможна сортировка — снимите этот параметр для неиндексированных столбцов большого списка.

Оставляйте фильтры заголовков столбцов только на индексированных столбцах. Параметр Фильтруемое столбца загружает уникальные значения столбца для меню его заголовка; в большом списке оставляйте его включённым только для индексированных столбцов.

Используйте папки и ограничение строк по назначению. Показ элементов внутри папок (по умолчанию в группе Папки) запрашивает одну папку за раз, что часто удерживает каждый запрос в пределах ограничения даже без индексов. Небольшое Макс. число строк с разбивкой на страницы облегчает страницу, но не заменяет индекс.

💡 Совет
Включите Включение режима разработчика на время проектирования фильтров: команда Запрос CAML на панели инструментов показывает точный запрос, который отправляет веб-часть, так что вы видите задействованные сравнения и столбцы и можете сопоставить их с индексированными столбцами списка.

Симптомы и решения

СимптомПричинаРешение
Что-то сработало неправильно! с сообщением SharePoint о пороге представления списка сразу после применения фильтраУсловие фильтра использует неиндексированный столбец, или первое условие не сужает список до менее 5 000 элементовСоздайте индекс для столбца; переместите индексированное условие в начало предопределённого фильтра
Та же ошибка появляется без пользовательского фильтра, сразу после открытия страницыПредопределённый фильтр, сортировка или группировка использует неиндексированный столбец, либо элемент Выбор даты / Относительная дата выполняет условие по умолчаниюПроиндексируйте столбцы, используемые в группах Фильтр, Сортировка и Группировка; замените элемент или проиндексируйте его столбец
Раскрывающееся меню или фильтр заголовка столбца не показывает значений — только (все), Содержит данные и Не содержит данныхSharePoint отклонил запрос, загружающий уникальные значения столбцаСоздайте индекс для столбца
Фильтр работает для одних значений и не работает для другихЗначение, которому соответствует более 5 000 элементов, оставляет остальную часть запроса без индексаДобавьте в предопределённый фильтр или в область индексированное условие, которое дополнительно сужает результат
Щелчок по значку предупреждения заканчивается сообщением Произошла непредвиденная ошибка.Пользователь не может управлять списком, в списке уже 20 индексов, или тип столбца нельзя индексироватьПопросите владельца списка создать индекс; удалите неиспользуемые индексы на странице Индексированные столбцы; выберите другой столбец или элемент
Неиндексированный столбец не помечен предупреждениемВ списке 5 000 элементов или меньше, либо тип столбца нельзя индексироватьДействий не требуется, пока список не вырастет; для неиндексируемых типов выберите для фильтра индексируемый столбец
Индекс создан, но фильтр всё равно не работаетSharePoint ещё строит индекс в большом спискеПодождите и повторите попытку позже

Порог — свойство SharePoint Online, и приведённые выше правила применимы к любому представлению большого списка. List Filter Online добавляет раннее предупреждение и создание индекса одним щелчком, чтобы проблема решалась при настройке страницы, а не обнаруживалась пользователями.

💡 Совет
Элементы управления области фильтра и формируемые ими сравнения перечислены в статье KB10255. Элементы управления области фильтра и поддерживаемые типы столбцов в List Filter Online. Построение предопределённого фильтра описано в статье KB50025. Как построить сложный запрос с помощью конструктора запросов List Filter Online, а остальные параметры области свойств — в статье KB10201. Настройка веб-части List Filter Online.

Поделиться