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

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

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

You are not logged in.

Announcement

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


#1 2013-10-25 21:07:20

ぽんた
Guest

繰り返しフィールドのリレーションによる合計値表示

いつも参考にさせていただき、とても勉強になります。

過去ログを検索したのですが、ちょうどあてはまる内容を確認出来なかったので、
質問させていただきます。

質問内容は、従業員名、年、月のフィールドと、31の繰り返しの出勤予定入力の
フィールドのある出勤予定テーブルがあって、1か0で出勤予定を入力しています。

わけあって後部総計などを利用した集計ではなく、メニュー画面上部にグローバルで
年月を入力させて、年月のリレーションで31の出勤予定の合計を表示したいのですが、
やはり出勤予定テーブルの出勤予定入力のフィールドを計算式で31個に分解して、
合計値を出すしかないでしょうか?お力をいただければ助かります。

環境はWindows7 FMPro12です。

#2 2013-10-25 21:51:37

Hiro
Member

Re: 繰り返しフィールドのリレーションによる合計値表示

ただ、

Sum(出勤予定繰り返しフィールド)

で良いのでは、

Offline

#3 2013-10-25 22:33:42

ぽんた
Guest

Re: 繰り返しフィールドのリレーションによる合計値表示

Hiroさん回答どうも有難うございます。
質問の書き方が悪かったようですみません。

31日間のそれぞれの日ごとの合計値を31日間分の
繰り返しフィールドで表示したいと思っています。

どうぞよろしくお願い致します。

#4 2013-10-25 23:21:32

Shin
Member

Re: 繰り返しフィールドのリレーションによる合計値表示

リレーションを使わなくても良いのでしたら、

年月のグローバルフィールドの仕掛けたトリガーで、レコードの抽出を行います。
合計は、集計フィールドにして、合計にし、個別集計にしておきます。

Offline

#5 2013-10-26 01:55:58

Hiro
Member

Re: 繰り返しフィールドのリレーションによる合計値表示

それなら、
自己年月が指定グローバル年月と一致する場合に出勤予定[31]フィールドの値を得る計算繰り返し[31]
フィールドを作り、それの各合計値を得る集計繰り返し[31]フィールドで単純表示するのが安直かな。
この案では、リレーションやトリガーは無用です。

●サンプル「出勤予定月次集計.fp7」→ http://yahoo.jp/box/eA_h_2
(あえて汎用性ある.fp7にしてあります。.fmp12は変換してご覧下さい)

Offline

#6 2013-10-26 09:44:59

ぽんた
Guest

Re: 繰り返しフィールドのリレーションによる合計値表示

Shinさんへ

どうも有難うございます。

トリガでHiroさんに作成いただいたような集計レイアウトへ移動して
集計値を取ってきて、メニューレイアウトに戻り、合計数表示用の
繰り返しフィールドに転記するものを作成していたのですが、
やはり動作がもっさりしてしまうので、リレーションなどで
速く簡単に表示出来ないかと思い、質問させていただいた次第です。


Hiroさんへ

お忙しい中サンプルまで作成いただき恐縮です。
どうも有難うございます。

サンプルのヘッダ領域の部分だけ別テーブル表示のメニュー用のレイアウトの
一部分に表示したいのですが、リレーションと計算フィールド(繰り返し数31)で
表示するのは難しいでしょうか?

何度も申し訳ありませんがよろしくお願い致します。

#7 2013-10-26 12:30:05

チポ
Member

Re: 繰り返しフィールドのリレーションによる合計値表示

計算フィールド・繰り返しで
Sum関数
を使って繰り返し各回ごとの合計ができますよ。

Offline

#8 2013-10-26 13:54:52

ぽんた
Guest

Re: 繰り返しフィールドのリレーションによる合計値表示

チポさん、どうも有難うございます。

Sum ( GetRepetition ( 年月のリレーション::出勤予定入力 ; Get ( 計算式繰り返し位置番号 ) ) )
とやってみたのですが、31の繰り返しの全ての枠内に31全て(年月全て)の合計値が出てしまいます。
串刺しの合計値というのでしょうか、31日の日ごとの合計値がそれぞれの枠内に出てくれれば理想なのですが、
何か計算式が間違っておりますでしょうか?

入力元の出勤予定入力のフィールドを分解して、31の計算フィールドを作成すれば出来るのですが、
作成せずに出来ればと思い、質問させていただきました。

#9 2013-10-26 14:35:57

traveler
Guest

Re: 繰り返しフィールドのリレーションによる合計値表示

