はじめに
SharePoint Online では、1 回のクエリが処理できるアイテム数が 5,000 に制限されています。これがリスト ビューのしきい値です。この制限は、リストが保持するアイテム数や、ページに表示される行数とは関係ありません。50,000 アイテムのリストでも、すべてのクエリがインデックスを使用して行を選択できる限り、問題なく動作します。しかし、インデックスのない列でフィルター処理を行うと、SharePoint はリスト全体をスキャンしなければならず、リストのアイテムが 5,000 を超えている場合は、クエリを実行せずに拒否します。List Filter Online のユーザーにとっては、特定のフィルターを適用した時点でエラーまたは空の結果として表れます。
この記事では、しきい値が Web パーツのフィルター パネル、列ヘッダー フィルター、事前定義フィルターにどのように影響するか、Web パーツがインデックスの必要なフィルター列をどのように示し、インデックスを作成するか、代わりにリストの設定でインデックスを追加する方法、そしてフィルター・並べ替え・グループ化を制限内に収めるためのルールについて説明します。フィルター パネルそのものについては、KB10255. List Filter Online のフィルター パネル コントロールとサポートされる列の種類で説明しています。
しきい値がフィルター処理に与える影響
List Filter Online は、標準の SharePoint REST APIを通じて、管理者の事前定義フィルター、フィルター パネルの条件、列ヘッダー フィルター、およびプロパティ ペインで構成した並べ替えとグループ化を組み合わせた CAML クエリでアイテムを読み取ります。SharePoint は、このようなクエリをすべてしきい値と照らして確認します。
- インデックス付きの列に対する条件では、SharePoint が一致する行を直接選択できるため、リストのサイズにかかわらずクエリは成功します。
- インデックスのない列に対する条件では、すべてのアイテムのスキャンが必要になります。5,000 アイテムを超えるリストでは SharePoint がエラーを返し、Web パーツは Oops! Something went wrong. と、SharePoint が返したメッセージを表示します。
- インデックスのない列での並べ替えやグループ化も同じ結果になります。最初のページを返す前に、行を並べ替える必要があるためです。
- Dropdown コントロールや列ヘッダー フィルターの値の一覧もクエリです。SharePoint がこれらを拒否すると、コントロールには単に値が表示されません。
Web パーツの Row Limit(行数の上限)(1 ページあたり 1~1,000 行)は、ここでは役に立ちません。これは返される行数を制限するものであり、SharePoint が該当する行を見つけるために調べなければならない行数を制限するものではないためです。

📝 注
SharePoint は、標準のリスト ビューが実行するクエリを含め、すべてのクエリにしきい値を適用します。List Filter Online のフィルター パネルで使用できない列は、リスト自体でもフィルター処理できません。インデックスを追加すると、どちらも解決します。
List Filter Online による支援
Data Source(データ ソース)グループで選択したリストのアイテムが 5,000 を超えている場合、フィルター パネルのコンフィギュレーターは、パネル用に選択したすべての列をチェックします。インデックスがなく、かつ種類的にインデックスを作成できる列には、次の 2 か所で警告が表示されます。
- プロパティ ペインの Filter pane(フィルター パネル)グループの Selected Columns(選択した列)の下に、該当する列を一覧にした警告バーが表示されます。「Contract Type, Customer: The column is not indexed. Filtering a large list by this column may not work.」
- Select Columns(列の選択)で開く Columns(列)パネルで、該当する各列の名前の横に黄色の警告アイコンが表示されます。ツールヒントには同じ警告が繰り返し表示され、最後に Create Index(インデックスの作成)と表示されます。
警告アイコンをクリックするとインデックスが作成されます。Web パーツが REST API を通じて列の Indexed(インデックス付き)プロパティを設定し、SharePoint が確認するとアイコンが消え、その列は警告バーから外れます。SharePoint が変更を拒否した場合、プロパティ ペインに An unexpected error occurred. と表示されます。主な原因は、この記事の最後にある表にまとめています。

