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

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

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

You are not logged in.

Announcement

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


#1 2016-03-11 19:36:07

ジャック
Guest

エクセルファイルをインポートする際に、重複データを一つを残して削除したい

Filemaker pro 13 を使用しています。

フィールドA    フィールドB
問い合わせNo    お客様コード    更新日        その他情報
AA123456      f1111111        2015/10/01    ********
AA143567      f222222        2015/12/13    ********
AA453565      f333333        2015/02/03    ********
AA556675      f444444        2015/03/02    ********
AA456467      f333333         2015/02/23    ********
AA345344      f1111111     2016/01/06    ********
AA246545      f1111111     2015/02/14    ********

といったエクセルファイルをインポートさせたいと考えています。

このようなデータが毎週届きまして、毎週問い合わせNoを照合フィールドとしてインポートして更新しています。
・問い合わせNoは一意
・お客様コードは各お客様固有のものなので、同じお客様からの問い合わせが複数回あるとお客様コードは重複する場合がある
という状況です。

インポートの際には
「対象内レコード内で一致するレコードを更新」
「一致しないデータを新規レコードとして追加する」
にチェックを入れています。

上記のようなエクセルファイルをインポートすると、お客様コードは当然重複してインポートされます。

そこで、インポートの際に、
・お客様コードが同一で、
・更新日が古いもの(最新ではないもの全て)
を削除したいと考えています。
どのようにスクリプトを書いたらよいでしょうか。

お手数おかけいたしますが何卒宜しくお願い致します。

#2 2016-03-11 22:42:58

Shin
Member

Re: エクセルファイルをインポートする際に、重複データを一つを残して削除したい

インポートの際に、問い合わせNoを照合フィールドに指定していますか。
設定が正しければ、そのインポートで意図とする動作になるはずですが。
ただし、1回のインポートで同一の問い合わせNoのレコードがあると、意図通りにならないかもしれませんが。

Offline

#3 2016-03-14 02:47:24

ジャック
Guest

Re: エクセルファイルをインポートする際に、重複データを一つを残して削除したい

Shin wrote:

インポートの際に、問い合わせNoを照合フィールドに指定していますか。
設定が正しければ、そのインポートで意図とする動作になるはずですが。
ただし、1回のインポートで同一の問い合わせNoのレコードがあると、意図通りにならないかもしれませんが。

shin様
ご返信ありがとうございます。
ご連絡遅くなって申し訳ありません。

問い合せNoを照合フィールドへの指定は行っております。
また、お客様コードを照合フィールドとしてインポートすることも試しました。

問い合わせNo    お客様コード    更新日        その他情報
AA123456      f1111111        2015/10/01    ********
AA345344      f1111111     2016/01/06    ********
AA246545      f1111111     2015/02/14    ********

上記のEXCELをインポートした場合、
AA246545      f1111111     2015/02/14    ********
だけが残って欲しいのですが、
お客様コードを照合フィールドとした場合でも、同じEXCEL内にある場合は3つ全てインポートしてしまいます。

スクリプトで、
インポート→スクリプトで更新日を降順に並び替え→お客様コードが重複する二個目以降のものを削除
のようなものを組めないかとも考えたのですが、
「お客様コードが重複する二個目以降のものを削除」がうまくスクリプト作れませんでした。

EXCELファイルの段階で重複を削除すれば良いのですが、
業務の簡略化のために可能であればFileMaker内で実装できないかと思いまして・・・。

#4 2016-03-14 06:55:12

ぽんかん
Guest

Re: エクセルファイルをインポートする際に、重複データを一つを残して削除したい

コードを重複禁止に制限しておけば重複しません。日付を最新にするには、降順ソートしてからインポートする必要がある。

#5 2016-03-14 06:56:56

ぽんかん
Guest

Re: エクセルファイルをインポートする際に、重複データを一つを残して削除したい

既存のレコードの日付を最新にするには、逆に昇順ソートでないとうまくいかないんで、削除しないでFM内に全レコードを保持したほうがいいのでは。

#6 2016-03-14 11:51:35

チポ
Member

Re: エクセルファイルをインポートする際に、重複データを一つを残して削除したい

照合でインポートとしても、
照合するのは既存の対象レコードとで、
インポートしたレコードとは照合しません。

ですから
インポートのソースの重複は解消されないでインポートされてしまいますね。

フィールド定義の入力値の制限で
常時・ユニーク
とすると、重複は解消されますが、
重複のレコードには上書きされません。


ぽんかんさんが言われる様に、すべてインポートして、
表示は、お客様コードがユニークなお客様マスタのようなテーブルで、
リレーションで最新日付のみを表示したらいかがでしょう。

