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

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

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

You are not logged in.

Announcement

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


#1 2017-11-06 21:13:30

salon_hiyake
Member

同一の箱の中に、異なる種類のお菓子が混在している箱No

いくつかの箱があり、箱の中にお菓子が入っているとします。
【例】
箱No.1 → 3個のアメ
箱No.2 → 2個のアメと1個のチョコ
箱No.3 → 2個のチョコ
箱No.4 → 2個のアメと2個のチョコ
……………………………

フィールドとしては、
箱ID   内容
1     アメ
1     アメ
1     アメ

2     アメ
2     アメ
2     チョコ
……………………
(以下、省略)


このような場合において、「同一の箱の中に、異なる種類のお菓子が混在している箱No.」をダブりなしで取得するにはどうしたらいいでしょうか?

同一の箱、を「箱ID=箱ID」の自己リレーションで定義し、さらに、AND条件で、「内容が異なる」を「内容≠内容」としてリレーションしました。
この状態で、「関連レコードへ移動」スクリプトステップで、「異なる種類のお菓子が混在している箱」を絞り込むことはできるのですが、肝心の「箱No.のダブりなしのリスト」が取得できず、ハマっています。

List関数? ValueListItems関数? あたりを使うのだと思うのですが、

どなたかお知恵を拝借できないでしょうか?

よろしくお願いします。


FMP15 Advanced
なので、UniqueValues, SortValuesは使えない環境です。

Offline

#2 2017-11-06 22:58:56

Shin
Member

Re: 同一の箱の中に、異なる種類のお菓子が混在している箱No

箱ID で自己リレーションを張り、関連レコードでの値一覧を作ります。それを ValueListOtems() で取り出し、ValueCount() します。目的の箱は2以上になります。
別に、全体にシリアル番号を打っておきます。自己リレーションを通して、シリアル番号の比較をして、同一ならば1を持たせておきます。
この2個で抽出すれば良いでしょうね。
https://www.dropbox.com/s/a4gao7w3x3ild … 7.zip?dl=0

または、1箱1レコードのテーブルを別に作っておきます。内容とは箱番号でリレーションしておきます。≠ でのリレーションで関連レコードへ移動し、さらに箱テーブルへ関連レコードへ移動しても良いでしょう。これなら、4ステップのスクリプトのみです。(上のサンプルに組み込んであります)

Last edited by Shin (2017-11-09 15:23:48)

Offline

#3 2017-11-07 01:47:56

Hiro
Member

Re: 同一の箱の中に、異なる種類のお菓子が混在している箱No

動的値一覧で自己レコードの箱内混在を判定して、
その全レコード上の判定結果「箱ID」を「全置換」機能で一覧集計し,
集計結果をグローバルフィールドに書き出します。

・自己リレーション「テーブル  2」を張り、
   「箱ID」 = 「::箱ID」
   AND
   「内容」 ≠ 「::内容」
・その「テーブル  2::」の「箱ID」で、動的値一覧「混在箱ID」を作る。
・目的の「箱No.のダブりなしのリスト」を格納する、グローバルフィールドを作り、
・これに下記計算値の「フィールド内容の全置換」して、目的の「箱No.のダブりなしのリスト」を得ます。

      Let([
         #vli=ValueListItems(Get(ファイル名);"混在箱ID");
         $res=List($res; Case(FilterValues($res;#vli)="";#vli))
      ];
         Case(Get(レコード番号)=Get(対象レコード数); $res)
      )

Offline

#4 2017-11-08 23:12:20

salon_hiyake
Member

Re: 同一の箱の中に、異なる種類のお菓子が混在している箱No

Shinさん、Hiroさん、いつも親切な回答をありがとうございます。
おかげで何とかなりそうです。
ありがとうございました。

Offline

#5 2017-11-09 00:44:40

Hiro
Member

Re: 同一の箱の中に、異なる種類のお菓子が混在している箱No

【#3回答の訂正願い】

>#3
動的値一覧で自己レコードの箱内混在を判定して、
その全レコード上の判定結果「箱ID」を「全置換」機能で一覧集計し,
集計結果をグローバルフィールドに書き出します。

・自己リレーション「テーブル  2」を張り、
   「箱ID」 = 「::箱ID」
   AND
   「内容」 ≠ 「::内容」
・その「テーブル  2::」の「箱ID」で、動的値一覧「混在箱ID」を作る。
・目的の「箱No.のダブりなしのリスト」を格納する、グローバルフィールドを作り、
・これに下記計算値の「フィールド内容の全置換」して、目的の「箱No.のダブりなしのリスト」を得ます。

      Let([
         #vli=ValueListItems(Get(ファイル名);"混在箱ID");
         $res=List($res; Case(FilterValues($res;#vli)="";#vli))
      ];
         Case(Get(レコード番号)=Get(対象レコード数); $res)
      )

わざわざ、動的値一覧なんて介さなくても、全置換の計算式内で単純摘出できましたネ。
そもそもの#1質問内のValueListItemsに引かれて、初見を見誤ってしまったようです。
以下に訂正お願いします。

・自己リレーション「テーブル  2」を張る。
      「箱ID」 = 「::箱ID」
      AND
      「内容」 ≠ 「::内容」
・その「テーブル  2::」の「箱ID」で、動的値一覧「混在箱ID」を作る。
・目的の「箱No.のダブりなしのリスト」を格納する、グローバルフィールドを作る。
・これに下記計算値で「フィールド内容の全置換」を実行して、目的の一覧リストを得ます。

      Let([
         #vli=Choose(IsEmpty(テーブル  2::内容); テーブル::箱ID);
         $res=List($res; Case(FilterValues($res;#vli)="";#vli))
      ];
         Case(Get(レコード番号)=Get(対象レコード数); $res)
      )

Last edited by Hiro (2017-11-09 00:48:12)

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: 516.98 KiB (Peak: 521.89 KiB) ]