はなしの結論
あたりまえのこと
- データ取込処理はちゃんと作りましょう(テストしよう)
- データメンテもちゃんとしましょう。
FMのこと
- FileMaker はやっぱりRDBじゃない(再確認)
- FileMaker 「レコードのエクスポート」はエクセル仕様に近い。
話の経緯
社内の事業担当から「レコードがエクスポートされない」と相談を受けた。
曰く、「画面には500件ほど表示されているが、エクスポートすると50件しか出力されない」とのこと。
まったく担当外のファイルだったのと「そんなわけあるか」という思いで、よく分かりませんでしたが、
詳しく聞いてみるとこういう構成だと分かりました。
構成(テーブル・レイアウト)
- 親テーブルと子テーブルでリレーションしている
- 画面(レイアウト)は親テーブルとリンクしていて、子テーブルはポータルになっている
イメージ画像
担当者がやりたかったこと
- 画面上で対象レコードを絞り込み、子テーブルの情報も含めてエクスポート!
相談に来たこと
- 画面上で対象レコードを検索すると 500 件が検索される
- なのに、レコードのエクスポートをすると、なぜか50件しか出力されない・・?
- 増えることはあっても、なぜ減った??
確認したこと・対応したこと
とりあえず手がかりを得ようとデータを見ていると、子テーブルに空レコードが多いことが気になりました。
正確には 親テーブルとの紐づけ情報 だけ入っていて、子テーブルの管理情報(イメージテーブルでいうと タスク名 など)が入っていないレコードが多かった。
その時点で原因が見えた気がしたが、念のため担当者に同じ作業をしてもらい、一緒に検証することにしました。
検証したこと
担当者が問題に気づいた時と同じように操作をしてもらうとこんな感じでした
- レコードの絞り込み (⇒500件表示される)
- レコードのエクスポート(Excel)
- ファイルを見ると50件しかない!
ここで操作を引き取り行った作業はこんな感じ
- ctrl + ↓
- 続きのデータを発見!!
ようするに、、50件した出力されていなかったのではなく、空行が大量に出ていました。
(目に見える範囲は空行で埋め尽くされていた!)
どういうこと
FileMaker の仕様
親子テーブルが1:nの関係にある時に、レコードのエクスポートをすると
親テーブルのデータは1行目にしか出力されない。
という仕様があります。
たとえば、親テーブル1行に対して、子テーブルn行が紐づく場合は、こんな感じです。
親ID | 子.name | 子.メモ |
---|---|---|
123 | タスク1 | 明日までに終える |
タスク2 | 終わるまで帰れない | |
タスク3 | 終わる見込みが立たない | |
124 | タスクA | 5分で終わる |
タスクB | 寝てても出来る | |
タスクC | タスクAにより作業不要! |
一般的な RDB の Join なら親テーブルの情報も出力されますが、FileMaker は RDB じゃないですから仕方がない。
昔、エクセルで管理表を作った時のことをおもいだします。。
別に困らないよね?
普通は困ることはなと思います。
出力したエクセルを使って集計・・とか、たぶんないと思うので。(それならFMでやればいいので)
ただ、今回は子テーブルのデータがメンテ出来ていなかった(というかどうやって作った・・?)ため、親ID しかないテーブルが大量にありました。
そうすると・・
親ID | 子.name | 子.メモ |
---|---|---|
123 | タスク1 | 明日までに終える |
こんな出力になり、目に見える範囲では「1件しかない!」と見えたわけです。
しょうもなさすぎて久々にQiitaに書くモチベーションになったので、よかったことにしよう。