みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
みなさんこんにちは
当方は、Win10、Pro16の環境です。
タイトルのとおりフィルタリングの計算式で教えて頂きたいです。
フィルタをかける際、3つのグローバルフィールド、g_A、g_B、g_C、の値を基に全ての組合せの計算式を
Let関数を使って簡単にできないか悩んでいます。
3つのフィールドはnullもありえます。
Case関数でもできるのですが、ステップ数が長くなるので、どなたか教えてください。
Offline
書き忘れましたが、検証するフィールドは、フィールドA、フィールドB、フィールドCです。
Offline
簡単にしたい式の詳細が書かれていませんが何をどう簡単にしたいのですか?
評価するフィールドとグローバル格納のフィールドの関係性などまったくわからないと答えようが......
Offline
言葉足らずですません。
最初は計算式に、
Case(
g_A="" and g_B="" and g_C="";1; ←全て表示
g_A≠"" and g_B≠"" and g_C≠"";
g_A=フィールドA and g_B=フィールドB and g_C=フィールドC; ←全てに一致する内容を表示
g_A="" and g_B="" and g_C≠"";
g_A=フィールドA and g_B=フィールドB; ←g_Aとg_Bの条件に一致するものを表示
(以降パターンを繰り返す)
上記のようにいれていたのですが、Let関数のほうが全ての組合せを簡単にできるのかなと思いまして。
Offline
グローバルフィールドはフィルタリングの条件を入力するものです。
グローバルフィールドが全てnullなら、フィルタなし。
3つのグローバルフィールドに条件を入れ、nullか入力値の組合せによってフィルタリングするというものです。
Offline
条件を整理して下さい。
グローバル格納に値がある場合は、
その値が同じアルファベット(A / B / C)を持つフィールドと同じ値なら表示するということですか?
Let 関数のヘルプを読まれたほうが良いでしょう。
視認性や参照を減らす意味での簡略化および負荷とミスを減らすために役立ちます。
パターンの簡略化は Let を使っても使わなくても同じです。
https://fmhelp.filemaker.com/help/16/fm … p/let.html
Offline
> g_A="" and g_B="" and g_C≠"";
> g_A=フィールドA and g_B=フィールドB; ←g_Aとg_Bの条件に一致するものを表示
1行目の等号、不等号が逆ですよね?
とすれば
( IsEmpty ( g_A ) or g_A = フィールドA ) and
( IsEmpty ( g_B ) or g_B = フィールドB ) and
( IsEmpty ( g_C ) or g_C = フィールドC )
こういうことでは。。
Offline
Mozさん、チポさんありがとうございます。
チポさんの言うとおり、1行目の不等号は逆でした。
( IsEmpty ( g_A ) or g_A = フィールドA ) and
( IsEmpty ( g_B ) or g_B = フィールドB ) and
( IsEmpty ( g_C ) or g_C = フィールドC )
この式だけでいけますか?
Offline
こんなに簡略化できるんですね( ꒪⌓꒪)
条件を文章化すると分かりやすいですよ。
チポさんの式を使ってサンプルにしたので試してみて下さい。
https://www.dropbox.com/s/ujuqtn5vw1xof … fmp12?dl=0
Offline
Mozさん、チポさんありがとうございます。
ちょっと感動しました。
こんなに簡単にできるとは!
これならいくつ増えても楽勝ですね。
ありがとうございました。
Offline
Pages: 1
[ Generated in 0.010 seconds, 12 queries executed - Memory usage: 563.13 KiB (Peak: 568.38 KiB) ]