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

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

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

You are not logged in.

Announcement

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


#1 2013-11-07 16:52:39

apo
Member

集計の高速化

またすいません。

売上テーブルのサイズ別の売上数フィールド、仕入テーブルのサイズ別の仕入数フィールドから
商品テーブルの計算フィールドであるサイズ別の在庫数フィールド(計算フィールド)で計算して
在庫数を出しております。
商品レコードが1000、売上や仕入レコードが3000を超え、商品レコードのレイアウトに
サイズ別に在庫数を出すと表示が重くなりました。
売上レコードや仕入レコードを作成時に商品テーブルから在庫数を取り出し、計算しまた元に戻す
事を考えましたが、
それをスクリプトでするとトリガーのタイミングで訂正時とかにとても煩雑な事になり新たな
間違えの火種になりそうです。。
ヒントか全く違う方法があれば教えてください。

Last edited by apo (2013-11-07 19:12:36)

Offline

#2 2013-11-07 17:33:08

旅人
Member

Re: 集計の高速化

1000や3000で計算がもたつくことは無いと思いますけど
サイズ別の売上数フィールド、仕入テーブルのサイズ別の仕入数フィールド
と在庫数はどのように計算しているのですか。

Offline

#3 2013-11-07 17:48:16

チポ
Member

Re: 集計の高速化

ファイルの構造と集計の方法がわかりません。

> 商品レコードの計算フィールドであるサイズ別の在庫数フィールド(計算フィールド)
サイズ別の複数の在庫数フィールド
とも読めますが、そうですか?

Offline

#4 2013-11-07 18:56:41

apo
Member

Re: 集計の高速化

ありがとうございます。
すいませんテーブルと各フィールドの詳細を書きます。

売上テーブル
売上日フィールド(日付フィールド)
商品IDフィールド(数値フィールド)
サイズフィールド(テキストフィールド)
Sサイズ売上数フィールド(if(サイズフィールド="S";1;0))
Mサイズ売上数フィールド(if(サイズフィールド=" M";1;0))
Lサイズ売上数フィールド(if(サイズフィールド="L";1;0))
Sサイズ売上数集計フィールド(集計フィールド)
Mサイズ売上数集計フィールド(集計フィールド)
Lサイズ売上数集計フィールド(集計フィールド)
売上金額フィールド(数値フィールド)
売上金額集計フィールド(集計フィールド)

仕入テーブル
仕入日フィールド(日付フィールド)
商品IDフィールド(数値フィールド)
Sサイズ仕入数フィールド(数値フィールド)
Mサイズ仕入数フィールド(数値フィールド)
Lサイズ仕入数フィールド(数値フィールド)
Sサイズ仕入数集計フィールド(集計フィールド)
Mサイズ仕入数集計フィールド(集計フィールド)
Lサイズ仕入数集計フィールド(集計フィールド)
下代金額フィールド(数値フィールド)
商品数合計フィールド(Sサイズ仕入数フィールド+Mサイズ仕入数フィールド+Lサイズ仕入数フィールド)
下代金額合計フィールド(下代金額フィールド*商品数合計フィールド)
下代金額合計集計フィールド(集計フィールド)

商品テーブル
商品IDフィールド(数値フィールド)
Sサイズ在庫数フィールド(Sサイズ仕入数集計フィールド-Sサイズ売上数集計フィールド)
Mサイズ在庫数フィールド(Mサイズ仕入数集計フィールド-Mサイズ売上数集計フィールド)
Lサイズ在庫数フィールド(Lサイズ仕入数集計フィールド-Lサイズ売上数集計フィールド)
利益計算フィールド(売上金額集計フィールド-下代金額合計集計フィールド)


実際はサイズはSMLだけではなく、それを含め20程あります。
前の説明では書いていなかったのですが、金額集計系のフィールドも含めました。
リレーションは商品テーブルを一側として売上テーブル、仕入テーブルの多側に
商品IDフィールドを関連フィールドとして繋がっています。
売上時は売上商品一つずつ記録するので、売上テーブルのサイズフィールドにサイズを入れると、
各サイズ売上数フィールドに1が入ります。仕入と同じ形式にしておく方が計算が
し易いと思いそうしました。
仕入時は仕入商品一種類ずつ記録しているので、各サイズ毎に数個登録せねばならず、
複数のサイズフィールドが必要でした。

Offline

#5 2013-11-07 19:15:41

apo
Member

Re: 集計の高速化

あともたつくのは、商品一覧レイアウトで商品が表示されるポータルフィルタとグローバルフィールドを使って商品を絞る時でした。
そのレイアウトを開くときも同様に重いです。ですが、その結果が出た後のポータルのスクロール等では特に問題のあるもたつきは
今のところ感じられません。

Last edited by apo (2013-11-07 19:17:29)

Offline

#6 2013-11-07 19:35:20

Shin
Member

Re: 集計の高速化

売り上げ、仕入れ共に、1商品1サイズ毎に1レコードにされたほうが、管理が簡単になるでしょうし、集計も早くなると思います。
また、在庫数の計算は、集計結果を更に計算するより、リレーションで関連フィールドを絞り込み、そのなかで Sum() 関数で合計したほうが早くなるはずです。

ところで、一定の期間毎に、棚卸はされないのですか。

