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

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

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

You are not logged in.

Announcement

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


#1 2023-05-16 20:29:10

sato9870
Guest

1つのテーブル内でリレーションをかけて1対多の関係になる項目を任意の文字区切りで1つのカラムに連結すて出力する方法

こんにちは。sato9870と申します。
タイトルが分かりづらかったら大変すみません。
実現したい事は以下の通りです。


テーブルAに
--------------------------
ID  名称 部署ID タイプ
001 人名1 007   人
002 人名2 007   人
003 人名3 007   人
004 人名4 008   人
005 人名5 008   人
006 人名6 008   人
007 部署1 007   部署
008 部署2 008   部署
--------------------------
のようなデータがあるのですが、このテーブルに新規カラム「部署メンバー」を追加して
ID  名称 部署メンバー
007 部署1 001|002|003|
008 部署2 004|005|006|
のような形式でcsvに出力するにはどうしたら良いかご教示頂けないでしょうか?

IDと部署IDをリレーションさせれば
部署のレコードと人名が1対多で紐付くのは分かるのですが、
それを上記の形式で表示させる方法が分からず困っております。

また、DBは業務用として本番運用中な為、
データの持ち方を変更するのは難しいです。
出来るとしたら、部署データだけ別テーブルに移動させる事くらいでしょうか・・・。


環境はWindows10Pro、FilemakerPro11Advancedです。
説明が不足しておりましたら追記させて頂きます。


すみませんが、よろしくお願いいたします。

#2 2023-05-16 20:33:17

sato9870
Guest

Re: 1つのテーブル内でリレーションをかけて1対多の関係になる項目を任意の文字区切りで1つのカラムに連結すて出力する方法

(追記)
・1つの部署に紐付く人数は、一定ではなく部署によって異なります。

#3 2023-05-16 20:55:57

Shin
Member

Re: 1つのテーブル内でリレーションをかけて1対多の関係になる項目を任意の文字区切りで1つのカラムに連結すて出力する方法