Offline

#7 2016-03-16 20:29:08

ジャック
Guest

Re: エクセルファイルをインポートする際に、重複データを一つを残して削除したい

ぽんかん様
チポ様

ありがとうございます。
>>照合でインポートとしても、
>>照合するのは既存の対象レコードとで、
>>インポートしたレコードとは照合しません。
やはりそういうことですね・・・。

ご提案頂いておりました、自己リレーションにて解決出来るかと思いまして、色々試してみたのですが上手くいきません・・・。

問い合わせNo    お客様コード    更新日        その他情報
AA123456      f1111111        2015/10/01    ********
AA345344      f1111111     2016/01/06    ********
AA246545      f1111111     2015/02/14    ********
AA444444      f2222222     2000/01/01    ********

上記の状態で自己リレーションを、元のテーブルをA・自己リレーションのテーブルをBとして

A:お客様コード = B:お客様コード
A:更新日 ≦ B:更新日

とすると、Bにて表示されるレコードは
AA123456      f1111111        2015/10/01    ********
非表示
非表示
AA444444      f2222222     2000/01/01    ********

A:お客様コード = B:お客様コード
A:更新日 > B:更新日
とすると、Bにて表示されるレコードは
非表示
AA345344      f1111111     2016/01/06    ********
AA246545      f1111111     2015/02/14    ********
非表示

となってしまって思った挙動が実現できません。

非表示
AA345344      f1111111     2016/01/06    ********
非表示
AA444444      f2222222     2000/01/01    ********

となってくれれば、そのままデータを使えますし、逆に

AA123456      f1111111        2015/10/01    ********
非表示
AA246545      f1111111     2015/02/14    ********
非表示

となってくれれば表示されたレコードを削除するスクリプトなどを組めば想定している動作をさせれるかと考えているのですが、
ハマってしまっている状態です・・・。

私の設定が誤っている気がするので、よろしければもう一度お教えいただけませんでしょうか。

自己リレーションを用いた経験が無いため、見当違いのことを行っているようでしたら申し訳ありません。

#8 2016-03-17 09:27:08

チポ
Member

Re: エクセルファイルをインポートする際に、重複データを一つを残して削除したい

自己リレーションではなく、
> お客様コードがユニークなお客様マスタのようなテーブル
このテーブルとリレーションして、このテーブルで表示するんですよ。

Offline

#9 2016-03-22 06:33:13

ジャック
Guest

Re: エクセルファイルをインポートする際に、重複データを一つを残して削除したい

チポ様

ありがとうございます。
ご返信遅くなりまして申し訳ないです。

問い合わせNo    お客様コード    更新日        その他情報
AA123456      f1111111        2015/10/01    ********
AA345344      f1111111     2016/01/06    ********
AA246545      f1111111     2015/02/14    ********
全てのデータが存在する上記のようなお客様マスタテーブル(EXCELからインポートされたマスター)があったとして、

AA345344      f1111111     2016/01/06    ********
マスタテーブルとリレーションした、上記だけが表示される別のテーブルを作成する
ということで把握しました。

上記が実現できれば目的は達成できるので、色々試しましたが上手くいきません・・・。

チポ様がおっしゃっておられる、
>>リレーションで最新日付のみを表示
が上手く実現できません。

http://www.russ.jp/stepbbs/step.cgi?mode=view&no=75111

https://fm-aid.com/bbs2/viewtopic.php?id=1077

このあたりのページを参考にさせていただいたのですが、上手く作成することができませんでした。
もしよろしければ、
・リレーションで最新日付のみを表示
の手段を詳しくお教えいただけないでしょうか。

何度もご質問して申し訳ないです。

#10 2016-03-22 09:07:24

チポ
Member

Re: エクセルファイルをインポートする際に、重複データを一つを残して削除したい

お客様テーブルと、インポートテーブルとを
お客様コードでリレーションし、
リレーションの設定で、
ソートを日付の降順に指定します。

これで、
お客様マスタテーブルのレイアウトに関連テーブルのフィールドを配置するだけです。

Offline

#11 2016-03-23 11:47:43

ジャック
Guest

Re: エクセルファイルをインポートする際に、重複データを一つを残して削除したい

チポ様

ありがとうございます、実現できました。

お客様マスタテーブルの中に設置した関連テーブルのフィールドに、
AA345344      f1111111     2016/01/06    ********
AA345344      f1111111     2016/01/06    ********
AA345344      f1111111     2016/01/06    ********
という形で表示されるようになりました。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 549.52 KiB (Peak: 570.42 KiB) ]