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

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

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

You are not logged in.

Announcement

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


#1 2014-12-25 17:37:53

ponzu
Guest

重複を除くリレーション先の数のカウントは

filemaker13をつかっています。
リレーション先が6レコードあって、それぞれのレコードの同一フィールドに
AA
BB
BB
CC
CC
CC
という値がある場合、「6」件ではなく「3」種類という値を求めたいのですが
count関数では出来ませんでした。
できれば値一覧などを使わずシンプルに求められればと思うのですが
こういったことは可能でしょうか?

#2 2014-12-25 17:56:11

Shin
Member

Re: 重複を除くリレーション先の数のカウントは

重複を禁止した別テーブルへインポート、はどうでしょう。

Offline

#3 2014-12-25 18:39:49

ponzu
Guest

Re: 重複を除くリレーション先の数のカウントは

想定外のアイデアをありがとうございます。
説明を簡易にするためにリレーション先が6件と書きましたが
実際はもっと多く、「種類数」の増減もあります・・・
できれば毎回インポートさせるのではなく
計算式で求めたいのですがやはり値一覧をつかわないと難しいでしょうか・・・?

#4 2014-12-25 18:59:48

Hiro
Member

Re: 重複を除くリレーション先の数のカウントは

動的値一覧と同じ結果をExecuteSQL()のDISTINCTで算出、その結果をValueCount()する、とか。

Offline

#5 2014-12-25 19:44:48

旅人
Member

Re: 重複を除くリレーション先の数のカウントは

関連テーブル側で現照合フィールドとその値を連結したフィールドを作って
関連テーブル側で照合フィールドと値の自己リレーション(関連2)を作って
逆カウント=1/Count(関連2::連結したフィールド)の計算フィールドも作れば
ポータルのあるテーブルで=Sum(関連::逆カウント)で出そう?

Offline

#6 2014-12-26 09:12:44

SQLExecuter
Guest

Re: 重複を除くリレーション先の数のカウントは

値一覧が一番シンプルで速いはず。
SQLはせっかくの新機能で設定自体はシンプルになるけど、レコード数によっては遅すぎる。
ValueCount(
ExecuteSQL("
SELECT DISTINCT field
FROM table
WHERE リレーションの条件
”;"";"")
)
実際には条件は親レコードの値を引数に使うことになるでしょう。

他に考えられるとしたら、カスタム関数(List(table::field))で数える方法かな。

#7 2014-12-26 09:29:53

旅人
Member

Re: 重複を除くリレーション先の数のカウントは

間違ってた。
ANDリレーションなので連結は要らなかった。
http://pupld.net/28/141220/p6bht559yd/index.cgi
ユニーク数.fmp12

Offline

#8 2014-12-26 21:59:41

Hiro
Member

Re: 重複を除くリレーション先の数のカウントは

どう云う訳で一押しの値一覧を使いたくないのか分かりませんが、
ExecuteSQL案の他に、もう2案。


●計算式だけで求める案。(ただし、標準関数による再帰式なので、リストの最大行数は260行以下であること)

Let([
   $lst=List(ポータルテーブル::フィールド);
   $vl="";
   $fnc="Case(
     IsEmpty($lst); $vl;
     Let([
       $itm=GetValue($lst;1);
       $vl=List($vl;Case(IsEmpty(FilterValues($vl;$itm));$itm));
       $lst=MiddleValues($lst;2;ValueCount($lst))
     ]; Evaluate($fnc))
   )"
];
   ValueCount(Evaluate($fnc))
)


●「関連レコードへ移動」+「フィールド内容の全置換」スクリプトで求める案。
  ・ポータルテーブルにカウント結果を書き込むグローバルフィールドを追加する。
  ・「関連レコードへ移動[のみ表示]」で、関連のレコードだけを抽出しておく。
  ・「フィールド内容の全置換[グローバルフィールド; 下式]」で、グローバルフィールドを計算値で全置換して算出。

Let(
  [$vl=List($vl;Case(IsEmpty(FilterValues($vl;ポータルテーブル::フィールド));ポータルテーブル::フィールド))];
  Case(Get(対象レコード数)=Get(レコード番号); ValueCount($vl))
)

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 534.88 KiB (Peak: 539.79 KiB) ]