[Power Apps] 複数のドロップダウンの値を連動させる

やりたいこと

ドロップダウンが2つあり、2つめの選択肢が、1つめの選択肢に依存するような処理を実装する。

具体的には、下記「カレンダー」マスタデータを使用して

  1. 選択された日付を基準にして3営業日前以前の日付の一覧を取得する。
  2. 選択された日付を基準にして3営業日後以降の日付の一覧を取得する。
  3. 選択された日付を基準にして3営業日前後の日付の一覧を取得する。

マスタデータ

レイアウト

完了日付、申請日付というのは適当に付けた名前なので無視してよい。

実装

プルダウン1(完了日付)

Filter(営業日マスタ,営業日="T")
UpdateContext({IsResetFlag:true});
UpdateContext({IsResetFlag:false});
Set (Before3DaysID
     , First(
         LastN(
             Filter(
                 営業日マスタ
          , 営業日="T"
          , Int(ID) < Int(EndDate.SelectedText.ID)
        ) , 3 )
    ).ID 
); 
Set (After3DaysID
     , Last(
         FirstN(
             Filter(営業日マスタ
                  , 営業日="T"
                  , Int(ID) > Int(EndDate.SelectedText.ID))
            , 3
         )
    ).ID
);

プルダウン2(申請日付)

Filter(
  営業日マスタ
    , 営業日="T"
    , Int(ID) <= Int(Before3DaysID)
)
Filter(
  営業日マスタ
    , 営業日="T"
    , Int(ID) >= Int(After3DaysID)
)
Filter(
  営業日マスタ
    , 営業日="T"
    , Int(ID) >= Int(Before3DaysID)
    , Int(ID) <= Int(After3DaysID)
)

解説

プルダウン1(完了日付)

  • Items:営業日の全量を設定している。
  • OnChangeUpdateContextにより、プルダウン1が選択されたとき、プルダウン2(申請日付)を未選択状態に戻している。
    Before3DaysIDでは選択された日付の「3営業日前」の1レコードを取得している。
    (1) Filterでプルダウンの選択肢よりIDの小さい全てのレコードを取得
    (2)LastNで(1)の末尾(3営業日前 ~ 1営業日前)を取得
    (3)Firstで (2)の最も若いレコード(3営業日前)を取得
    After3DaysIDBefore3DaysIDと考え方自体は同じで、3営業日後を取得

プルダウン2(申請日付)

Before3DaysIDAfter3DaysIDが求まっているので、あとはIDがそれより前、それより後という条件で再度Filterによるマスタ検索を行えば、やりたいことは無事完了