部署IDで自己リレーション、
Let (
[
   lst = List ( リレーション::ID ) ;
   lst = FilterValues ( lst ; Substitute ( ¶ & lst & ¶ ; ¶ & ID & ¶ ; “¶//” & ID & ¶ ) )
] ;
   Substitute ( lst ; ¶ ; “|” )
)
または、
Substitute (
   Char(2) & List ( リレーション::ID ) & ¶ ;
   [ ¶ ; Char(1) & Char(2) ];
   [ Char(2) & ID & Char(1) ; “” ];
   [ Char(1) & Char(2) ; “|” ];
   [ Char(1) ; “” ];
   [ Char(2) ; “” ]
)
の計算フィールドを作り、書き出せばいいでしょう。

Last edited by Shin (2023-05-17 10:43:41)

Offline

#4 2023-05-17 09:07:52

sato9870
Guest

Re: 1つのテーブル内でリレーションをかけて1対多の関係になる項目を任意の文字区切りで1つのカラムに連結すて出力する方法

Shin様
ご教示ありがとうございます。
頂いた2種類の方法を試させて頂いた所
それぞれ下記のエラーが表示されてしまいました。

■方法1
部署IDで自己リレーション、
Let (
[
   lst = List ( リレーション::部署ID ) ;
   lst = FilterValues ( lst ; Substitute ( ¶ & lst & ¶ ; ¶  &  部署ID @ ¶ ; “¶//” & 部署ID & ¶ ) )
] ;
   Substitute ( lst ; ¶ ; “|” )
)

【実行結果】
→4行目の「部署ID @ 」に対して「指定されたフィールドが見つかりません」と表示される。
「@」を削除すれば式自体は正しいと認識されるが、思った通りの計算結果が得られない(空欄になる)

■方法その2
Substitute (
   Char(2) & List ( リレーション::部署ID ) & Char(1) ;
   [.¶ ; Char(1) & Char(2) ];
   [ Char(2) & 部署ID & Char(1) ; “” ];
   [ Char(1) & Char(2) ; “|” ];
   [ Char(1) ; “” ];
   [ Char(2) ; “” ]
)

【実行結果】
→3行目の「.¶」に対して「この式は、計算出来ませんでした」と表示される。
「.」を削除すれば式自体は正しいと認識されるが、思った通りの計算結果が得られない(空欄になる)

-
方法1の「@」と方法2の「.」の意味と解決方法を教えて頂けないでしょうか。
度々すみませんが、よろしくお願いいたします。

#5 2023-05-17 09:22:38

チポ
Member

Re: 1つのテーブル内でリレーションをかけて1対多の関係になる項目を任意の文字区切りで1つのカラムに連結すて出力する方法

自己リレーション
ID = 部署ID
and
タイプ ≠ タイプ

計算フィールド
Substitute ( List (リレーション ::ID) ; ¶ ; “|” )
これで部署のレコードだけに目的の一覧が表示されます。


そもそも
人と部署を同じテーブルにするから面倒なのでは。。

FMにカラムはないですよフィールドですね。

Offline

#6 2023-05-17 10:38:00

sato9870
Guest

Re: 1つのテーブル内でリレーションをかけて1対多の関係になる項目を任意の文字区切りで1つのカラムに連結すて出力する方法

チポ様
ありがとうございます!おかげさまで無事解決いたしました!
×カラム→〇フィールドについてもありがとうございます。助かりました。

また、追加のご質問となり恐縮なのですが、
下記にフィールド「無効」を追加して
同フィールドが「1」のレコードを除外する方法はあるのでしょうか?

例.
テーブルA
--------------------------
ID  名称 部署ID タイプ 無効
001 人名1 005   人     
002 人名2 005   人
003 人名3 005   人   1
004 人名3 005   人   1
005 部署1 005   部署

の場合、005のレコードの計算式の結果が
001|002|003|004
ではなく
001|002     
になるようにしたい、という次第で御座います。

ポータルで表示させる場合であれば「ポータルのレコードのフィルタ」などで絞り込みを掛けられますが
頂いた計算式を修正する事でこのような絞り込みをする事は出来るのでしょうか?

何度もすみませんがご教示を頂けますと幸いです。
よろしくお願いいたいます。

#7 2023-05-17 10:52:36

Shin
Member

Re: 1つのテーブル内でリレーションをかけて1対多の関係になる項目を任意の文字区切りで1つのカラムに連結すて出力する方法

タイプミスを修正し待した。
無効フィールドを作るより、有効を作った方が設定は簡単です。

Offline

#8 2023-05-17 10:58:22

himadanee
Guest

Re: 1つのテーブル内でリレーションをかけて1対多の関係になる項目を任意の文字区切りで1つのカラムに連結すて出力する方法

「有効名称」とかの計算フィールド
Case ( 無効 <> 1 ; 名称 )
を作って、それを連結すればいいのでは。

「有効ID」の方がリレーション時点で除外されるから、ベターかな。
その計算式で部署も無効扱いすれば、リレーションが簡単になりますね。

#9 2023-05-17 11:01:41

チポ
Member

Re: 1つのテーブル内でリレーションをかけて1対多の関係になる項目を任意の文字区切りで1つのカラムに連結すて出力する方法

グローバルフィールドを作り、1を入力

リレーションの照合に

and
グローバル ≠ 無効
を追加

これで無効が1は照合されません。

Offline

#10 2023-05-17 11:43:20

sato9870
Guest

Re: 1つのテーブル内でリレーションをかけて1対多の関係になる項目を任意の文字区切りで1つのカラムに連結すて出力する方法

Shin様、himadanee様、チポ様

おかげさまで、教えて頂いた方法で無事解決いたしました!
同じ問題に対しても色々な解決方法があるのだと大変参考になりました。
ありがとうございました!

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.015 seconds, 7 queries executed - Memory usage: 527.31 KiB (Peak: 547.85 KiB) ]