AddColumns関数は、Power Appsで使われる関数の一つで、データソース(テーブル)に新しい列を追加し、その列に計算や加工を行った結果の値を格納できる関数です。
既存のデータを元に、アプリで必要な情報を追加・加工して表示したい、計算したい、といった場合に役立ちますが、意外と詳しく知らない方もいるのではないでしょうか。
本記事ではAddcolumns関数について詳しく解説しつつ、応用例なども紹介します。ぜひ最後までご覧ください。
AddColumns関数とは?

Power Appsでアプリ開発をしていると、既存のデータソースをそのまま使うのではなく、加工したり、新しい情報を追加したりしたい場面が頻繁に出てきます。そんな時に便利なのが、「AddColumns関数」です。
AddColumns関数を一言で表すと、「データソースに新しい列を追加し、計算や加工を行った結果を返す関数」です。 元のデータソース自体は変更せず、あくまでPower Apps内で一時的に加工されたテーブルを生成します。
Addcolumns関数が役立つシーンとして、以下のものが浮かびます。
- データソースを直接変更できない/したくない場合:
- SharePointリストやExcelテーブルなど、他のユーザーと共有しているデータソースは、勝手に列を追加したり変更したりできないことがあります。
- また、元のデータはそのままの形で保持しておきたい場合もあります。
- AddColumnsを使えば、元のデータに影響を与えることなく、アプリ内で必要な形にデータを加工できます。
- 動的なデータ操作、高度な機能実装に必要:
- アプリのユーザーの操作や状況に応じて、表示するデータを動的に変化させたい場合があります。
- 例えば、特定の日付から数日後までの日付リストを生成したり、複数の列の値を組み合わせて新しい情報を表示したりするなど、複雑な処理が必要になることもあります。
- AddColumnsは、このような動的なデータ操作や高度な機能の実装を可能にします。
AddColumns関数を使うことでできることは以下の通り。
- データ整形: 複数の列を結合して1つの列にまとめたり、数値データに計算を加えて新しい列を作ったりできます。
- 表示のカスタマイズ: ユーザーに見やすいようにデータを加工して表示できます。例えば、日付を特定の書式で表示したり、選択肢フィールドの値をわかりやすいテキストに変換したりできます。
- 集計: 特定の条件でデータをグループ化し、それぞれのグループの合計値や平均値などを計算できます。
- 動的データ生成: 現在の日付から数日間の日付リストを生成するなど、動的なデータを生成できます。
AddColumns関数の基本構文と使い方
AddColumns関数の基本的な構文と、簡単な使い方を具体的な例を交えて解説します。
基本構文
AddColumns(テーブル, 列名1, 数式1 [, 列名2, 数式2, ...])
- テーブル: 操作対象となるテーブル(データソースまたはコレクション)を指定します。
- 列名1, 列名2, …: 追加する新しい列の名前を文字列で指定します。
- 数式1, 数式2, …: 各レコードに対して実行される数式を指定します。この数式の結果が、新しい列の値となります。
数式内では、元のテーブルの列を参照したり、Power Appsの組み込み関数を使用したりできます。よく使う関数や演算子としては、以下のとおり。
- &: 文字列を連結します。
- +: 数値を加算します。
- -, *, /: それぞれ減算、乗算、除算を行います。
- If: 条件分岐を行います。
- DateAdd: 日付/時刻の加算・減算を行います。
- Sum: 合計値を計算します。
- ThisRecord: 現在処理中のレコードを参照します。
- As: 入れ子になった数式内で、特定のテーブルに名前を付けて参照します。
簡単な使用例
例として、商品リストという名前のコレクションがあるとします。このコレクションには、商品名、単価、在庫数という列が含まれているとしましょう。
1. 数値列に100を加算する
単価列のすべての値に100を加算した新単価という新しい列を追加するには、次のように記述します。
ClearCollect(
商品リスト_AddColumns,
AddColumns(商品リスト, "新単価", 単価 + 100)
)
ClearCollect関数は、新しいコレクション商品リスト_AddColumnsを作成し、そこにAddColumns関数の結果(新単価列が追加されたテーブル)を格納します。
2. 文字列列を結合して新しい列を作る
商品名と在庫数を組み合わせて、「商品名 (在庫数: XX)」という形式の商品情報という新しい列を追加するには、次のように記述します。
ClearCollect(
商品リスト_AddColumns,
AddColumns(商品リスト, "商品情報", 商品名 & " (在庫数: " & 在庫数 & ")")
)
ポイント
- 文字列の結合には&演算子を使用します。
- 数値は、文字列と結合する際に自動的に文字列に変換されます。
ビューでのコレクションの確認方法
Power Apps Studioの「表示」タブ → 「コレクション」を選択すると、作成したコレクションの内容を確認できます。上記の例では、商品リスト_AddColumnsというコレクションを選択すると、新単価列や商品情報列が追加されていることが確認できます。
AddColumns関数の実用的な使用例
ここでは、AddColumns関数をより実践的なシナリオでどのように活用できるか、具体的な例をいくつか紹介します。
基本的なデータ整形
例1:氏名列を結合して「FullName」列を作成
社員リストがあり、「姓」と「名」が別々の列に分かれている場合、AddColumnsを使って「FullName」という1つの列にまとめることができます。
AddColumns(社員リスト, "FullName", 姓 & " " & 名)
例2:価格と税率から「税込価格」列を作成
商品リストがあり、「単価」と「税率」の列がある場合、「税込価格」を計算する新しい列を追加できます。
AddColumns(商品リスト, "税込価格", 単価 * (1 + 税率))
例3:条件分岐で「地域」列を作成
顧客リストがあり、「市区町村」の列に基づいて、「地域」(例:関東、関西など)を判定する新しい列を追加できます。
AddColumns(顧客リスト, "地域", If(StartsWith(市区町村, "東京"), "関東", "その他"))
この例ではStartsWith関数で”市区町村”が「東京」で始まるか確認しています。
高度なデータ操作
例4:Choiceフィールドをテキスト化してソート可能にする
SharePointリストなどのChoice(選択肢)フィールドは、そのままではソートが難しい場合があります。AddColumnsを使ってChoiceフィールドの値をテキスト化した新しい列を作成することで、ソートが可能になります。
AddColumns(社員リスト, "FavoriteColorValue", FavoriteColor.Value)
この後、SortByColumns関数を使ってFavoriteColorValue列でソートできます。
SortByColumns(
AddColumns(社員リスト, "FavoriteColorValue", FavoriteColor.Value),
"FavoriteColorValue"
)
例5:GroupByとSumを組み合わせて部門ごとの売上合計を算出
売上データがあり、「部門」と「売上金額」の列がある場合、AddColumnsとGroupBy、Sum関数を組み合わせることで、部門ごとの売上合計を計算できます。
AddColumns(
GroupBy(売上データ, "部門", "GroupedSales"),
"部門別売上合計",
Sum(GroupedSales, 売上金額)
)
- GroupBy関数で、まず「部門」ごとにデータをグループ化し、GroupedSalesという名前で一時テーブルを作成します。
- 次に、AddColumnsでGroupedSalesテーブルに部門別売上合計列を追加し、Sum関数で各グループの売上金額を合計します。
例6:SequenceとDateAddで動的な日付範囲を生成
例えば、今日から10日間の日付リストを生成したい場合、AddColumns、Sequence、DateAdd関数を組み合わせて実現できます。
AddColumns(
Sequence(10, 0, 1), // 0から9までの連番を生成
"日付",
DateAdd(Today(), Value, Days) // ValueはSequenceで生成された数値(0-9)
)
- Sequence(10, 0, 1)で、0から始まり、1ずつ増加する、10個の数値のシーケンス(テーブル)を生成します。
- AddColumnsで”日付”列を追加し、DateAdd(Today(), Value, Days) で、今日からValue日後の日付を計算します。
補足:入れ子の数式になる場合のThisRecordやAs演算子の活用
複雑な数式や入れ子構造になる場合は、ThisRecordやAs演算子を使うと、コードの可読性が向上します。
例えば、上記の例5(部門ごとの売上合計)で、As演算子を使ってGroupedSalesに別名(例えばSalesGroup)を付けると、以下のようになります。
AddColumns(
GroupBy(売上データ, "部門", "GroupedSales") As SalesGroup,
"部門別売上合計",
Sum(SalesGroup, 売上金額)
)
このように、As演算子でテーブルに名前を付けることで、その後の数式内でその名前を使ってテーブルを参照できるようになり、コードが理解しやすくなります。
AddColumns関数と委任(Delegation)
Power Appsで大規模なデータソースを扱う際に、非常に重要な概念となるのが「委任(Delegation)」です。AddColumns関数を使用する際にも、委任について理解しておく必要があります。
委任とは何か?
Power Appsは、クラウド上のデータソース(SharePointリスト、Dataverse、SQL Serverなど)に接続してデータを取得・操作できます。しかし、パフォーマンス上の理由から、Power Appsは一度にすべてのデータをローカル(アプリを実行しているデバイス)にダウンロードするわけではありません。
委任とは、データソースに対する処理(フィルタリング、並べ替え、集計など)を、Power Apps側ではなく、データソース側(サーバー側)で実行させる仕組みのことです。これにより、Power Appsは必要なデータだけを取得でき、パフォーマンスが向上します。
AddColumnsは委任されない関数
残念ながら、AddColumns関数は委任されない関数です。つまり、AddColumnsを使ったデータ処理は、常にPower Apps側(ローカル)で実行されます。
大量データを取り扱う際の注意点
AddColumnsが委任されないということは、大量のデータを扱う場合、パフォーマンス上の問題が発生する可能性があります。具体的には、以下の点に注意が必要です。
- 委任制限: Power Appsには、一度にローカルで処理できるデータ件数に制限があります(デフォルトでは500件、最大2000件まで設定可能)。AddColumnsを使うと、この制限を超えるデータは処理されず、最初の500件(または設定された制限値)のみが処理されます。
- パフォーマンス低下: 大量のデータをローカルで処理するため、アプリの動作が遅くなる可能性があります。
対策
AddColumnsを使用しつつ、大量データを効率的に扱うには、以下の対策を検討します。
- 可能な限り、データソース側で処理する:
- Filter関数など、委任される関数を先に適用して、データ量を絞り込む。
- データソース側で計算列を作成するなど、事前にデータを加工しておく。
- コレクションを活用する:
- ClearCollect関数を使って、必要なデータをコレクションに格納する。
- コレクションに対してAddColumnsを適用する。
- ただし、コレクションもメモリ上にデータを保持するため、データ量が大きすぎるとパフォーマンスに影響が出る可能性がある。
- 段階的に処理する:
- 一度に全てのデータにAddColumnsを適用せず、データを分割し段階的に処理する。
- Search関数をAddColumnsと組み合わせない
- AddColumns内でSearch関数を利用すると、委任警告が発生しパフォーマンスが劣化する。
- どうしても必要な場合のみAddColumnsを使用する:
- AddColumnsを使わなくても実現できる処理であれば、他の方法を検討する。
委任に関する詳細情報
Power Appsの委任に関する詳細は、以下の公式ドキュメントを参照してください。
- キャンバス アプリの委任について: https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/delegation-overview
AddColumnsは非常に便利な関数ですが、委任の制限を理解した上で、適切に使用することが重要です。
AddColumns関数と関連関数
AddColumns関数は単独でも強力ですが、他の関数と組み合わせることで、さらに柔軟なデータ操作が可能になります。ここでは、AddColumnsと特に関連性の高い、データ整形に役立つ関数をいくつか紹介します。
RenameColumns: 列名の変更
RenameColumns関数は、テーブルの列名を変更します。元のデータソースの列名がわかりにくい場合や、アプリ内で統一した命名規則を使いたい場合に便利です。
構文
RenameColumns(テーブル, 古い列名1, 新しい列名1 [, 古い列名2, 新しい列名2, ...])
使用例
RenameColumns(社員リスト, "Department", "Dept")
この例では、社員リストテーブルのDepartment列の名前をDeptに変更しています。
AddColumnsとの組み合わせ:
AddColumnsで新しい列を追加する際に、元の列名が長くて扱いにくい場合、RenameColumnsで事前に列名を変更しておくと、AddColumns内の数式がすっきりします。
DropColumns: 不要な列の削除
DropColumns関数は、テーブルから不要な列を削除します。データソースに多くの列が含まれていて、アプリで使用する列が限られている場合に、データの絞り込みやパフォーマンス向上に役立ちます。
構文
DropColumns(テーブル, 列名1 [, 列名2, ...])
使用例
DropColumns(社員リスト, "Photo", "備考")
この例では、社員リストテーブルからPhoto列と備考列を削除します。
AddColumnsとの組み合わせ
AddColumnsで新しい列を追加する前に、DropColumnsで不要な列を削除しておくことで、処理対象のデータを減らし、パフォーマンスを向上させることができます。
ShowColumns: 必要な列のみを表示
ShowColumns関数は、テーブルから指定した列のみを表示します。DropColumnsとは逆の動作で、必要な列だけを明示的に選択したい場合に便利です。
構文
ShowColumns(テーブル, 列名1 [, 列名2, ...])
使用例
ShowColumns(社員リスト, "FirstName", "LastName", "Department")
この例では、社員リストテーブルからFirstName、LastName、Departmentの3つの列のみを表示します。
AddColumnsとの組み合わせ
AddColumnsで新しい列を追加した後、ShowColumnsを使って必要な列だけを表示することで、アプリの表示を整理できます。
これらの関数とAddColumnsを組み合わせた例:
ShowColumns(
AddColumns(
RenameColumns(
DropColumns(社員リスト, "Photo"),
"Department",
"Dept"
),
"FullName",
FirstName & " " & LastName
),
"FullName",
"Dept"
)
この例では、以下の処理を順番に行っています。
- DropColumnsで社員リストからPhoto列を削除。
- RenameColumnsでDepartment列をDeptにリネーム。
- AddColumnsでFirstNameとLastNameを結合してFullName列を追加。
- ShowColumnsでFullName列とDept列のみを表示。
このように、複数の関数を組み合わせることで、複雑なデータ操作を効率的に行うことができます。これらの関数はすべて委任されないため、利用には注意が必要です。
AddColumns関数 使用上の注意点とTips
AddColumns関数は非常に便利ですが、効果的に活用するためには、いくつかの注意点とTipsを理解しておくことが重要です。
1. 元のデータソースは変更されない
AddColumns関数は、元のデータソース(SharePointリスト、Excelテーブルなど)を直接変更しません。あくまで、Power Apps内で一時的に加工されたテーブルを生成するだけです。元のデータを保護しつつ、柔軟なデータ操作を行えるのがAddColumnsの大きなメリットです。
2. 生成されたテーブルの用途
AddColumnsによって生成されたテーブルは、主に以下の用途で使用されます。
- ギャラリーやドロップダウンのItemsプロパティ: 加工されたデータを表示するために使用します。
- コレクション: ClearCollect関数と組み合わせて、加工されたデータをコレクションに格納し、アプリ内で再利用できるようにします。
- 他の関数の引数: SortByColumnsやGroupByなど、他の関数の引数として使用します。
3. 複雑な数式は可読性を意識する
AddColumnsの数式が複雑になる場合は、可読性を高めるための工夫が重要です。
- インデント(字下げ): 数式を適切にインデントすることで、構造を視覚的にわかりやすくします。
- コメント: //を使ってコメントを記述し、数式の意図を説明します。
- With関数: 共通の式を変数に格納し、数式を簡潔にします。
- As演算子: テーブルに別名を付けて参照しやすくします。
4. エラー処理
AddColumnsの数式内でエラーが発生する可能性がある場合は、エラー処理を適切に行うことが重要です。
- IsBlank関数: 値が空かどうかを判定します。
- IfError関数: エラーが発生した場合の代替値を指定します。
例:単価が空の場合にエラーになるのを防ぐ
AddColumns(
商品リスト,
"税込価格",
IfError(単価 * (1 + 税率), 0) // 単価が空またはエラーの場合は0を返す
)
5. パフォーマンスの最適化
特に大量のデータを扱う場合は、パフォーマンスに注意が必要です。
- 不要な列は事前に削除する: DropColumnsを使って、AddColumnsで処理する前に不要な列を削除します。
- 委任可能な操作を先に行う: Filterなど、委任可能な関数を先に適用して、データ量を絞り込みます。
- 数式を最適化する: 不要な計算や処理を避けるように数式を設計します。
まとめ
AddColumns関数は、いろいろな場面で活躍する関数ですのでしっかり押さえておきましょう。
弊社ではPowerAppsを活用したローコード開発に力を入れており、開発後の内製化までも幅広くご支援可能です。弊社がこれまで支援した実績などは以下からご覧いただけます。お困りごとがあればお気軽にお問い合わせください。