こんにちは、あんこ先生です。
関数を使って任意の値を持ってきたいけど、うまくいかないことってありませんか?
それは、テーブルとレコードの関係、関数の戻り値を理解していないからです。
例えば、Filter関数で1レコードまで絞り込んだとします。
これをラベルコントロールにText=絞り込んだテーブル.Valueとしても何も表示されません。
なぜなら、Textプロパティはテーブルではなくレコードを参照するからです。
このように、テーブルとレコードの関係、関数の戻り値を理解していないと沼にはまることがあります。
この記事では、テーブルとレコードの違い、主要な絞り込み関数の仕組みをコード付きで解説します。
これでもう迷わない!
テーブルとレコードの違い
テーブルとは
簡潔に述べると、表です。
1つ以上のレコードで構成され、レコード間で項目名とデータ型が一貫しています。
テーブルには名前があり、参照や関数の記述に使用します。
カレンダーで例えると、カレンダーそのものがテーブルです。日付や曜日がカラム(列)、それらを各1つずつ束にしたものがレコード(行)です。
PowerAppsでは、データソースかコレクションだと認識してもらえば大丈夫です。
フィールド単一の値)を抜き取るには、まずレコードを特定し、次にカラム名を指定する必要があります。
レコードについて
簡潔に述べると、表に含まれる1つ1つの行(横軸)です。
SharePointリストではアイテムと呼びます。
1つ以上のカラムとその値で構成されます。
カレンダーで例えると、日付や曜日を含む行がレコードです。
カラムについて
簡潔に述べると、表に含まれる1つ1つの列(縦軸)です。
項目名と格納できるデータ型で構成されています。
カレンダーで例えると、項目名は日付、データ型はDate型といった具合です。
Excelと異なり、データ型が一致しないデータは保持できません。
フィールドについて
簡潔に述べると、表のうち、カラム(縦軸)とレコード(横軸)が交わう場所です。
実際にデータが格納されている場所です。
親がテーブル、子はレコード
2種類のテーブル
1つのテーブルに、なんでもかんでも情報を詰め込みすぎると管理が煩雑になります。
基本的な情報と記録はテーブルを分けて管理しましょう。
マスターテーブル
運用上、頻繁に更新を行わない基本的な情報が格納された半固定的なテーブルです。
例えば、社員情報や商品情報などが挙げられます。
主たる目的は参照されることで、主キーから社員名や商品名を紐づけさせたり、グルーピングさせたりするときに利用されます。
トランザクションテーブル
運用上、頻繁に更新を行う記録情報が格納されたテーブルです。
例えば、勤怠情報や出荷情報などが挙げられます。
レコード数が膨大なため、基本的な情報を保持させるとメンテナンスが大変です。
それを回避させるため、外部キーを持たせて、基本的な情報はマスターテーブルを参照させます。
マスターテーブルはM_、トランザクションテーブルはT_を頭につけると管理しやすいよ。
テーブルを戻り値とする関数
Filter関数
テーブル操作に関して、最もお世話になる関数ではないでしょうか?
委任可能な全レコードから条件をすべて満たすレコードを抽出し、そのテーブルを返します。
複数条件の場合、それらはAND処理されます。
たとえば、
- 社員情報から、名字が”佐藤”のレコードを抽出したテーブルを返す。
- 商品情報から、発売日が2022/2/22以降のレコードを抽出したテーブルを返す。
Filter(_AreaCollection,Group=Dropdown1.Selected.Area)
Search関数
委任可能な全レコードから、指定した単一または複数の項目で文字列を含むレコードがあれば抽出し、そのテーブルを返します。
この検索は、部分一致も含みます。また、大文字と小文字は区別しません。
文字列が空の場合は、全レコードが対象になります。
ただし、検索できるのはテキスト型のみで、数値は対象外です。
たとえば、
- 名字か名前に”藤”が含まれているレコードを抽出したテーブルを返す。
- 取引先名に”合同”が含まれているレコードを抽出したテーブルを返す。
Search(_AreaCollection,TextInput2.Text,"Area")
FirstN・LastN関数
全レコードから、先頭または後尾から引数で指定したレコード数を抽出し、そのテーブルを返します。
LastN関数は降順ではなく、レコード数分を昇順で返します。
ワースト5など降順で抜き取りたい場合は、降順で並び替えたテーブルをFirstN関数で抽出します。
たとえば、
- トップ5など、先頭から5レコードのみのテーブルを返す。
- ある会員が最近利用した履歴5レコードのみのテーブルを返す。
FirstN(_AreaCollection,5)
LastN(_AreaCollection,5)
委任できないため、絞り込んでも500件以上になるデータソースにはオススメできません。
レコードを戻り値とする関数・コントロール
LookUp関数
委任可能な全レコードから、条件を満たす最初のレコードを抽出し、そのレコードを返します。
条件は1つのみです。複数条件としたい場合は他関数と組み合わせる必要があります。
たとえば、
- 地方が”近畿”で最初に見つかったレコードを抽出する。
- 人口が”100万人以上”で最初に見つかったレコードを抽出する。
LookUp(_AreaCollection,Group="近畿")
First・Last関数
委任可能な全レコードから、最初または最後のレコードを抽出し、そのレコードを返します。
Sort関数と組み合わせることで、特定項目の上位下位を抽出できます。
First(_AreaCollection)
Last(_AreaCollection)
Gallery01.Selected・Dropdown01.Selected
ギャラリーコントロールやドロップダウンコントロールで選択しているレコードを返します。
ギャラリーコントロールで詳細を表示させる、フォームコントロールで処理させる際、レコード特定に重宝します。
//Gallery00.Itemsプロパティ
Gallery01.Selected
//Form00.Itemプロパティ
Dropdown01.Selected
まとめ
データベースの基本、テーブルとレコードの違いは理解できましたか?
- 戻り値がテーブルとなる関数で、レコードを委任できる500件未満に絞りこむ。
- 戻り値がレコードとなる関数で、必要な単一レコードを抜き取る。
関数やコントロールの戻り値がどちらかを判別できれば、スムーズにアプリ開発が進みます。
この記事の内容を覚えて実践できれば安心ですね。
忘れないうちに実践してみましょう!
テーブルという箱に、レコードを詰め込む感じですね!
テーブルを入れ子にすることもできますが、それはまた別の記事で。