2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Planner のラベル(categoryDescriptions)を Power Apps のコンボボックスに表示する

2
Last updated at Posted at 2026-03-12

はじめに

ごきげんよう、百合宮桜(Miyu)です。
Planner のラベル、ご存じですか?
このようにタスクにつけて、フィルタリングできるととても便利な機能です。

image.png
image.png

このラベルを Power Apps のコンボボックスに表示する方法を紹介します。

前提条件

  • 取得できるのはアクセス可能なプランのラベルのみ
  • ラベル名が初期値(例 ピンク)だと取得できない

概要

ラベルは、Planner コネクタの GetPlanDetails の categoryDescriptions の中に一覧があります。以下のスクリーンショットは Power Automate の「プランの詳細の取得(=GetPlanDetails)」でラベルの一覧を取得した時のものです。

image.png

これをPower Apps で取得して、テーブル型に直すとコンボボックスに表示ができます。

データの接続

データの追加をクリック、Planner を選択してアプリに接続します。

image.png
image.png

プラン Id の取得

Microsoft Learn にあるように GetPlanDetails を動かすためにはプランId が必要です。

今回はとりあえず Power Automate で Planner コネクタのグループのプランを一覧表示アクションを使って、プラン Id を取得しました。

image.png
image.png

GetPlanDetails の動作確認

以下の式をコンボボックスの Items プロパティに入れてみます。

Planner.GetPlanDetails("プランId").categoryDescriptions

取得したラベルは以下のようにレコード型です。

{category1:"Power Apps",category2:"Power BI"}
category1 category2
Power Apps Power BI

フィールドの編集をクリックするとたくさんの列が候補に出てきます。

image.png

この状態ですと、1つのラベルしかコンボボックスのフィールドに入れられません。

image.png

下図のようにラベルの一覧をコンボボックスなどに表示するためには

image.png

テーブル型に整形しなおす必要があります。

[
  {CategoryName:"Power Apps"},
  {CategoryName:"Power BI"}
]
CategoryName
Power Apps
Power BI

テーブル型への変換

Planner のラベルは1つのプランにつき、最大25個登録できます。ただ、プランによって利用しているラベルの数は様々だと思います。よって Planner.GetPlanDetails で取得した列の名前を取得し、その列の名前の数だけ繰り返し処理で、列の値をコレクションに格納していくという処理をします。
式の全体像は以下の通りです。

With(
    {
        Data:
        ParseJSON(
            JSON(Planner.GetPlanDetails("プランId").categoryDescriptions)
        )
    },

    ForAll(
        ColumnNames(Data),
        Collect(
            test,
            {
                CategoryName:Column(Data,ThisRecord.Value)
            }
        )
    )
)

細かく解説します。
ColumnNames 関数はレコードの列名を取得し、その列名を配列化して返してくれる関数です。

ただ指定するレコードは DynamicRecord である必要があります。
その為、ParseJSON 関数と JSON 関数を利用して、Planner.GetPlanDetails で取得したラベルを DynamicRecord に変換しています。

ParseJSON(
  JSON(Planner.GetPlanDetails("プランId").categoryDescriptions)
)

このデータは列の値をコレクションに格納する際にも使うので、With 関数でまとめています。

ColumnNames 関数に話を戻します。
今回の場合はこのような形のレコードだったので、

category1 category2
Power Apps Power BI

ColumnNames 関数の戻り値は以下のようになります。

Value
category1
category2

この配列を使って、配列のデータの数だけ繰り返し処理をするのが ForAll 関数です。

今回は Collect 関数を利用したコレクションへのデータ作成を繰り返し処理しています。

Collect(
  コレクション名,
  {
    CategoryName:Column(Data,ThisRecord.Value)
  }
)

Column 関数は指定された列の値を取得する関数です。

今回は ForAll 関数で第一引数に指定した配列の値=列名なので、ThisRecord.Value で列名が取得できます。

まとめ

業務のシステム化を行う時に以下のようなことを言われた経験のある方は多いと思います。

  • データを正規化しましょう
  • 横に長いExcelファイルをそのままデータソースにするのはやめなさい

それはなんでかっていうと、今回のように横に長く、列がたくさんあるデータをマスタにする為に1列縦長のデータに変換するのはめっちゃくちゃ大変&技術力が必要だからなんですよね(´・ω・`)
今回のは Planner コネクタの仕様なので仕方ないですが、自分がカスタム可能なデータベースでは横持データはできるだけ避けた方が良いなというのが実感頂けたと思います。
コネクタの仕様が使いにくくて、発狂しそうになった方はぜひこちらの記事を参考に、Microsoft さんにフィードバックしてください。

もしかしたら考え直してくれるかもしれません(笑)
それではごきげんよう。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?