みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いくつかの箱があり、箱の中にお菓子が入っているとします。
【例】
箱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
箱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
動的値一覧で自己レコードの箱内混在を判定して、
その全レコード上の判定結果「箱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
Shinさん、Hiroさん、いつも親切な回答をありがとうございます。
おかげで何とかなりそうです。
ありがとうございました。
Offline
【#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
Pages: 1
[ Generated in 0.019 seconds, 7 queries executed - Memory usage: 517.98 KiB (Peak: 522.89 KiB) ]