このチェックは、次のルールに従って行われます。
- 警告が表示されるのは、プロパティ ペインの読み込み時に SharePoint が報告するアイテム数が 5,000 を超えるリストのみです。それより小さいリストでは、インデックスのない列でも何も表示されません。
- コンフィギュレーターの Display(表示)列でチェックされている列のみが調べられます。
- 複数行テキスト、計算値、複数選択の選択肢、Attachments(添付ファイル)列など、SharePoint がインデックスを作成できない種類の列は、警告の対象になりません。
- Web パーツが別のサイトのデータを表示している場合、インデックスはその別のサイトにあるリストに作成されます。
フィルター パネルのほかに、Developer tools(開発者ツール)グループで Enable developer mode(開発者モードを有効にする)をオンにすると、Data Source グループの列コンフィギュレーター(Select Columns)にすべての列のインデックスの状態が表示されます。列名の前にあるスピードメーターのアイコンは、緑色でツールヒント (Indexed)、または赤色でツールヒント (Not Indexed) になります。これを使用して、フィルター パネルのチェックの対象外である、並べ替えやグループ化に使用する予定の列を確認してください。

❗ 重要
インデックスを作成すると、変更されるのは Web パーツではなくリストです。Create Index をクリックするユーザーには、リストを管理するアクセス許可(リストに対する 編集、デザイン、または フル コントロール のアクセス許可レベル)が必要です。それ以外の場合、SharePoint は要求を拒否します。1 つのリストに設定できるインデックス付き列は最大 20 個です。Web パーツはこれらの条件を事前にチェックせず、SharePoint が返した結果を報告します。
コンフィギュレーターからのインデックスの作成
- ページを編集モードで開き、List Filter Web パーツのプロパティ ペインを開きます。
- Filter pane グループを展開します。リストのアイテムが 5,000 を超えていて、選択した列の一部にインデックスがない場合、Selected Columns の下の警告バーにそれらの列名が表示されます。
- Select Columns をクリックします。Columns パネルで、黄色の警告アイコンが付いている列を探します。
- 最初の列のアイコンをクリックします。要求の実行中、アイコンは無効になり、インデックスが作成されると消えます。
- 警告の出ている他の列でも同様に繰り返し、Save(保存)をクリックします(他に変更していない場合は Cancel(キャンセル)でも構いません。インデックスはすでに作成されています)。
- Selected Columns の下の警告バーが消えたことを確認し、ページを再発行して、以前に失敗したフィルターを適用します。

別の方法: リストの設定でインデックスを作成する
同じインデックスは SharePoint 自体で作成することもできます。コンフィギュレーターがチェックするのはフィルター パネルの列だけなので、並べ替え、グループ化、事前定義フィルターに使用する列については、この方法が唯一の手段です。
- リストまたはライブラリを開き、歯車のメニューから 設定 → リストの設定(または ライブラリの設定)を選択します。
- 列 セクションで、インデックス付きの列 をクリックします。
- 新しいインデックスの作成 をクリックします。
- このインデックスの主列 として列を選択し、作成 をクリックします。
- フィルター、並べ替え、グループ化に使用するすべての列に対して、1 リストあたり 20 個のインデックスの上限まで、同じ手順を繰り返します。

