みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
皆様、いつもお世話になります。
すこし分かりづらいタイトルですが、以下したい内容を記載致します。
---前提---
過去に売上げた商品データがエクセルでございます。
過去に売り上げたデータなので、
商品A
商品B
商品A
商品B
というように、同一商品名がたくさん列に入力されています。
また商品点数自体は、千に近い数がございます。
それらが過去履歴として、何万レコードもあるような状態です。
商品ID等の個別の判定が出来る状態にないです。
判定できるものは商品名のみになります。
但し、エクセルに入力されている商品名は、カタカナや小文字等があるが、
人によって微妙な入力ミスとは等は発生しておりません。
(例:アイパッドといれたり、アイパットといれたりはないです。)
---悩んでること---
今回は、売り上げデータをシステムにインポートしたいのではなく、
商品をマスタ化したいと思っています。
そこで、どのように行えば、FM側で旨く整形して出来るでしょうか?
・重複商品は一つに統一 が大きなポイント。
---考えたこと---
エクセル側でする方法もあるかと思いますが、FM側で一度
エクセルデータをインポートテーブルをつくり、全データをインポートしました。
したはいいが、検索でどうすれば絞ってさらにマスタ化すれば良いのか?・・・と悩み行き詰っています。
はじめ自己リレーションですればいいのかな?と思ったのですが、
うまく考えがまとまりません。
以上、アドバイス頂けますと幸いです。
FM側の商品名フィールドに「入力値の制限」で「ユニークな値+常時制限」のオプション設定をして、インポートするだけでOKです。
Offline
基本的にはHiroさんの方法で対応できると思います。
もしすでにインポートしているデータを使う必要があるなら、
自己リレーションを使った重複レコードの削除を。
方法は色々ありますが、よく使う方法を。
まず商品名の"="による自己リレーションを行います。
後は以下のようなスクリプトで、重複しているレコードの削除を行います。
Loop
If( Count(重複判定用TO::foo) > 1 )
レコード削除
End If
次のレコード(最後まで来たら終了)
End Loop
自己リレーションによって、"Count(重複判定TO::foo) > 1" は、
カレントレコードも含めた商品名の重複するレコード数を返します。
これが2以上の場合にカレントレコードを削除すれば、
最終的に、自身としか重複しないレコードのみが残ります。
インポートではなくスクリプト重複処理するメリットは、
削除前に値を統合したり、何かしら他の処理を伴う場合です。
マスタ用のデータ整理程度であれば、インポートで充分だと思います。
レコードを削除したら自動で次のレコードに移動するので
その移動したレコードのCountが>1の場合も飛び越えてしまいそう。
Offline
Loop
If( Count(重複判定用TO::foo) > 1 )
レコード削除
else
次のレコード(最後まで来たら終了)
End If
End Loop
としたらいいかも
ただ、最終レコードの処理が別に必要。
Offline
Excelで集計とかできるくらいの方でしたら、
Excelでやった方が早いですよ
無理に難しくしないで、hiroさんのでいいでしょ。
リレーションは索引によって違う文字も同一にみなされたり、
無視されたりする。
Hiro様、ありがとうございます。こんなに簡単に出来るなんて・・・まだまだ勉強不足を痛感いたしました。ありがとうございます。
honda様、旅人様、Shin様、スクリプトおよびアドバイスありがとうございます。問題なく実行できました。
ムムム様、エクセルで出来たら良いんですけど、調べるのに時間が掛かりそう&FM側前提として今回は考えました。
かず様、仰る通りですね。ただ、考え方の勉強になりました。ありがとうございます。
Pages: 1
[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 562.41 KiB (Peak: 582.32 KiB) ]