みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Mac FM19 スタンドアロンで起動させています。
毎日、商品の価格が変わります。それらを最長90日間保持して、
一覧画面に
各商品の本日の価格、30日前の価格、60日前の価格、90日前の価格等を表示させたいです。
また本日価格は常時表示ですが、その他前の価格は、1~90日前を選んで表示させたく存じます。
但し3項目までで考えています。15日前、60日前、75日前 とか 30日前、60日前、90日前 等々。
・前提として時間によっても価格が変わるので本日は本日分として最後の検索時の数字が上書きされる。(Webviewer自動取得で対応済)
本日例:朝3010円、昼3030円、夕方3050円・・・なら最新の検索:夕方価格3050円 が 本日の価格になります。
・明日になると、90日前検索時の価格が89日前の分に上書きされて、90日前の分に価格に置き代わる。
というロジックを作りたいのですが、
どのような構築をすれば良いでしょうか?
例:A商品の場合
本日3050円、1日前検索時2900円、2日前検索時3050円、3日前検索時3000円・・・60日前検索時2500円・・・90日前検索時3200円
現状、下記フィールドを用意してやろうとしましたが、
・毎日価格フィールド・・・Webviewerを表示させて日に2~3回程度、HPより価格を自動取得
・1か月前フィールド(例12月27日)・・・調べて手入力
・2か月前フィールド(例11月27日)・・・調べて手入力
毎日、変更作業が必要で+商品が多すぎて、断念しています。
どうぞアドバイスをお願いします。
追記ですが、
商品が200点ほどありますが、A商品は本日価格更新したけど、B商品は見ていない・・・等はございません。
毎日、朝・昼・番にスクリプトを組んで、全商品をスクリプトにてその時間の価格を自動取得をしています。
但し、土日は完全休み & 担当が休み の際もスクリプトを回さない日が稀にあります。
なんとか方法はないでしょうか?
3項目で日数は変わる(別途指定)なのだから「1か月前フィールド」ではないですね。
繰り返し3で日数を指定すればいいのでは。
繰り返し3でそれを使って価格を表示。
もう1つ日数から日付を計算するフィールドを作れば、リレーションでルックアップできます。
本日値を更新するときに日付のフィールドを再度同じ値に設定すれば再ルックアップされます。
リレーションを使わずに計算するなら繰り返し3の計算フィールドにして
ExecuteSQL("
SELECT \"価格\"
FROM \"テーブル名\"
WHERE \"日付\"=?
";"";"";日付[1]-日数指定)
あ、商品ごとにリレーション(検索)する必要がありますね。
ExecuteSQL("
SELECT \"価格\"
FROM \"テーブル名\"
WHERE \"日付\"=?
AND \"商品名\"=?
";"";"";日付[1]-日数指定;商品名)
1日1商品1レコードになってますよね?
>90日前検索時の価格が89日前の分に上書きされて、90日前の分に価格に置き代わる。
置き換わる必要はなくて、ある日の90日前の価格というのはずっと変わらないわけですが
データ構造がこちらの想像と違うのかな。90日分フィールド作ったりしてたら、毎日1つずつずらさないといけないことになって面倒です。
商品コードで自己リレーションしてポータルで表示、日付でフィルターするのが簡単なのでは。
フィルターの選択を、1-90の値一覧からチェックボックスで選択させると、任意の選択が容易です。
> 土日は完全休み & 担当が休み の際もスクリプトを回さない日が稀にあります。
サーバーのスケジュールで動かすのが簡単でしょう
Last edited by Shin (2024-01-27 22:00:13)
Offline
himadaneeさん、Shinさん、ありがとうございます。
私の説明が下手でうまく伝わってなかったようです。
>>3項目で日数は変わる(別途指定)なのだから「1か月前フィールド」ではないですね。
その通りです、現状は苦肉の策でやってますが、本来そうする必要はございません。
>>データ構造がこちらの想像と違うのかな。90日分フィールド作ったりしてたら、毎日1つずつずらさないといけないことになって面倒です。
おっしゃる通りですね。考え方が間違ってました。
実際、どうしようかと悩んでいたのはこのあたりでした。
>>サーバーのスケジュールで動かすのが簡単でしょう
サーバーを持ってないので、スタンドアロンで考えています。
---
色々とアドバイスを拝見しながら、そもそも商品テーブルに価格をもたせてることが間違いな気がしてきました。
繰り返しフィールドを使った事がないので、価格テーブルを別に用意しました。
・Key_商品コード(テキストフィールド)
・日付(日付フィールド)
・価格(数字フィールド)
商品テーブルの詳細画面より商品コードでリレーションして、価格テーブルポータル(ソート日付降順)を用意。
商品価格の自動取得時に 本日がすでに登録されていたら本日の価格を更新、本日が登録されていなかったらレコード作成して日付と価格を入力。
価格テーブルを作ることで、データが増えすぎて重くならないか?が心配でしたが、
毎日の作業開始時に、90日以前の価格データを検索して削除スクリプトを組めば解決することに気づきました。
そもそもテキストデータで、1レコード3フィールドくらいしかないデータなので、削除自体が必要ないかもと思ってきました。
ここまでは現状作り変えました。またそれぞれの商品毎の価格テーブルに過去データを入力しました。
ここから一覧に任意の日の価格を表示するためのギミックを作りたいと思いますが、どうする形が良いでしょうか?
ExecuteSQLを使った事がなくて、なかなかうまくいきません。
> 繰り返しフィールドを使った事がないので、価格テーブルを別に用意しました。
理論的に正しいです。
作成日ではなく、作成のタイムスタンプを自動取得するようにしておきましょう。そのタイムスタンプを元に、日付、時刻を計算するフィールドを作っておきましょう。
> 商品価格の自動取得時に 本日がすでに登録されていたら本日の価格を更新、本日が登録されていなかったらレコード作成して日付と価格を入力。
1日複数回取得するのですから、常に新規レコードの追加インポートにして行きます。
> 価格テーブルを作ることで、データが増えすぎて重くならないか?が心配でしたが、
1日3回200商品としても、1年で20万レコードですよね。数百万レコード(数十年相当)以上でも問題なく扱えます。
> 毎日の作業開始時に、90日以前の価格データを検索して削除スクリプトを組めば解決する
なんらかの都合で1年前の価格が知りたくなったときに後悔しますよ。
スケジュールは、スタンドアロンでしたら、常時動かしておき、OnTimerスクリプトをインポート を使うしかないでしょう。ですが、作業しながら裏でデータを取り込むという作業は難しいです。
Last edited by Shin (2024-01-28 10:00:05)
Offline
Shinさん、ありがとうございます。
>>1日複数回取得するのですから、常に新規レコードの追加インポートにして行きます。
こちらに関しては、私の運用では価格テーブル:各商品1日1レコードとして価格は更新していく形で問題ないと考えていますので、
タイムスタンプではなく、日付フィールドにしています。
>>商品コードで自己リレーションしてポータルで表示、日付でフィルターするのが簡単なのでは。
上記を参考に、色々と試したところ、商品一覧にグローバルフィールドを用意して、リレーションでフィルタをかけるやり方で行い、
ある程度うまくできました。
商品一覧ヘッダ部分に
・日付フィールドのグローバルフィールドを3つを設置(便宜上フィールド名:G設定A日、G設定B日、G設定C日)
・商品テーブル-リレーション-設定A用_価格テーブルオカレンス(商品コード=Key_商品コード、G設定A日=日付)
・商品テーブル-リレーション-設定B用_価格テーブルオカレンス(商品コード=Key_商品コード、G設定B日=日付)
・商品テーブル-リレーション-設定C用_価格テーブルオカレンス(商品コード=Key_商品コード、G設定C日=日付)
商品一覧レコードに、
・設定A用_価格テーブルオカレンスのポータルを1行だけ置き、上記ギミックでその日の価格を表示
・設定B用_価格テーブルオカレンスのポータルを1行だけ置き、上記ギミックでその日の価格を表示
・設定C用_価格テーブルオカレンスのポータルを1行だけ置き、上記ギミックでその日の価格を表示
うまく表示してくれました。
そこで後、1点だけ悩んでいるのですが、
各商品の本日の価格に対してG設定A日、G設定B日、G設定C日の価格の比率を出したいと考えます。
商品一覧例:
項目名 :商品名・商品コード・本日価格・G設定A日比率・G設定A日価格・G設定B日比率・G設定B日価格・・・
レコード:あ商品・E325225・4315円・-7.60%・4670円・-3.58%・4475円・・・
レコード:い商品・・・
比率の計算式は Round ( 本日株価/G設定A日の価格*100-100 ; 2 ) です。
上記のような形にしたい場合に、どんなリレーションと計算式を用意すれば良いのかわかりません。
また一覧画面に各商品毎に表示させたいので、比率に関しては計算フィールドは重くなるので避けたいです。
おそらく今後扱い商品が増えていくので。
以上、言葉足らずで申し訳ないですが、アドバイスを頂けますと助かります。
もっとシンプルに作れますよ。
https://www.dropbox.com/scl/fi/6g9mxtss … d7xh4&dl=0
Offline
Shinさん、ありがとうございます。
ご提示頂いたサンプルを拝見しました。内容をある程度把握できました。
ありがとうございます。色々と詰めてみたいと思います。
前に進めそうなので、本件はこれにて終了したいと思います。
ありがとうございました。
Pages: 1
[ Generated in 0.010 seconds, 9 queries executed - Memory usage: 549.17 KiB (Peak: 570.08 KiB) ]