SHOTech Blog

プログラミングに関する記録です

PowerAppsで家計簿を作ってみる(その1)

PowerAppsを触ってみることにしたものの、せっかくなら何か実用的に使えるものがいいなと思い、最近家計簿をつけるようになったので自分用に作ってみることにした。
ひとまずは自分用のメモとしてやったことや調べたことを記録していくしていく。

DBについて

EXCELでもいいんだけど、これを機にCommon Data Serviceを使ってみることにした。 f:id:syota-y1989:20200816233734p:plain

  • 入力したものをためていくための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のリレーションを設定してみた。
f:id:syota-y1989:20200816234738p:plain
こんな感じで設定する。「ルックアップ フィールドの表示名」と「ルックアップ フィールド名」はTBL_HISTORYに追加する項目の設定。
cdr62というのはプレフィックスとして固定で追加される。

同じようにTBL_ITEMとTBL_CATEGORYにも設定してみた
f:id:syota-y1989:20200816235121p:plain

データのセットアップについて

TBL_ITEMとかはマスタデータになるので初期セットアップを行う。
EXCELで編集できるようなのでやってみた。
f:id:syota-y1989:20200816235304p:plain

EXCELでデータを編集」という項目があるのでこれをクリックするとEXCELファイルがダウンロードできる。 ダウンロードしたらそれを開く。

f:id:syota-y1989:20200816235459p:plain

ファイルを開くとEXCELの右側にPowerApps用のアドオンが立ち上がる。サインインするとこんな感じにった。

f:id:syota-y1989:20200816235626p:plain

カテゴリIDのようにTBL_CATEGORYとリレーションを設定した項目は、フォーカスをセルにあてるとこんな感じでリレーション先のテーブルの情報が参照できるので、そこから選ぶ形になる。   

f:id:syota-y1989:20200816235801p:plain

入力が終わったら「公開」をクリックする。これでCDSにデータが反映される模様。

ビューの作成

f:id:syota-y1989:20200817002118p:plain

エンティティ作成後、ビューも作成できるようになったので1つ作成した。

f:id:syota-y1989:20200817002235p:plain

基本的には左から項目をポチポチ選んでいくだけで完成する。

f:id:syota-y1989:20200817002358p:plain

リレーションを設定している項目は「関連」というところから選択できる。
ここで気が付いたが、カテゴリーIDからカテゴリ名を引っ張ってきたいがやり方がわからず断念した。。。

TBL_TYPE

正直このテーブルはいらなかった。 家計簿についてはもともとZaimを使っていて、細かい設定とかできて最初は気に入っていたが、使ってるうちにこの細かさがめんどくささに変ってしまったのと、収入の金額を100%として、使ったお金を「消費」「浪費」「投資」に分けたくなったがこのカテゴリの追加がZaimだとできなかったのでこの3つの区分をテーブル(エンティティ)として作成した。レコードはもちろん3行しかない。
ぶっちゃけ流れでよく考えずに作ってしまったが、フィールドの設定項目に「オプションセット」というのがあり、こっちで実現すべきだと今は思っている。そのうち変えようと思う f:id:syota-y1989:20200817001955p:plain

TBL_CATEGORYに画像のフィールドを作成

f:id:syota-y1989:20200817011835p:plain

カテゴリのアイコンを設定するためにデータ型がイメージのフィールドを追加した。

f:id:syota-y1989:20200817011956p:plain

画像ファイルはEXCELで編集できるものでもないと思うので、まずはフォームを修正する。

f:id:syota-y1989:20200817012035p:plain

左の項目から「カテゴリー名」と「イメージ」を追加して保存する。

f:id:syota-y1989:20200817012145p:plain

データから1つレコードを選んで「レコードの編集」をクリック。
f:id:syota-y1989:20200817012240p:plain

画像をアップロードをクリックしてアイコンをアップロードする。アップロード後は保存して閉じる。

DB周りはこんな感じで進めてみる 今回はここまで。

追記

f:id:syota-y1989:20200817112003p:plain
詰んだ。
TBL_HISTORYの費目IDからTBL_ITEMを参照して、さらにTBL_ITEMのカテゴリIDかTBL_CATEGORYを参照してカテゴリIDの絞り込みをやろうとしたらエラーになった。
* エラーメッセージ:多対一のリレーションシップの複数レベルの展開はサポートされていません。

リレーションの項目を使ってエンティティA⇒エンティティB⇒エンティティCという形で2階層分参照するのがダメなんだろうな。(いまいちこのエラーメッセージについて検索したけどうまくヒットさせれなかった)

f:id:syota-y1989:20200817112854p:plain
というわけで、仕方ないのでTBL_ITEMに「カテゴリー名」のフィールドを追加した。 整合性とかテーブルの整理とかは後からまた整理しようと思う。ただ、SQLServerみたいなRDBの考えをそのままそっくりCDSに持ってくるのはダメっぽい。正規化しすぎるとCDSにとっては複雑化してしまって処理できないみたい。この辺はテクニックもあるだろうけど初心者にはハードルが高いので、ここは割り切ってこの形で進めてみることにした。

追記2

f:id:syota-y1989:20200817132753p:plain
TBL_HISTORYのリレーションとして設定したタイプ名を削除して、オプションセットで作成するように修正した。

f:id:syota-y1989:20200817132925p:plain
中身はこの3つ

f:id:syota-y1989:20200817133259p:plain 規定値も設定して保存