リレーション先の繰り返し行ごとの計算はそうなりますよね。
Shinさんのが簡単ですけど集計だから対象レコードを絞らないといけないし。
別テーブルからのリレーションでの計算だとLoopで関連レコードの1レコードの1行ずつを
足していけばできるのでは?
従業員が何万人もはいないでしょうからもっさりは無いと思います。

#10 2013-10-26 15:21:57

Hiro
Member

Re: 繰り返しフィールドのリレーションによる合計値表示

別メニューテーブルから操作・結果参照なら、
必要なフィールド全てをグローバル格納フィールドとしてマスタテーブル側に用意し、
それを[X]リレーション越しに表示するのが楽で良いかな。

●修正サンプル「出勤予定月次集計v2.fp7」→ http://yahoo.jp/box/Xduu5u
(あえて汎用性ある.fp7にしてあります。.fmp12は変換してご覧下さい)

Offline

#11 2013-10-26 16:11:55

wader
Member

Re: 繰り返しフィールドのリレーションによる合計値表示

関連レコードの繰り返しを個別に合計する計算式
(関連レコード数nが400まで)

Let ( [
n=Count ( table 2::key ) ;
$n=Get ( 計算式繰り返し位置番号 );
f=Substitute ( 10^n-1 ; 9 ; "GetNthRecord(table 2::data[$n];Let($i=$i+1;$i))+" ) &"0"
];
Let ( $i = 0 ; Evaluate ( f ) )
)

Offline

#12 2013-10-26 16:59:01

ぽんた
Guest

Re: 繰り返しフィールドのリレーションによる合計値表示

travelerさん、どうも有難うございます。

スクリプトで作成したものも試したのですが、
計算式だと一瞬で表示されるのですが、スクリプトだと
年月を切り換えた際にどうしてもタイムラグが出るため、
いろいろと思案していました。


Hiroさん、どうも有難うございます。

自分の思った理想形です。大変勉強になりました。
表示先のテーブルで繰り返しの計算表示しようとしていましたが、
データ元のテーブルで繰り返しの集計値を作れば良いのですね。
頭の中の絡んだ糸が解けて頭がスッキリしました。有難うございます。


waderさん、どうも有難うございます。

すごい計算式ですね。私の頭で理解するのは時間が
かかると思いますが、より定義が単純化できるので
是非マスターしたいと思います。
今回は関連フィールドが400を超える可能性が無いとは
言い切れないので、Hiroさんの方法で作成したいと思います。


ご回答いただきましたHiroさん、Shinさん、チポさん、
travelerさん、waderさん、どうも有難うございました。
大変勉強になりました。自分の引き出しが少し増えた気がします。

#13 2013-10-26 17:17:07

traveler
Guest

Re: 繰り返しフィールドのリレーションによる合計値表示

スクリプトの手抜きサンプル 出勤簿.fp7
従業員100人でやってみましたけど普通かな?
http://pupld.net/21/131026/1pj4hsf07w/index.cgi

#14 2013-10-26 20:01:05

Hiro
Member

Re: 繰り返しフィールドのリレーションによる合計値表示

勝手に補足、

ぽんた wrote:

waderさん、どうも有難うございます。
すごい計算式ですね。今回は関連フィールドが400を超える可能性が無いとは
言い切れないので、Hiroさんの方法で作成したいと思います。

400以上1000以下に拡張する式例、(400は数字桁数制限、1000はSubstitute関数の引数制限)

Let([
 n=Count(table 2::key);
 unit=10^400-1;
 n=Choose(Div(n;400); ""; unit; unit&unit; unit&unit&unit) & Left(unit;Mod(n;400));
 $n=Get(計算式繰り返し位置番号);
 f=Substitute(n; "9"; "GetNthRecord(table 2::data[$n];Let($i=$i+1;$i))+") & "0"
];
 Let($i=0;Evaluate(f))
)

Last edited by Hiro (2013-10-27 00:41:35)

Offline

#15 2013-10-26 21:08:10

wader
Member

Re: 繰り返しフィールドのリレーションによる合計値表示

繰り返し計算の回数を増やすのは、
https://fm-aid.com/bbs2/viewtopic.php?id=298
の#6のを使うと400x400で16万まで増やせますが、そこにもある通り計算時間がバカにならないので、フィールド計算式で使うのは無理がある。
(増やすだけなら、もう1段同じ処理をするだけでさらに400倍になります)

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, 12 queries executed - Memory usage: 552.36 KiB (Peak: 573.27 KiB) ]