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

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

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

You are not logged in.

Announcement

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


#1 2021-04-04 15:26:25

Koto
Member

複数レコードのデータから照合し分類したいです

週末に考えおりましたが解決できなかったのでご相談させてください。

FMP18

テーブルAの商品名フィールドに
青リンゴ、夏みかん、二十世紀梨、、、 などがあります。

同じくテーブルAに
分類CD、分類名をスクリプトを用いてグループ分けをしたいと考えております。

試みたのが
テーブルBを作成し、キーワード、分類CD、分類名フィールドを作成。
(テーブルAにもキーワードと名前をつけたグローバルフィールドを作成しテーブルA・Bのキーワードフィールドでリレーションをしました)
値一覧でテーブルBのキーワードを作成。

PatternCount ( テーブルA::商品名 ;  "リンゴ" )であればデータビューアで「1」が返りますが、
PatternCount ( テーブルA::商品名 ; ValueListItems ( Get ( ファイル名 ) ; "キーワード" ))
※テーブルBキーワードフィールドにはりんご、リンゴがあります。

計算式をどのように見直せば良いでしょうか。
アドバイスを頂けると幸いです。
どうぞよろしくお願いいたします。

Offline

#2 2021-04-04 19:13:14

Shin
Member

Re: 複数レコードのデータから照合し分類したいです

ValueCount ( FilterValues ( テーブルA::商品名 ; ValueListItems ( Get ( ファイル名 ) ; "キーワード" ) ) )
を使ってみれば、似たような結果になります。

Offline

#3 2021-04-04 21:42:09

Koto
Member

Re: 複数レコードのデータから照合し分類したいです

Shin様
お返事ありがとうございます。

スマホでご回答頂いていたのを楽しみしてようやくPCの前に来ました。
おっしゃる通りの計算式をデータビューアで確認しましたが結果が0でした。

何がダメなのでしょうか。。。

Offline

#4 2021-04-05 06:54:21

himadanee
Guest

Re: 複数レコードのデータから照合し分類したいです

PatternCount ( テーブルA::商品名 ; ValueListItems ( Get ( ファイル名 ) ; "キーワード" ))

これでは商品名から「全値のリスト」を探すので何も一致しません。引数が逆です。

FilterValuesは値の完全一致を探すことになり、「青りんご」はキーワードリスト内の「りんご」とは一致しません。

#5 2021-04-05 08:53:37

チポ
Member

Re: 複数レコードのデータから照合し分類したいです

商品名と部分一致するキーワードを探す
でしょう?

PatternCountの引数を逆にしてもダメですよ。
検索テキストを
「キーワード」のリストから一つずつ抜いて、
それで判定して行かないとダメでしょう。

例えば、キーワードに
  青
  リンゴ
が有った場合、
  青リンゴ
はどちらにも含まれちゃいますが、これは考えなくてもいい?

Offline

#6 2021-04-05 08:54:46

Shin
Member

Re: 複数レコードのデータから照合し分類したいです

アァ部分一致でしたか。loop 回さないとできないかな。
カスタム関数の再帰について
の式で、商品名フィールドを分解しておけばいいでしょう。

Last edited by Shin (2021-04-05 08:59:22)

Offline

#7 2021-04-05 16:00:24

Hiro
Member

Re: 複数レコードのデータから照合し分類したいです

「商品名」文字列内の予約キーワード部分だけを抽出する(青りんご→りんご、青さば→諸口)ものとして、

その場合の計算式は、ループ再帰式で、(※候補一覧にない場合は、空白でなく「諸口」を返す仕様の式)
(※なお、「キーワード値一覧」は「カスタム値」値一覧にすれば、別途テーブルBはあえて不要!!)

Let(
[
      $txt=テーブルA::商品名;
      $keys= ValueListItems(Get(ファイル名);"キーワード値一覧"));
      $i=0;
      $res="諸口";
   $LOOP=
      "Case(
            $res<>""諸口"" or $i=ValueCount($keys)
            ; $res
            ; Let([
                     $i=$i+1;
                     #itm=GetValue($keys; $i);
                     $res=Case(PatternCount($txt; #itm); #itm; $res)
                  ]; Evaluate($LOOP))
         )"
];     
   Evaluate($LOOP)
)

Last edited by Hiro (2021-04-05 17:51:40)

Offline

#8 2021-04-05 16:20:03

Shin
Member

Re: 複数レコードのデータから照合し分類したいです

Let(
[
	$txt	= テーブルA::商品名 ;
	$len	= Length ( $txt ) ;
	$row	= ( $len ^ 2 + $len ) / 2 ;
	$i 	= 0 ;
	$res	= "" ;


	$eva =
		"Case (
			$i = $row ; $res ;
			Let(
			[
				$i = $i + 1 ;
				$l = Int ( Sqrt ( 2 * $i - 1.75 ) + .5 ) ;
				$p = ( $l ^ 2 + $l ) / 2 - $i + 1 ;
				$res = List ( $res ; Middle ( $txt ; $p ; $len + 1 - $l ) ) 
			] ; 
				Evaluate ( $eva )
			)
		)"
] ;
	ValueCount ( FilterValues ( Evaluate ( $eva ) ; ValueListItems ( Get ( ファイル名 ) ; "キーワード" ) ) )
)

でいいかも。FM18 ですので、Whie 使った方が簡便でしょう。

Offline

#9 2021-04-05 18:16:47

Shin
Member

Re: 複数レコードのデータから照合し分類したいです

ちょっと思ったんですが、商品名から、分類を取得するマスターを作るべきなのでは。
上の、青リンゴ、夏みかん、二十世紀梨 だと、ラ・フランスが入るとどうしようもないでしょう。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 522.54 KiB (Peak: 527.45 KiB) ]