みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
以下のような集計はどのようにしたらできますでしょうか?
OS、バージョンに関係なくファイルメーカーでの一般論で
お聞きしたいのですが。
開催国フィールド内に改行区切りで二つまで国名が入ります。
(国名が0個またはひとつの場合もあります)
レコード1 開催国F
JAPAN(改行)
CHINA
レコード2 開催国F
THAI(改行)
JAPAN
レコード3 開催国F
JAPAN(改行) 同じ国名が重複する場合もあります。
JAPAN
レコード4 開催国F
KOREAN(改行)
JAPAN
というフィールド内容のレコードが現在4つあるとします。
それと国名テーブルがあり、
国名フィールド、合計フィールドがあります。
国名F 合計F
JAPAN 5個
CHAINA 1個
THAI 1個
KOREAN 1個
のように集計して合計するにはどのような手法で
できますでしょうか?
リレーションを
国名=開催国
PatternCount(¶&List(::開催国)&¶;¶&国名&¶)
List関数がないバージョンでは計算では無理かな~
ありがとうございます。
PatternCountを使うんですね。
式内に改行マークがそれぞれ前後に入ってる意味がわからないのですが、
どのような意味でしょうか?
>List関数がないバージョンでは計算では無理かな~
そうですかぁ。
一般論としてきいたのはそんな特殊な関数は使わないと思っていたのですが、
Listが無いような場合は難しいですね。
同じようなことをFM12とFM8でやりたいなと考えていたのです。
FM8ではListがないのでやはりダメですかね。。。
国名を二つのフィールドに展開すれば数えられるでしょう。
でも、
別テーブルにするのが基本ですよね。
Offline
timさん、
書いていただいた式をFm12でやってみました。
数値が合わないので改行マークの連結をはずしました。
そうすると計算が合いました。
チポさん、
二つのフィールドにすればいいのはわかっていたのですが、
なんとかこのままで出来ないかと考えてみました。
それと、別テーブルにするというのはどういうことでしょうか?
どれとどれを別テーブルにするのでしょう。。。
計算フィールドを二つ作り、
現状からその二つに分ければ集計できるでしょう。
別テーブルとは、
1国名を1レコードとして、現テーブルとはユニークな値でリレーション。
これで現テーブルのポータルで国名が表示でき、
国名ごとのカウントも簡単ですよね。
Offline
チポさん、
>別テーブルとは、
>1国名を1レコードとして、現テーブルとはユニークな値でリレーション。
>
>これで現テーブルのポータルで国名が表示でき、
>国名ごとのカウントも簡単ですよね。
現在最初に書いたような国名テーブルがすでにあり、リレーションしています。
その上でカウントしようとしているのですが、、、なにか私が勘違いしていますか?
いや、違います。
現状の改行で入力しているフィールドをやめて、
それを別テーブルにしては。
と提案しています。
Offline
チポさん、
開催国テーブル1と開催国テーブル2と国名テーブルということですか?
前後に改行を付けるのは、部分一致を除外するためです。(NORTH KOREAがあるとKOREAの数に勘定される)
Positionじゃないから途中の改行を2個にしないとだめだった。
PatternCount(¶&Substitute(List(::開催国);¶;"¶¶")&¶;¶&国名&¶)
timさん、
今それに気づきまして出来ました。
ありがとうございます。
FM12ではこれでなんとかいけそうですが、Listの使えないFM8でどうするかですね。
そちらはチポさんにご意見いただいた方法で考えて見ます。
ポータルを loop でざっと舐めて、フィールドに改行区切りで取り込んでくればいいでしょう。
PatterCount 使わないで、
ValueCount ( FilerValue ( List ( ::開催国 ) ; 国名 ) )
でもいけるはずです。
Offline
できるだけ古そうな関数だけ使ったつもりだったが、ListよりFilterValuesの方が古かった^^;
フィールド2個とか、テーブルで最大2レコード、にすれば、Countで簡単。
Shinさん、
ありがとうございます。
FM12ではなんとかできました。FilterValueも使えるんですね。
ただ、やはりこちらもListがあるので対象バージョンが限られますね。
今、FM8用にはフィールド2個に分けてCountの方法でなんとか実現できました。
List関数をなんとかFM8で再現する方法はないんでしょうかね。。。
カスタム関数のページをのぞいたところ、あるにはあるのですが、わざわざ重複内容は省かれるという
機能が入っておりまして、残念ながら無理そうでした。そのカスタム関数を改造すればいいのでしょうが、
私には敷居が高いので無理そうです。
元来FM標準の集計機能は、レコード単位で集計を行います。集計データがレコード毎に分かれているのが基本です。
本事案のような場合通常は、そのような別テーブルを作ってそこで集計機能を適用します。
別テーブルに書き出す定石手法は、
・リスト[2]データ → ・繰り返し[2]計算フィールドへ → ・別テーブルへインポート(+「繰り返し値をレコード分解」オプション指定)
Offline
皆様ありがとうございました。
すこし課題はありますが、希望のものを出すことができましたので、
ひとまず解決にしておきます。
Pages: 1
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 530.06 KiB (Peak: 550.6 KiB) ]