LoginSignup
2
0

More than 5 years have passed since last update.

FileMaker エクスポート機能の罠(リレーション先データの出力時)

Posted at

はなしの結論

あたりまえのこと

  • データ取込処理はちゃんと作りましょう(テストしよう)
  • データメンテもちゃんとしましょう。

FMのこと

  • FileMaker はやっぱりRDBじゃない(再確認)
  • FileMaker 「レコードのエクスポート」はエクセル仕様に近い。

話の経緯

社内の事業担当から「レコードがエクスポートされない」と相談を受けた。
曰く、「画面には500件ほど表示されているが、エクスポートすると50件しか出力されない」とのこと。

まったく担当外のファイルだったのと「そんなわけあるか」という思いで、よく分かりませんでしたが、
詳しく聞いてみるとこういう構成だと分かりました。

構成(テーブル・レイアウト)

  • 親テーブルと子テーブルでリレーションしている
  • 画面(レイアウト)は親テーブルとリンクしていて、子テーブルはポータルになっている

イメージ画像

テーブルイメージ
親子テーブルイメージ.png

画面イメージ
サンプル画面.png
※FM17のサンプルファイルから拝借

担当者がやりたかったこと

  • 画面上で対象レコードを絞り込み、子テーブルの情報も含めてエクスポート!

相談に来たこと

  • 画面上で対象レコードを検索すると 500 件が検索される
  • なのに、レコードのエクスポートをすると、なぜか50件しか出力されない・・?
  • 増えることはあっても、なぜ減った??

確認したこと・対応したこと

とりあえず手がかりを得ようとデータを見ていると、子テーブルに空レコードが多いことが気になりました。

正確には 親テーブルとの紐づけ情報 だけ入っていて、子テーブルの管理情報(イメージテーブルでいうと タスク名 など)が入っていないレコードが多かった。

その時点で原因が見えた気がしたが、念のため担当者に同じ作業をしてもらい、一緒に検証することにしました。

検証したこと

担当者が問題に気づいた時と同じように操作をしてもらうとこんな感じでした

  1. レコードの絞り込み (⇒500件表示される)
  2. レコードのエクスポート(Excel)
  3. ファイルを見ると50件しかない!

ここで操作を引き取り行った作業はこんな感じ

  1. ctrl + ↓
  2. 続きのデータを発見!!

ようするに、、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に書くモチベーションになったので、よかったことにしよう。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0