みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FMPadv15,win10です.
システムログの解析をFMで行おうとしています.
テーブル1::日時1(あるイベントが開始された日時)
テーブル1::日時2(このイベントが終了した日時)
この2つのフィールドを配置したレイアウトに,日時1と日時2の期間内にシステムにログインしたユーザーのログイン日時(データはテーブル2にあります)をポータルで配置しました.
リレーションの条件は,
日時1 <= ログイン日時 かつ ログイン日時 <= 日時2
です.ここで,
ログイン日時 - イベント開始日時
を計算したいのですが,単純にこの計算をすると,最初のポータルの値での計算しかされません.
テーブル1とテーブル2を組み合わせた別のテーブルを作ることも検討しましたが,イベントは同時に複数起動することがあるため,1つのログ(テーブル2のデータ)が複数のレコード(テーブル1)に該当することがあり,うまく作れませんでした.
ポータル内のそれぞれの値でそれぞれ計算を行うにはどうしたらよいでしょうか?
Offline
> 日時1 <= ログイン日時 かつ ログイン日時 <= 日時2
このリレーションでは、
> イベントは同時に複数起動することがある
ということですから、テーブル2からイベントを特定出来ませんよね。
Offline
チポさん:
コメントありがとうございます。
> テーブル2からイベントを特定出来ませんよね。
私の説明がわかりにくく申し訳ありません.
テーブル1で決まる範囲を基準に考えたいので,テーブル1からテーブル2を「1対多」でデータを参照し,テーブル1の値(テーブル1::日時1)とテーブル2で該当するデータとの演算を行いたいと考えています.
Offline
テーブル2から見てテーブル1の関連レコードも複数になりますから、
ポータル内でその関連レコードだけとの計算を表示とはいかないでしょう。
Offline
> ポータル内でその関連レコードだけとの計算を表示とはいかないでしょう。
となると,テーブル2側にテーブル1のデータをコピーするような作業が必要になるでしょうか?
テーブル1のレコード数が3000程度あり,できるだけ手動での作業を使わずに実現させたいです...
Offline
テーブル2か、新たなテーブル3で
関連するイベントごとにレコードを作ることになるのでは。
Offline
> テーブル2か、新たなテーブル3で関連するイベントごとにレコードを作ることになるのでは。
うぅぅぅ・・・そうなりますか・・・
テーブル2に作るとなると,逆の「1対多」になり元の木阿弥になりかねないので,テーブル3を作ることにします.
そこでもう1つアドバイスを頂きたいことがあります.
この場合の別テーブルの作成(データのコピー?)で,効率のいい方法はありますでしょうか?
以前,一度チャレンジしたのですが,そもそもテーブル間のデータのコピーがうまくいかず,途中で断念しました.
Offline
方法はいろいろあると思いますが、一案を、、
テーブル2で各レコードのシリアル番号等、ユニークな値のフィールドを作り、
このフィールドで、テーブル3とリレーション。
このリレーションの設定でテーブル3の新規レコード作成に許可を与えます。
テーブル2のレイアウトにこのリレーションのポータルを配置。
このポータルの新規行にテーブル1の関連レコードのイベントを
一つずつ入力することでテーブル3のレコードが作成されます。
Last edited by チポ (2017-07-18 11:49:52)
Offline
チポさん:
頭から煙が出そうですが,まずはやってみます.
また質問するかもしれませんが,そのときはよろしくお願いします!
ありがとうございました.
Offline
チポさん:
昨日はアドバイスありがとうございました.
1)チポさんのアドバイスを元に試行錯誤してみましたが,どうしても「1つ以上の必要な関連レコードを・・・」というメッセージが出てしまい,先に進めません.
2)また,試行錯誤しているうちに「このポータルの新規行にテーブル1の関連レコードのイベントを一つずつ入力することでテーブル3のレコードが作成されます」のところが理解できていないのでは?と思い始めています.
上記2点について,改めてコメントをいただけないでしょうか?
Offline
> 「1つ以上の必要な関連レコードを・・・」というメッセージが出てしまい
どのような状況でアラートがでますか?
> このポータルの新規行にテーブル1の関連レコードのイベントを一つずつ入力することでテーブル3のレコードが作成されます
ポータルの最終の空白の行に入力出来ますか?
できれば
テーブル3を見てください、そこに新しいレコードが作成されています。
できなければ、
リレーションの設定が間違っています。
もう一度確認してください。
Offline
> どのような状況でアラートがでますか?
「1つ以上の必要な関連レコードを・・・」は,テーブル2のレイアウトに配置したポータルにデータを入力,確定後に出ます.
> ポータルの最終の空白の行に入力出来ますか?
できますが,上記の通りです.
> リレーションの設定が間違っています。
テーブル2にはすでにユニークな値を持つフィールドがありましたので,これをテーブル3のフィールドとイコールで結んでいます.
Offline
ごめんなさい、
アラートが分かりません。
テストしてみましたが、再現されません。
アラートの全文を書いてみてもらえますか?
また、
どなたかお分かりでしたらhelpを。。
Offline
リレーションに設定で確認です.
「テーブル2のユニークな値を持つフィールドと,テーブル3に新たに作ったフィールをリレーションで結ぶ」ということですが,このテーブル3のフィールドになにか制限や設定,条件などはありますか?
Offline
計算フィールドはダメです。
テーブル2のユニークなフィールドとタイプをそろえます。
以上が条件です。
ポータルに入力してレコード作成は、
照合フィールドは自動で入力されますから、
特に設定等無用です。
Offline
> 計算フィールドはダメです
> テーブル2のユニークなフィールドとタイプをそろえます。
どちらもテキストフィールドなので,問題ないと思います.
> アラートの全文を書いてみてもらえますか?
「1つ以上の必要な関連レコードを利用および作成できないため,この操作は実行できません」と表示されます.
Offline
どうしても再現されません。
再度確認すべき点をいくつか、、
フィールド定義
リレーションの設定
レイアウトの確認
ポータルのテーブル
ポータルに配置したフィールド(のテーブル)
これ位ですか。。
Offline
テーブル1::アラートのログ
テーブル2::ユーザーアクションのログ
テーブル3::新規リレーション用
フィールド定義
・テーブル1::UID1(テキスト,重複無し)
・テーブル1::イベント開始(タイムスタンプ)
・テーブル1::イベント終了(タイムスタンプ)
・テーブル1::ユーザー1(テキスト)
・テーブル2::UID2(テキスト,重複無し)
・テーブル2::startDTTM(タイムスタンプ)
・テーブル2::endDTTM(タイムスタンプ)
・テーブル2::ユーザー2(テキスト)
・テーブル3::UID3(テキスト)
リレーションの設定
・テーブル1とテーブル2
ユーザー1 = ユーザー2
and startDTTM >= イベント開始
and endDTTM <= イベント終了
・テーブル2とテーブル3
UID2 = UID3
レイアウトの確認
・ポータルのテーブル
テーブル2のレイアウトの中に配置しました.
・ポータルに配置したフィールド(のテーブル)
UID3のみ.
以上,よろしくお願いします.
Offline
> ・テーブル2とテーブル3
> UID2 = UID3
このリレーションの設定で、
テーブル3のレコード作成の許可をしていますか?
他にもテーブル構成に疑問がありますが、
今はアラートの原因を解決しましょう。
Offline
かなり複雑になっているようなので、別案をば、
・「g日時1」グローバルフィールドを追加して、
・OnRecord系トリガースクリプトで、そのレコード固有の日時1を自動代入、
・差分計算の引数に「g日時1」の方を充て、更新計算する
そんな作例サンプルをアップしておきます。
●サンプル「ポータル内の計算.fmp12」 → https://yahoo.jp/box/9XW-QJ
Offline
Pages: 1
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 607.35 KiB (Peak: 624.26 KiB) ]