初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-03-07 12:29:02

hoyo
Member

リレーション先を参照した計算フィールドの出力時間

FileMaker Pro Advanced13、 Windows7を使用しています。
計算フィールドの出力時間について質問です。

商品マスタテーブルを計算フィールドで特定の仕様に変換して出力しています。
計算フィールドは170個ほどあります。
商品マスタは20万件ほどあり、一日10~1000件ほど増えていきます。

出力時に一行目指定の問題があったためこちらを参考に
CSV出力用のテーブルを作成し、インポート・削除を繰り返していました。
https://fm-aid.com/bbs2/viewtopic.php?id=1550

計算フィールドを出力用テーブルに作成したためか、出力時間が3万件で1.5時間ほどかかります。

出力用テーブルは元のマスタとユニークなIDでリレーションを組み、そのIDをインポートする形にしています。
出力時間を減らしたいのですが、テーブルの構成や計算フィールドの使い方など
通常どのように組むべきものなのかわからずにいます。
よろしくお願い致します。

Offline

#2 2017-03-07 12:58:41

シャチ
Member

Re: リレーション先を参照した計算フィールドの出力時間

どういうシステムなのかわからないので
失礼なお話になるかもしれませんが
なぜ、こんなに計算フィールドが多いのか
まずそれが問題になるでしょうし、
さらに計算がリレーションに関係すると
もうそれはとんでもないことになると思います。
計算が一時的に必要なものであるとしたら
スクリプトなどで現在の計算フィールドに計算結果を代入する方式に変えると
出力時間はかなり短くなると思います。

計算フィールドが非保存になっている場合を想定の話です。
索引が設定されている場合は、そんなにはかからないはずです。
非保存になっているものの見直しが必要かもしれません。

Last edited by シャチ (2017-03-07 13:05:24)

Offline

#3 2017-03-07 13:34:56

Hiro
Member

Re: リレーション先を参照した計算フィールドの出力時間

別テーブル故の非保存計算値を出力してるからと思います。
自テーブルの保存値を出力するよう努めるのが良いでしょう。
・レコードCSV1行分を計算式で生成。
・レコード番号が1番のCSV文には、タイトルCSVの前行を追加。
・この計算CSVフィールドだけを対象に、.csv拡張子名を冠して、TAB形式でエクスポート出力。
・出力ファイルをテキストエディターで開いて、CSV1行目のタイトルとCSV文との間の「改行」文字化けを訂正します。

Last edited by Hiro (2017-03-07 13:57:04)

Offline

#4 2017-03-07 13:46:19

hoyo
Member

Re: リレーション先を参照した計算フィールドの出力時間

シャチ様、ご回答ありがとうございます。
説明が不十分で申し訳ありませんでした。

計算フィールドが多いのは、一モールの商品マスタから複数の他モールの商品マスタ仕様に変換しているためです。
マスタに必要なのは一店舗分だけとなっています。
また別テーブルのフィールドを計算しているため、索引が設定されず計算フィールドは非保存になっています。

おっしゃる通り計算は出力時に必要なだけですので、計算結果を残しておく必要はありません。
計算フィールドに計算結果を代入する方式というのがどのような方式か、すみませんが教えていただけますと幸いです。

Offline

#5 2017-03-07 13:50:03

hoyo
Member

Re: リレーション先を参照した計算フィールドの出力時間

Hiro様、ご回答ありがとうございます。

なるほど計算フィールドを自テーブル一つだけにして、カンマ区切りで計算式を並べTAB形式で出力ということでしょうか。
早速やってみます!
ありがとうございました。

Offline

#6 2017-03-07 14:21:51

シャチ
Member

Re: リレーション先を参照した計算フィールドの出力時間

問題は出力の時に必要なのかどうかです。
データが入力された時に計算をしておくことができるのなら
1日単位とか行った時間単位で
スクリプトを事項させて計算させてしまうということです。
(現在の計算式をスクリプトの中で使うということです)
これが
出力時に計算しなければならないということであれば
それは違った方法でということになるんでしょうが。。。。

Offline

#7 2017-03-07 14:34:01

シャチ
Member

Re: リレーション先を参照した計算フィールドの出力時間

もう一つ
テーブルがいくつ絡んでいるんでしょうか?
それらのテーブルがいくつかあるのなら
まとめることができないか?
まとめることができるのなら
そのリレーション側テーブルでの
集計で処理などでできないか?
そんなことも視野に入れると違った面の処理方法になるかもしれません。

Offline

#8 2017-03-07 14:44:38

hoyo
Member

Re: リレーション先を参照した計算フィールドの出力時間

シャチ様ありがとうございます。

あらかじめスクリプトで計算させておくということですね、なるほど。
変更されたレコード分だけ対象にすると時間はかからなそうです。

テーブルは出力用だけで6つほどあります。
同じ一行目で計算内容の違うものがあったので分けてしまいました。

フィールド内改行がCSVだとうまく出力されないため元々Excelワークブック形式で出力していましたが
最近PowerShellで変換する術を覚えました。
そうなると一行目にこだわる必要もないのかもしれません…

Last edited by hoyo (2017-03-07 15:16:38)

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.013 seconds, 7 queries executed - Memory usage: 516.96 KiB (Peak: 521.87 KiB) ]