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

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

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

You are not logged in.

Announcement

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


#1 2021-02-23 14:54:05

きんとき
Guest

同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

使用環境:Mac OS  Filemaker ver.19

あるテーブルに複数(40個程度)のフィールドがあり、そのフィールド内容は別のフィールドの値から計算で算出(異なるフィールドは異なる計算式で)しております。
1:入力されているフィールド値が何種類あるのか?
2:そのフィールドの値
3:その値を取るフィールド名
の3種類を求めたいと考えていますがやり方が分かりません。

例えば
フィールド名 値
————————————-
フィールドA  K-1
フィールドB  L-3
フィールドC  B-2
フィールドD  B-2
フィールドE  L-3
フィールドF  M-5
となっていた場合に

B-2:フィールドC、フィールドD
K-1:フィールドA
L-3:フィールドB、フィールドE
M-5:フィールドF
という結果を得たいのです。

どうか宜しくお願いいたします。

#2 2021-02-23 21:26:51

himadanee
Guest

Re: 同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

ListOfの集計フィールドをフィールド名に作って、値でソートして集計パートだけにすれば、そうなります。改行区切りなので、「、」に置換。

実際には「例えば」の形のデータをまず作る必要がありますね。最初のテーブル構造が悪いです。

#3 2021-02-24 08:45:30

Shin
Member

Re: 同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

異なるフィールドは異なる計算式 なので、仕方ないのでは。

While (
[
	fld = List ( "フィールドA" ; "フィールドB" ; "フィールドC" ; "フィールドD" ; "フィールドE" ; "フィールドF" ) ;
	val = Evaluate ( "List ( " & Substitute ( fld ; ¶ ; ";" )  & ")" ) ;
	res = SortValues ( UniqueValues ( val ) ) ;
	cnt = ValueCount ( val )
] ;
	cnt ;
[
	tar = GetValue ( val ; cnt ) ;
	res = Replace ( res ; Position ( res ; tar ; 1 ; 1 ) + Length ( tar ) ; 0 ; " " & GetValue ( fld ; cnt ) ) ;
	cnt = cnt - 1
] ;
	res
)

Offline

#4 2021-02-24 15:30:46

uchiまか
Guest

Re: 同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

●参照用レイアウトからフィールド名の一覧を取得

●フィールドの名称と値を逆転させて、JSONを作成(値をキーにしてフィールド名が集められる)

●Loop処理とGetValueを用いて値とフィールド名を集計

●フィールド設定を用いて結果を入力

【JSON】
{
    "B-2" :
    {
        "フィールドC" : 3,
        "フィールドD" : 4
    },
    "K-1" :
    {
        "フィールドA" : 1
    },
    "L-3" :
    {
        "フィールドB" : 2,
        "フィールドE" : 5
    },
    "M-5" :
    {
        "フィールドF" : 6
    }
}

【結果】
B-2:フィールドC、フィールドD
K-1:フィールドA
L-3:フィールドB、フィールドE
M-5:フィールドF

#5 2021-02-24 15:33:46

uchiまか
Guest

Re: 同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

【処理01.】レイアウトの作成
1.対象のフィールドのみ(40個程度)を配置した、レイアウトメニューに表示しないレイアウトを作成
───────────────────────────────────

【処理02.】変数を設定
1.FieldNames関数を用いて、フィールドの一覧を作成
2.ValueCount関数を用いてフィールド数を求める
3.Loop処理のカウンターの初期値を定義
───────────────────────────────────

【処理03.】Loop処理(フィールド1~40個程度のLoop処理)
Loop
──── 【ロジック(変数を設定)】─────
EXit Loop If[$処理 = $フィールド数]
変数を設定:$処理 = $処理 + 1
End Loop

1.GetValue関数を用いて、フィールドの一覧の$処理番目を取得
2.GetField関数を用いて、$処理番目のフィールドのを取得
3.変数$JSONDataにフィールド名と値を逆転させたキーのJSONを作成
  JSONの値はLoop処理の変数、$処理を設定

  "B-2" :
  {
    "フィールドC" : 3,
    "フィールドD" : 4
  },
───────────────────────────────────

【処理04.】変数を設定
1.JSONListKeys関数を用いて、値の一覧を取得

  B-2
  K-1
  L-3
  M-5

2.JSONListValues関数を用いて、JSONの値一覧を取得

  {"フィールドC":3,"フィールドD":4}
  {"フィールドA":1}
  {"フィールドB":2,"フィールドE":5}
  {"フィールドF":6}

