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

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

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

You are not logged in.

Announcement

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


#1 2014-02-25 12:00:44

ちさ
Guest

日毎のデータを1レコードにするには

いつもお世話になっております。
win7 pro12 adv

例えば下記の様なテーブルがあったとします。
(説明の為に部署、売上とさせていただいております。
仮に、各25,000部署の31日分の売上データがあったとします。)

【Aテーブル】
部署CD,月,日,売上
10010,1,2,300
10010,1,3,250
             ・
             ・
10010,1,31,240
10020,1,4,540
10020,1,5,168
             ・
             ・
10020,1,31,874

【Bテーブル】
部署CD  月   日1 日2 日3 日4 日5 ・・・・・・・日31 日数 売上1 売上2 売上3 売上4 売上5・・・・・・・売上31 売上計
10010   1           2    3                         31   20   300    250                                      240   9999999
10020   1                      4    5              31   18                             540  168              874   8888888

やりたいことは、【Aテーブル】各部署の日毎のデータを元に
【Bテーブル】部署の月毎のテーブルを作成しCSVで納品することです。

【Bテーブル】のレイアウトは指定されているので変更することができません。
また、【Bテーブル】をエクスポートしてCSVファイルで納品なので
なるべく【Bテーブル】の日付,売上フィールドは繰り返しフィールドは使わないほうがよいかなと思っています。

現在はloopでまわしながら日付を変数にセットして
フィールドを名前で設定["Bテーブル::売上" & $変数 ; Aテーブル::売上] とし作成していますが
データが多いと処理時間がかかってしまいます。
そこで、もっとよい方法があればと質問させていただきました。

旨く伝わるとよいのですが、皆様でしたら
【Bテーブル】の日数と売上計の求め方は考えないとして単純に横展開して【Bテーブル】を作成する場合
どの様にいたしますか?宜しくお願いいいたします。

#2 2014-02-25 12:20:05

Shin
Member

Re: 日毎のデータを1レコードにするには

繰り返しフィールドにして、それを集計するのが簡単でしょう。日数と合計も同時に集計できます。(使わないほうがいいと思われている理由は?)
書き出す際には、それを加工すれば良いです。

それ以外でしたら、日とコードで集計しておいて、エクスポートして整形、が楽かな。

Offline

#3 2014-02-25 12:55:30

ちさ
Guest

Re: 日毎のデータを1レコードにするには

Shin様 ありがとうございます。

繰り返しフィールドを使わないほうがよいと思った理由は
エクスポートする際に加工する処理が必要かと思ったので、
最初から繰り返しフィールドを使用しないテーブルに書き出せばその処理が必要ないかなと思いまして・・。

やはり【Bテーブル】の日付と売上は繰り返しフィールドにしたほうがいいですかね?
繰り返しフィールドにした場合、繰り返しフィールドにセットしていく方法はやはりLOOPで1件ずつということになるのでしょうか?

宜しくお願いいたします。

#4 2014-02-25 16:49:38

チポ
Member

Re: 日毎のデータを1レコードにするには

メチャメチャ手間がかかるベタベタの設定ですが、、


Bテーブルで「日」を入力するグローバルフィールドを31個作り日を入力、
Aテーブルと
  部署ID and 月 and 各日付
ごとの31のリレーション。


設定は大変ですが、後はノータッチ、瞬時で表示が可能でしょう。


多分採用されないだろうなーー ^^

Offline

#5 2014-02-26 09:45:15

SQLExecuter
Guest

Re: 日毎のデータを1レコードにするには

ExecuteSQLなら計算フィールドをフィールド内容のエクスポートするだけでいいけど、25000だと無理かなあ。

#6 2014-02-26 09:52:20

ちさ
Guest

Re: 日毎のデータを1レコードにするには

チポ様

ありがとうございます。
実はその案も考えました。
リレーションの数が多くなるので他の人がみるとわかりずらいかと思って
皆さんはこのような場合はどうなさっているのかと思い問させていただきました。

もう少し考えてみます。
皆様ありがとうございました。

#7 2014-02-26 09:56:44

ちさ
Guest

Re: 日毎のデータを1レコードにするには

SQLExecuter 様

ありがとうございます。
ExecuteSQLですか。
使ったことがなかったのでチャレンジしてみます。
わからない点がありましたら質問させていただきます。
宜しくお願いいたします。

#8 2014-02-26 16:23:49

SQLExecuter
Guest

Re: 日毎のデータを1レコードにするには

金額だけやってみたら、集計結果500行で1分ぐらいかかりました。この方式は無理。
ExecuteSQL ( "
SELECT
\"部署CD\",
SUM(CASE WHEN \"日\"=1 THEN \"売上\" END),
SUM(CASE WHEN \"日\"=2 THEN \"売上\" END),
SUM(CASE WHEN \"日\"=3 THEN \"売上\" END),
中略
SUM(CASE WHEN \"日\"=30 THEN \"売上\" END),
SUM(\"売上\")
FROM \"SQLで集計\"
WHERE \"部署CD\"<'10500'
GROUP BY \"部署CD\"
ORDER BY 1
" ; Char(9) ; "" )

#9 2014-02-26 23:05:36

Shin
Member

Re: 日毎のデータを1レコードにするには

こんな感じで。
https://dl.dropboxusercontent.com/u/926 … 36.fp7.zip

やっていることは、元テーブル側で繰り返しフィールドへ展開して、繰り返し毎に集計。
その集計値のみを別テーブルへ繰り返しフィールドのままでインポートします。
さらに、繰り返し計算フィールドを使った再帰的な計算(ここが味噌)で、各繰り返し内容を評価しながら、目的とする文字列を作っていき、最後の繰り返し位置の値を取り出します。
この値を、商品コードと共にファイルへ書き出します。

500レコード程度でしたら、4秒ほどです。25000くらいになると、それなりに時間はかかるでしょうね。

Last edited by Shin (2014-02-27 18:45:00)

Offline

#10 2014-02-27 09:49:53

ちさ
Guest

Re: 日毎のデータを1レコードにするには

SQLExecuter 様
検証までしていただいて大変申し訳ございません。
ためしにやってみます。
本当にありがとうございました。

Shin 様
サンプルまで作っていただいて大変申し訳ございません。
時間的にも今よりはだいぶ早くなりそうなのでサンプルを
解析してトライしてみます。
感謝感謝です。本当にありがとうございました。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 571.16 KiB (Peak: 588.06 KiB) ]