PowerAppsで家計簿を作ってみる(その1)
PowerAppsを触ってみることにしたものの、せっかくなら何か実用的に使えるものがいいなと思い、最近家計簿をつけるようになったので自分用に作ってみることにした。
ひとまずは自分用のメモとしてやったことや調べたことを記録していくしていく。
DBについて
EXCELでもいいんだけど、これを機にCommon Data Serviceを使ってみることにした。
- 入力したものをためていくためのTBL_HISTORY
- 食料品とか電気代なの費目としてTBL_ITEM(ほんとはITEMSとすべきだったんだけどもう作っちゃったのでこれで)
- 食費とか光熱費とか趣味とかカテゴリに分けたいのでTBL_CATEGORY
- 支出が消費、浪費、投資のどれに当たるのかを判断するための要素としてTBL_TYPE
を作成した。普段SQLServerとかのRDBに慣れてるので、最低限とりあえずテーブルを分けてみた。
TBL_TYPEはタイプ名で繋がってるがこれはわざと。他と合わせてIDとかで設定していくほうが良かったけど、いろいろと試してるうちに今回はこうしてみた。
ちなみに、テーブルはCommon Data Service(CDS)ではエンティティと呼ぶみたい。
リレーションについて
TBL_HISTORYの費目IDをTBL_ITEMのIDに対してN:1のリレーションを設定してみた。
こんな感じで設定する。「ルックアップ フィールドの表示名」と「ルックアップ フィールド名」はTBL_HISTORYに追加する項目の設定。
cdr62というのはプレフィックスとして固定で追加される。
同じようにTBL_ITEMとTBL_CATEGORYにも設定してみた
データのセットアップについて
TBL_ITEMとかはマスタデータになるので初期セットアップを行う。
EXCELで編集できるようなのでやってみた。
「EXCELでデータを編集」という項目があるのでこれをクリックするとEXCELファイルがダウンロードできる。 ダウンロードしたらそれを開く。
ファイルを開くとEXCELの右側にPowerApps用のアドオンが立ち上がる。サインインするとこんな感じにった。
カテゴリIDのようにTBL_CATEGORYとリレーションを設定した項目は、フォーカスをセルにあてるとこんな感じでリレーション先のテーブルの情報が参照できるので、そこから選ぶ形になる。
入力が終わったら「公開」をクリックする。これでCDSにデータが反映される模様。
ビューの作成
エンティティ作成後、ビューも作成できるようになったので1つ作成した。
基本的には左から項目をポチポチ選んでいくだけで完成する。
リレーションを設定している項目は「関連」というところから選択できる。
ここで気が付いたが、カテゴリーIDからカテゴリ名を引っ張ってきたいがやり方がわからず断念した。。。
TBL_TYPE
正直このテーブルはいらなかった。
家計簿についてはもともとZaimを使っていて、細かい設定とかできて最初は気に入っていたが、使ってるうちにこの細かさがめんどくささに変ってしまったのと、収入の金額を100%として、使ったお金を「消費」「浪費」「投資」に分けたくなったがこのカテゴリの追加がZaimだとできなかったのでこの3つの区分をテーブル(エンティティ)として作成した。レコードはもちろん3行しかない。
ぶっちゃけ流れでよく考えずに作ってしまったが、フィールドの設定項目に「オプションセット」というのがあり、こっちで実現すべきだと今は思っている。そのうち変えようと思う
TBL_CATEGORYに画像のフィールドを作成
カテゴリのアイコンを設定するためにデータ型がイメージのフィールドを追加した。
画像ファイルはEXCELで編集できるものでもないと思うので、まずはフォームを修正する。
左の項目から「カテゴリー名」と「イメージ」を追加して保存する。
データから1つレコードを選んで「レコードの編集」をクリック。
画像をアップロードをクリックしてアイコンをアップロードする。アップロード後は保存して閉じる。
DB周りはこんな感じで進めてみる 今回はここまで。
追記
詰んだ。
TBL_HISTORYの費目IDからTBL_ITEMを参照して、さらにTBL_ITEMのカテゴリIDかTBL_CATEGORYを参照してカテゴリIDの絞り込みをやろうとしたらエラーになった。
* エラーメッセージ:多対一のリレーションシップの複数レベルの展開はサポートされていません。
リレーションの項目を使ってエンティティA⇒エンティティB⇒エンティティCという形で2階層分参照するのがダメなんだろうな。(いまいちこのエラーメッセージについて検索したけどうまくヒットさせれなかった)
というわけで、仕方ないのでTBL_ITEMに「カテゴリー名」のフィールドを追加した。
整合性とかテーブルの整理とかは後からまた整理しようと思う。ただ、SQLServerみたいなRDBの考えをそのままそっくりCDSに持ってくるのはダメっぽい。正規化しすぎるとCDSにとっては複雑化してしまって処理できないみたい。この辺はテクニックもあるだろうけど初心者にはハードルが高いので、ここは割り切ってこの形で進めてみることにした。
追記2
TBL_HISTORYのリレーションとして設定したタイプ名を削除して、オプションセットで作成するように修正した。
中身はこの3つ
規定値も設定して保存