3.ValueCount関数を用いてJSONの数を求める
4.Loop処理のカウンターの初期値を定義

───────────────────────────────────

【処理05.】Loop処理(JSON1~n個のLoop処理)
Loop
──── 【ロジック(変数を設定)】─────
EXit Loop If[$フィールド集計処理 = $値の一覧数]
変数を設定:$フィールド集計処理 = $フィールド集計処理 + 1
End Loop

1.GetValue関数を用いて、JSON一覧の$処理番目を取得
2.GetValue関数を用いて、処理04で定義した、値の一覧の$処理番目を取得
3.JSONListKeys関数を用いて、フィールド名の一覧を取得

フィールドC
フィールドD

4.値2.と値3.の改行を、に置き換た値を連結させる

B-2:フィールドC、フィールドD

5.List関数を用いて、値4.を変数$集計データに加算する

【処理06.】
1.フィールド設定に処理05.5の値を指定

B-2:フィールドC、フィールドD
K-1:フィールドA
L-3:フィールドB、フィールドE
M-5:フィールドF

#6 2021-02-24 15:35:00

uchiまか
Guest

Re: 同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

【処理01.】40個程度のフィールドのみを配置した専用レイアウトを作成し、レイアウト名を書き留める

───────────────────────────────────
【処理02.】変数を設定
Let ([
$Getフィールド名の一覧 = FieldNames ( "" ; "フィールド名の取得" ) ;
$フィールド数 = ValueCount ( $Getフィールド名の一覧 ) ;
$処理 = 1
];"")

───────────────────────────────────
【処理03.】Loop処理
Loop

変数を設定
Let ([
  $Getフィールド名 = GetValue ( $Getフィールド名の一覧 ; $処理 ) ;
  $FieldData = GetField ( $Getフィールド名 ) ;
  $JSONData = JSONSetElement ( $JSONData ; $FieldData & "." & $Getフィールド名 ; $処理 ; JSONNumber )
];"")

EXit Loop If[$処理 = $フィールド数]
変数を設定:$処理 = $処理 + 1
End Loop

───────────────────────────────────
【処理04.】変数を設定
Let ([
$Get値の一覧 = JSONListKeys ( $JSONData ; "" ) ;
$Getフィールドの一覧 = JSONListValues ( $JSONData ; "" ) ;
$値の一覧数 = ValueCount ( $Get値の一覧 ) ;
$フィールド集計処理 = 1 ;
$CountJSON = ValueCount ( $GetJSONListValues ) ;
$JSON処理 = 1
];"")

───────────────────────────────────
【処理05.】Loop処理
Loop

変数を設定
Let ([
  $GetJSONData = GetValue ( $Getフィールドの一覧 ; $フィールド集計処理 ) ;
  $Get値 = GetValue ( $Get値の一覧 ; $フィールド集計処理 ) ;
  $Getフィールド名 = JSONListKeys ( $GetJSONData ; "" ) ;
  $集計情報 = $Get値 & ":" & Substitute ( $Getフィールド名 ; "¶" ; "、" ) ;
  $集計データ = List ( $集計データ ; $集計情報 )
];"")

EXit Loop If[$フィールド集計処理 = $値の一覧数]
変数を設定:$フィールド集計処理 = $フィールド集計処理 + 1
End Loop

#7 2021-02-25 15:13:14

きんとき
Guest

Re: 同じ値が入力されている複数フィールドのフィールド名とフィールド内容の取得

>himadaneeさん、
実際にはフィールド名は各臨床検査での検査名で、それぞれ基準値が別々に設定されており、検査結果の値だけでなく合併症の有無などと他の要因との兼ね合いでも判定が変わるため計算で結果値を判定する必要があり、ご指摘のテーブル構造をとることが困難でした。ご返信ありがとうございます。

>Shinさん、
書いていただいた計算式で求める結果が得られました。ありがとうございます。現在のところcase文で条件を場合分けをする段階で止まっている初心者なもので、書いていただいた計算式の構造を理解するのに時間がかかりました。変数を使用した計算式、スクリプトを書けるようにならないと難しいですね。ご返信ありがとうございます。

>uchiまかさん、
非常に丁寧に初心者にも分かりやすい説明を書いていただいてありがとうございます。変数を利用した処理はまだ未知の領域ですので、助かりました。また処理の解説のおかげで他への応用にも繋げやすいです。ご返信ありがとうございます。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 540 KiB (Peak: 560.54 KiB) ]