Offline

#7 2013-11-08 03:07:44

apo
Member

Re: 集計の高速化

ありがとうございます。

Shinさん
>在庫数の計算は、集計結果を更に計算するより、リレーションで関連フィールドを絞り込み、そのなかで Sum() 関数で合計したほうが早くなるはずです。
商品テーブル側でサイズ別に在庫数らを表示したい時、商品IDとサイズでリレーションしてsum(売上::商品数)-sum(仕入::商品数)とするという事ですか?

>ところで、一定の期間毎に、棚卸はされないのですか。
あります。何故ですか?

Offline

#8 2013-11-08 08:58:41

Shin
Member

Re: 集計の高速化

そのほうが早くなると思います。お試しください。
また、売り上げ、仕入れ共に、1商品1サイズ毎に1レコードにされると同時に、商品マスターも1商品1サイズで1レコードとなるレコードを別に作り、それを商品マスターの中でサイズ一覧の形で見せておかれると、処理が明快になると思います。

棚卸は、当初は必要無いと思われるでしょうが、そのファイルを数年間運用していくと、レコード数が膨大になりますね。数万では遅くなることはないでしょうが、数千万、という数になってくると流石に遅くなってきます。棚卸毎に集計を区切るような構造を考えておかれたほうがいいと思います。

Offline

#9 2013-11-08 08:59:34

チポ
Member

Re: 集計の高速化

> 売り上げ、仕入れ共に、1商品1サイズ毎に1レコードにされたほうが
まず、
これを考えるべきですよ。


次の問題は後からでもできますし。。

Offline

#10 2013-11-08 18:59:16

apo
Member

Re: 集計の高速化

ありがとうございます。

サイズ毎に一レコード作るという事は、テーブルの構造としては商品テーブルを一側にしたサイズ名と
在庫数集計フィールドを含むサイズテーブルを多側として作るという事ですね。
当初今よりももっと知恵が無い頃、その方法をとるとサイズとその在庫数集計は商品レイアウトの
ポータルでしか表示出来ないと思ってしまい、それでは縦方向にしかリスト出来ない等視覚的問題の
為にそのテーブル構造自体を却下してしまいました。
今では例えば商品テーブルにグローバル計算フィールドをサイズ種類分好きな置き方で置き、
その商品のサイズ別在庫数集計を取り出して表示すれば良かったんだなと思います。

今試しに仕入テーブルをその形式に変換しようとしてスクリプトとかなり苦戦しております、、。
コツでもありますか?

システムの新調については、四年位したら必要な統計をとってから、最初の一年分の売上、仕入レコードと
売り切れ商品レコードを他のファイルに移そうと思っていました。

Offline

#11 2013-11-08 19:21:51

apo
Member

Re: 集計の高速化

ごめんなさい。
>サイズ毎に一レコード作るという事は、テーブルの構造としては商品テーブルを一側にしたサイズ名と
>在庫数集計フィールドを含むサイズテーブルを多側として作るという事ですね。
違いましたバカです。仕入テーブルを一としてサイズテーブルを多として繋ぐの間違いでした。

Offline

#12 2013-11-08 19:47:49

apo
Member

Re: 集計の高速化

ごめんなさい。
商品テーブル側もサイズテーブルを持たないと、売上のサイズテーブルや仕入のサイズテーブルをサイズで絞れないですね。
商品テーブル側もサイズテーブルが要るとなると、やはり商品レイアウトにもポータルがいるのかな。。。

Offline

#13 2013-11-08 20:19:28

Shin
Member

Re: 集計の高速化

こんな構造がいいと思いますよ。おそらく、集計も非常に早いでしょう。
https://dl.dropboxusercontent.com/u/926 … 59.fp7.zip

Offline

#14 2013-11-08 22:00:56

apo
Member

Re: 集計の高速化

ありがとうございます。

ファイルまで頂いてすいません。。やはり仕入、売上のサイズテーブルと商品のサイズテーブルを繋げ、そこでsumで合計するのですね。
ただやはりなんとか商品テーブルでポータルを使わない方法はないものでしょうかね、、。色々計算式をいじくりまわしていますが。

Offline

#15 2013-11-08 23:43:37

Shin
Member

Re: 集計の高速化

ポータルを使わなく、という事だけでしたら、固定されたリレーションをサイズだけ張っておけば良いですが。ただ、サイズが20種類くらい有るんでしょ。最初に頑張って作るのは簡単ですが、何らかの変更が必要になると地獄を見ますよ。
ポータルのどこが嫌なんですか。

サンプルファイルのレイアウト上の表現を変えてみました。ダウンロードし直してみて下さい。
この形がお望みなのですか。(これもポータルを使った表現です)

Last edited by Shin (2013-11-08 23:50:49)

Offline

#16 2013-11-09 00:39:58

apo
Member

Re: 集計の高速化

またファイルありがとうございます。。なるほど分かりましたポータルを横に一行ずつ並べてあるのですね!
商品テーブル一つにつき全サイズのレコードを自動で生成すると同じ位置に同じサイズの数量が来るので
自分としては完璧になります。仕入テーブルからサイズテーブルに変換するスクリプトを頑張って作ってみます。
ありがとうございました。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 558.63 KiB (Peak: 579.55 KiB) ]