SharePoint Online でインデックスを作成できる列の種類は、1 行テキスト、選択肢(単一選択)、数値、通貨、日付と時刻、Yes/No、参照(単一値)、ユーザーまたはグループ(単一値)、管理されたメタデータ(単一値)です。複数行テキスト、複数選択の選択肢、複数値の参照、複数選択のユーザーまたはグループ、複数値の管理されたメタデータ、計算値、ハイパーリンクまたは画像の列にはインデックスを作成できません。すでに 5,000 アイテムあるリストでは、SharePoint がインデックスをバックグラウンドで作成するため、フィルターが機能するようになるまでに時間がかかることがあります。
大規模リスト向けのフィルター設計
インデックスにより、個々の条件は高速になります。ただし、リストが増え続けても使いやすさを保てるかどうかは、クエリ全体の設計で決まります。
事前定義フィルターはインデックス付き列から始める。 Filter グループのクエリ ビルダーで、最上位グループの最初の条件を、それだけでアイテムを 5,000 未満に絞り込めるインデックス付き列(状態、年、部署など)の比較にします。SharePoint は最初のインデックス付き条件を使用して、残りを評価する前にセットを絞り込みます。その後に続く条件は、インデックスのない列に対するものでも構いません。OR グループの内側では、すべての列にインデックスが必要です。
インデックスを利用しやすい比較を生成するコントロールを選ぶ。 Eq、Neq、In、Geq、Leq、Gt、Lt、BeginsWith はインデックスを使用できますが、Contains は使用できません。フィルター パネルでは、Text の代わりに Dropdown、Dropdown (Multiple Values)、Person or Group、Date picker、Date Range、Relative Date、Numeric range、Yes/No を使用し、Text (with options) では Contains の代わりに Equals または Begins with を使用します。Term コントロールも Contains を使用するため、大規模リストでは Dropdown に置き換えてください。
自動的な既定値に注意する。 Date picker は Contains data を、Relative Date は Today を、ページが開いた時点で適用するため、これらのコントロールはユーザーが何も操作しないうちに列に対するクエリを実行します。インデックス付き列にのみ配置してください。
インデックス付き列で並べ替え、グループ化する。 Sort(並べ替え)グループと Group By(グループ化)グループには任意の列を指定できますが、大規模リストではインデックス付きの列を選択し、グループ化のレベルは 1 つにすることをお勧めします。また、Can be sorted(並べ替え可能)と設定されたすべての列では、ユーザーが列ヘッダー メニューから並べ替えを実行できることに注意してください。大規模リストでインデックスのない列については、このオプションをオフにしてください。
列ヘッダー フィルターはインデックス付き列に限定する。 列の Filterable(フィルター可能)オプションは、ヘッダー メニューのために列の個別の値を読み込みます。大規模リストでは、インデックス付き列でのみオンにしてください。
フォルダーと行数の上限を本来の目的で使う。 フォルダー内のアイテムを表示する設定(Folders(フォルダー)グループの既定)では、一度に 1 つのフォルダーに対してクエリが実行されるため、インデックスがなくても各クエリがしきい値の範囲内に収まることがよくあります。小さな Row Limit とページ分割を組み合わせるとページは軽量に保たれますが、インデックスの代わりにはなりません。
💡 ヒント
フィルターを設計する間は Enable developer mode をオンにしてください。ツール バーの CAML Query コマンドに、Web パーツが送信する正確なクエリが表示されるため、どの比較と列が関わっているかを確認し、リストのインデックス付き列と見比べることができます。
症状と対処方法
| 症状 | 原因 | 対処方法 |
|---|---|---|
| フィルターを適用した直後に、リスト ビューのしきい値に関する SharePoint のメッセージとともに Oops! Something went wrong. が表示される | フィルター条件がインデックスのない列を使用している、または最初の条件でリストを 5,000 アイテム未満に絞り込めていない | 列にインデックスを作成する。インデックス付き列の条件を事前定義フィルターの先頭に移動する |
| ユーザーがフィルターを設定していないのに、ページを開いた直後に同じエラーが表示される | 事前定義フィルター、並べ替え、またはグループ化がインデックスのない列を使用している、または Date picker / Relative Date コントロールが既定の条件を実行している | Filter、Sort、Group By で使用している列にインデックスを作成する。コントロールを置き換えるか、その列にインデックスを作成する |
| Dropdown または列ヘッダー フィルターに値が表示されず、(All)、Contains data、Does not contain data のみが表示される | 列の個別の値を読み込むクエリが SharePoint に拒否された | 列にインデックスを作成する |
| フィルターが一部の値では機能し、他の値では失敗する | 5,000 を超えるアイテムに一致する値があると、クエリの残りの部分にインデックスが使われなくなる | 結果をさらに絞り込む、インデックス付き列の条件を事前定義フィルターまたはパネルに追加する |
| 警告アイコンをクリックすると An unexpected error occurred. で終了する | ユーザーにリストを管理するアクセス許可がない、リストにすでに 20 個のインデックスがある、または列の種類がインデックス作成に対応していない | リストの所有者にインデックスの作成を依頼する。インデックス付きの列 で未使用のインデックスを削除する。別の列またはコントロールを選択する |
| インデックスのない列に警告が表示されない | リストのアイテムが 5,000 以下である、または列の種類がインデックス作成に対応していない | リストが大きくなるまで対処は不要。インデックスを作成できない種類の場合は、フィルターにインデックス作成可能な列を選択する |
| インデックスを作成したのに、フィルターが依然として失敗する | 大規模リストで SharePoint がまだインデックスを構築中である | しばらく待ってから、もう一度お試しください |
関連記事
しきい値は SharePoint Online の仕様であり、上記のルールは大規模リストのあらゆるビューに当てはまります。List Filter Online は、ユーザーが問題に気付く前にページの構成時に解決できるよう、早期警告とワンクリックでのインデックス作成を追加します。
💡 ヒント
フィルター パネルのコントロールと、それらが生成する比較は、KB10255. List Filter Online のフィルター パネル コントロールとサポートされる列の種類に一覧があります。事前定義フィルターの作成方法は KB50025. List Filter Online クエリ ビルダーで複雑なクエリを作成する方法で、プロパティ ペインのその他の設定は KB10201. List Filter Online Web パーツの構成で説明しています。