【power apps】疑似的に3次元行列をつくって行を凝縮する備忘録

Qiitaでやれ(定期)

表題の内容は、データ設計を改善すればそもそもなくなるのでは?という疑問はともかく、実際にpowerappsをやっているときに要素に対して列データが欲しくなるときがちょくちょくあります。というのも、行を作りすぎるとpowerappsは読めなくなるため、行を節約する、節約させるためのフィルター情報を作成する必要があります。また、順序に意味がある場合は番号を振った行列を作るのもよいでしょう。順番をつけていると純粋にマルコフ連鎖にぶち込めるのも良いかなと思います。

結論
①2つの固有値を合成することで新たなフィルターを作成できる
②固有値を区切ったラベルデータを作ることでお気に入り機能を実装できる。
③クリックした情報を同じくラベルデータで保存してデータ活用(マルコフ連鎖)やおすすめ機能を実装できる

具体的な利用イメージ

当番者の出勤状況を確認するシステムを導入して
シフトを制御したい場合を考えます。
DBが2つあります。新たなシステムのため、③のDFを作ります。
①固定長の社員IDを含む社員情報DB
②指定した社員が割り当てされた当番表DF
③出勤情報DF

要件1:社員情報DBは頻繁に書き換えしたくない。
要件2:当番表DFは定期的に変更される。担当者はn人だが、DB直でcsvを抜いて使用する背景もあり、列ごとに担当者を置いている。
要件3:出勤情報DFは日付ごとに1ラベル以上作成せず、1か月後に消去される

上記の場合を考えます。
まず前提として当番表に保存された社員IDから社員情報を
リレーションで引き出すことは可能です(LookUpでOK)

社員情報DB列名=[社員コード,氏名,年齢]
(例)
{00000001,山田一郎,21}
{00000002,佐藤次郎,23}
{00000003,鈴木三郎,21}

当番表DF列名=[場所,区画ID,担当1,担当2]
(例)
{1階廊下,01001,00000001,00000002}
{2階廊下,02001,00000001,00000003}
{2階教室,02002,00000002,00000003}

このようなデータがあるとき、鈴木さんが「出勤」できなくなりました。
①鈴木さんは担当者IDの情報から全て「休み」に切り替えればよいです。
②山田、佐藤さんは鈴木さんが居なくなった2階廊下、2階教室を担当するため、他の区画担当ができなくなり、シフトを確定させます。なので、この場合の固有値は[社員コード]_[区画ID]_[ステータス]となります。
例えば、山田さんの場合、00000001_02001_1(1を出勤と置いている)
これでアンダーバー区切りの行が生成され、これを出勤情報DFに格納しましょう。当番表の垂直ギャラリー内にて、担当者で検索⇒(先のラベルから区画情報のみ抽出して)区画と異なる場合作業NGとして表示される仕組みを作れます。(結果的に1の情報冗長でしたね。そして1階廊下の担当がいないですが、多分管理者が担当するか、別の応援を募るなどの対応が必要になることでしょう)。

自分で出しておいてあんまりいい例じゃないかもです。
あと、お気に入り機能とか。メールアドレスに紐づけしてIDを保存できるので使えます。ID1/ID2/ID3…みたいに区切って、IDでフィルターできます。クリック情報を取得してUI改善やおすすめ機能実装もできます(ただし重たくなる)。
実装するときは普通にpatchで既存データに対して上書きする感じです。
「label列:既存データ&’/’&今回のIDを保存」といった具合です。

使用する関数

主に操作で使う関数
Distinct : テーブル⇒ダブリなし列データの変換
Concat : 列データ⇒テキスト(区切り文字あり)の変換
Sprit : テキスト(区切り文字あり)⇒列データの変換
FirstN : 区切りデータの指定されたデータの抽出
Patch : DFへの保存。仕様は公式で確認

キャッシュ保存したいとき
ClearCollect : DFを作って保存
Set : DFを保存しておくのに使う(通信回数を減らす)

必須ではない
Sequence : 連番をつけたいときに使う
Substitute : 不要なデータのトリミングや表示する際の翻訳

投稿者: beefst

機械工学,クリエイターをしています.読書も好きです.

コメントを残す