のいのログ

【Power Apps】[ ]の挙動が改善されて、複数列テーブルも作れるようになってるぞ!

Power Appsでよく使う[]の仕様がいつの間にか変更されていて、使いやすくなっていたのでご紹介します。

目次(クリックでジャンプできます)

[]で囲ったときに暗黙的に作成されるValue列

Power Appsの数式で要素を並べて[]で囲うと、

ClearCollect(SingleColumnTable, ["東京", "神奈川", "埼玉", "千葉"])

暗黙的に「Value」という名前が付与された1列だけのテーブルが作成されます。

上の例のようにレコード型でないスカラー型(テキスト型やブール型などの単一のデータを表す型)であれば問題なく機能します。

過去の仕様では、レコードを与えても全部Valueの入れ子にされていた

しかし、以下のようにレコード型を与えても、すべてValue列の1セルに押し込められてしまっていました。

ClearCollect(
    BasicTableWithSquareBrackets,
    [
        {id: 1, Value: "テスト1"},
        {id: 2, Value: "テスト2"}
    ]
)

Table関数であれば列の構造が異なっていてもすべての列を用意し、同じ列名であれば同じ列に格納、その行に存在しない列は空白(Blank)にするという処理ができます。

そのため、複数列テーブルの作成にはTable関数の使用が推奨されていました。

【過去の仕様 参考記事】
【#PowerApps】Power Apps で配列を作るときは注意が必要! | Qiita

いつの間にか[]でも複数列テーブルが作れるようになっていた👍️

いつ変更になったのかはわかりませんが、2025年5月現在なら[]にレコード型を渡しても、Value列に強制ネストされないテーブルが生成される仕様に変わっています。

ClearCollect(
    BasicTableWithSquareBrackets,
    [
        {id: 1, Value: "テスト1"},
        {id: 2, Value: "テスト2"}
    ]
)

異なる列を持っているレコードを渡しても大丈夫です。

ClearCollect(
    DifferentColumnWithSquareBrackets,
    [
        { id: 1, Name: "A男" },
        { id: 2, Name: "B郎", Birthday: Date(1980, 4, 1) },
        { id: 3, Name: "C子", BloodType: "A" }
    ]
)

今でもTable関数が必要な場面

ではTable関数が全く不要になってしまったのかというと、そうではありません。

現在でもTable関数にしかできないことがあります。

複数のテーブルを結合する

以下のように複数のテーブルを結合するのは、2025年5月時点でもTable関数でないとできません。

With(
    {
        t1: [
                { id: 1, name: "" },
                { id: 2, name: "いい" }
        ],
        t2: [
                { id: 3, name: "ううう" },
                { id: 4, name: "ええええ" }
        ]
    },

    ClearCollect(MergeTableFunction, Table(t1, t2))
)

[]にすると、各テーブルがValue列にネストされてしまって結合できません。

With(
    {
        t1: [
                { id: 1, name: "" },
                { id: 2, name: "いい" }
        ],
        t2: [
                { id: 3, name: "ううう" },
                { id: 4, name: "ええええ" }
        ]
    },

    ClearCollect(MergeTableSquareBrackets, [t1, t2]) // 変わったのはここだけ
)

Table関数ならテーブルとレコードを混ぜても機能しますが、

ClearCollect(
    MergeSingleColumnTableFunction,
    Table(
        { Value: "XS" },
        [ "S", "M", "L" ],
        { Value: "XL" }
    )
)

[]の場合、レコードを先に置くとエラーになりますし、

ClearCollect(
    MergeSingleColumnTableSquareBrakcets,
    Table(
        { Value: "XS" },
        [ "S", "M", "L" ],
        { Value: "XL" }
    )
)

テーブルを先に置くとエラーにはなりませんが、新しく生成されたテーブルの各行が空っぽになります。

ClearCollect(
    MergeSingleColumnTableSquareBrakcets,
    [
        ["S", "M", "L"],
        { Value: "XS" },
        { Value: "XL" }
    ]
)

テーブルの結合は、今後もTable関数を使いましょう。

まとめ:より直感的になった改良ポイントだと思います!

地味な変更点ですし、劇的に便利になったわけでもないのですが、こういう理不尽ポイントを減らしてくれるのは非常に良い変更だと思います。

また新たな発見があれば記事にしたいと思います。

シェアしていただけると嬉しいです!
  • URLをコピーしました!

この記事を書いた人

ローコード・RPAエンジニア。DX・業務効率化を専門に開発。

前職では鉄道運転士として働きながら、社内複業でSwift・Power Platformで業務効率化を推進していた。

応援する

コメント

コメントする

CAPTCHA


目次(クリックでジャンプできます)