みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Shin wrote:その通りに理解していますよ。
テーブルBで "OK" を検索して、テーブルA へ関連レコードへ移動、対象外を表示、を試してみてください。
サンプルファイルを公開しておきます。
https://www.dropbox.com/s/m69mx24n35h1y … 7.zip?dl=0すいません、まだ試せていませんでした、
今から頂いた内容で試してみて報告させていただきます。
すいません、試してみて、ご提案頂いている内容を理解しました。
OKとなっていた場合であっても、次がNGで帰ってくる場合もあり、
一つのユーザIDに対してNG〜OKのサイクルが複数あります。
一つのユーザIDに対して
NG〜OK
のサイクルが複数あるのでは?
すいません、余り私が理解できていない気がするのですが、
日付の降順でソートして日付の値が最新のもの(日付の値は重複しません)を取ってきているので、
サイクルが複数あることがどのような影響が出るのかが分かっておりません・・・。
下記はご回答になっておりますでしょうか
↓
テーブルB::処理結果フィールドについて、
・NG1個のみ(レコードが1個しかない)
・NG2個ある(NGとなっているレコードが2個ある)
※両方とも処理結果フィールドにOKの値が入っているレコードは無し
で、両方ともフィールドC/フィールドLに値が入っていない レコードがありました。
※再ルックアップするとフィールドC/フィールドLに値が入りました。
その通りに理解していますよ。
テーブルBで "OK" を検索して、テーブルA へ関連レコードへ移動、対象外を表示、を試してみてください。
サンプルファイルを公開しておきます。
https://www.dropbox.com/s/m69mx24n35h1y … 7.zip?dl=0
すいません、まだ試せていませんでした、
今から頂いた内容で試してみて報告させていただきます。
テーブルAから見て、テーブルBに関連レコードがあるのに
テーブルA::フィールドCに入力されない。ということでしょうか?
普通に考えてあり得ませんよね。照合フィールドに何かゴミが付いてるとか??
私も普通に考えてあり得ないと思いまして、理由が判明しました。
テーブルAのフィールドに、「空欄不可」のフィールドがあり、空欄不可のフィールドに値が入力されていない場合、
ルックアップ又は計算値が更新されない
ということでした。
すなわち、下記の事象として認識しました。
「ルックアップフィールド(フィールド:L)について
1.空欄不可フィールドに値があるかの判定
2.ルックアップ
3.ルックアップ値が入る
という順序で処理が内部的に行われており、、1.の工程でエラーが出ているので2.3.の工程に入らない
なお、計算フィールド(フィールド:C)も近い工程となるようで、
1.空欄不可フィールドに値があるかの判定
2.計算フィールドの値が計算される
3.計算フィールドに値が入る
という順序のため、1.の工程でエラーが出ているので2.3.の工程に入らない
”ただし、本事象は、全てのレコードに対して同じ理由で生じているわけではなく、
空欄不可フィールドに値が無くても正常にルックアップや計算フィールドの値が計算されている場合もある”」
空欄不可フィールドに値を全ていれたところ下記の事象が発生しました。
・テーブルB::処理結果フィールド
を更新した際に、
・フィールド:L/フィールド:C の両方ともが更新されない
・テーブルAで何かを更新すると反映される
(空欄不可のフィールドは全て埋まっている/既存値を置き換える設定になっている ことを前提としています。)
私の認識では、
・テーブルB::処理結果フィールドを更新した段階で計算フィールドであるフィールドCに値が反映され、
・再ルックアップをするとフィールドLにも値が反映される
の想定でした。
すなわち、再ルックアップを行わないとフィールドCに値が反映されないため、再ルックアップの手間がかかってしまっています。
※上記の事象は、一部のレコードで発生しており、空欄不可フィールドに値が入っていなかった際のルックアップでエラーを吐いていたレコードのみにおいて生じているように見受けられました。
最初の質問から逸れてきてしまっているのですが、アドバイスを頂けますと幸いです、よろしくお願いいたします。
お世話になります、確認遅れまして申し訳ありません。
Hiro様、Shin様、チボ様、ご教授ありがとうございます。
Hiro様がおっしゃられるように、
工程A
1.リレーションを日付の降順でソート指定し、
2.テーブルAに、テーブルBの「処理結果フィールド」をルックアップするフィールド「フィールド:L」を作成
3.リレーションのキーとなっているフィールド(ユーザーIDフィールド)を再ルックアップ
4.フィールド:Lで検索
又は
チボ様がおっしゃっておられるように
工程B
1.リレーションを日付の降順でソート指定し、
2.テーブルAに、テーブルBの「処理結果フィールド」を計算で表示するフィールド「フィールド:C」
3.フィールドCで検索
で解決できると思い、実行しました。
その際に、
工程Aの3番の実行時に、
「この処理中に合計●●個のエラーが発生しました。 ●●レコードは、他のユーザーによって使用されているか、使用したアクセス権では変更できません。」
のエラーが一部のレコードに対して発生しました。
この操作は完全アクセス権で行っており、
●●個のエラーの「●●」の値は200個程度が表示されており、その●●人のユーザーが同時に本FileMakerサーバーにアクセスしていることはありません。
また、(試行した限りでは)その値は何度試行しても一緒でした。
「処理結果フィールド」に値が存在しなかったり、リレーション先が存在しないこともありません。
エラーが出たレコードと出ていないレコードの差異は、(私がチェックした範囲では)見つけられませんでした。
エラーが出たレコ―ドと思わしきレコードは再ルックアップがなされず、フィールド:Lは空白のままでした。
また、フィールド:Cは常にテーブルB::処理結果フィールドの値が表示されているはずなのですが、
エラーが出たと思わしきレコードはフィールド:Cの値は空白でした。
(すなわち、フィールドCとLは空白となっている)
上記のようなエラーが出る理由(およびフィールドCが空白となってしまう理由)が分からず難渋しています・・・。
今回の表題の質問とは離れてしまうと思うのですが、お教えいただけますと幸いです、
よろしくお願いいたします。
Shin様、私の書き方がまずくてすいません。
テーブルBには、テーブルA(およびFileMaker)とは関係ない別システムでの処理の結果、
処理履歴レコードが自動的に毎日追加されていく、ということです。
お世話になります、スクリプトで下記のような検索を行いたいと考えております。
【状況】
・テーブルA/テーブルBが存在
・テーブルAを用いたレイアウト上に、テーブルBのデータがポータル表示されている
・テーブルA/テーブルBはユーザーIDフィールドでリレーション
<テーブルA=顧客情報>
・ユーザーIDフィールド
(・その他の顧客情報など)
<テーブルB=処理履歴テーブル>
・ユーザーIDフィールド
・処理結果フィールド
・処理日時フィールド
テーブルBには、処理履歴レコードが自動的に作成されます。
例えば、3回の処理が行われ、3回目で処理が成功した場合、
下記のようなレコードが生成されます。
レコード1:ユーザーID=ID1/処理結果=NG/処理日時201801011000
レコード2:ユーザーID=ID1/処理結果=NG/処理日時201801011004
レコード3:ユーザーID=ID1/処理結果=OK/処理日時201801011008
【行いたいこと】
最終的な(処理日時が最新の)処理結果がNG(OKになっていない)のデータを検索で抽出したい
当然、普通に検索すると、処理結果に一度でもNGが含まれているユーザーが抽出されていまいます。
どのようなスクリプトにすれば上記のような検索が可能か、教えて頂けますと幸いです、よろしくお願いいたします。
お世話になります。
下記の環境です。
Win7 FilemakerPro13/14
実現したいこと:
フィールドAに何らかの値がある場合に(nullではない場合に)、フィールドBが空欄だとアラートを出す
私の方で下記等を参考にしながら、
フィールドBの、入力値の制限→計算式で制限 に下記の記述等を試しましたが、うまく動作しません。
https://fm-aid.com/bbs/viewtopic.php?id=5721
Case ( not IsEmpty ( A ) ; not IsEmpty ( Self ) )
not IsEmpty ( A ) and IsEmpty ( Self )
真偽が逆になっているかと思いまして下記も試しましたが、思ったような挙動になりませんでした。
not IsEmpty ( A ) and not IsEmpty ( Self )
お手数おかけしますが、
記載方法等ご教授頂けますと幸いです。
よろしくお願いします。
> ・顧客情報テーブルに存在する顧客の全てがそれぞれのサービスを利用するわけではないのに、
> 不要な顧客にまでそれぞれのサービスの申込のための計算フィールドを作ることで動作が遅くなるのではないか
特に遅くなるようなことはないでしょう。> ・顧客情報テーブルに大量のフィールドを作ることになるので、動作が遅くなるなど、問題がでるのではないか。
これも特に問題ないと思いますよ>・顧客情報テーブルに大量のフィールドを作ると、見栄えが悪い&視認性がよくない
全てのフィールドをレイアウトに置く必要は有りません。
レイアウトに無いから問いってそのフィールドのデータが消える訳では有りません。レイアウトにはそこに必要なフィールドだけを配置すればいいですね。
上記をふまえても、、
テーブルで共通の、唯一の値を持つフィールドは、グローバル格納にすればいいです。エクスポートの最、グローバルフィールドは全てのレコードについてエクスポートされます。
チポ様
ご返信ありがとうございます。
>>全てのフィールドをレイアウトに置く必要は有りません。
すいません、管理において、テーブルに存在するフィールドの数があまりに多いのが、データベースの管理の画面上で不格好かな、と考えていました。
ちなみに、あるレイアウトに、テーブル上には存在する非保存の計算フィールドを配置していない場合、
各レコードを表示するのは非保存ではない計算フィールドがそのテーブル上に存在する場合と比べて動作は遅くなりますでしょうか。
>>テーブルで共通の、唯一の値を持つフィールドは、グローバル格納にすればいいです。
>>エクスポートの最、グローバルフィールドは全てのレコードについてエクスポートされます。
ありがとうございます、初めてグローバルフィールドというものを確認しました。
リレーションを張っているが無いリレーションのキーとなる値がないテーブルの相手方から値を持ってくることに難渋していて今回の質問になったのですが、
グローバルフィールドで解決しました。
ありがとうございます。
関連付けられているテーブルのフィールドも同時にエクスポートできます。ですから、そのような処理は不要では。
ついでに、懸念事項の
・顧客情報テーブルに存在する顧客の全てがそれぞれのサービスを利用するわけではないのに、不要な顧客にまでそれぞれのサービスの申込のための計算フィールドを作ることで動作が遅くなるのではないか
・顧客情報テーブルに大量のフィールドを作ることになるので、動作が遅くなるなど、問題がでるのではないか。
そのフィールドに索引を作らないのでしたら、関係無いでしょう。そのフィールドを表示したレイアウトを表示する時に、少し遅くなりますが、微々たる物です。・顧客情報テーブルに大量のフィールドを作ると、見栄えが悪い&視認性がよくない
見栄えは関係ないかな。管理上等の視認性は悪くなりますので、適当に他のテーブルに振っていく事をお勧めします。
Shin様
返信ありがとうございます。
初歩的な質問で申し訳ないのですが、
索引を設定する方が、動作が早くなるかと思っていました。
非保存では”ない”計算フィールドに対して、索引を設定しない方が動作が早いのでしょうか。
>>見栄えは関係ないかな。管理上等の視認性は悪くなりますので、適当に他のテーブルに振っていく事をお勧めします。
別のテーブルにグローバルフィールド作ることで解消致しました。ありがとうございます。
お世話になっております。
下記、少し長いのですがご質問させて下さい。
【現在の状態】
・顧客情報テーブル
がデータベースに存在し、そのテーブル上に
・顧客ID:AAA0001、AAA0002、・・・(各レコード(=顧客)に固有)
・サービス利用開始日:20170101、 (各レコード(=顧客)毎に手動で決める)
・その他の顧客情報
が存在します。
このデータを利用して、
サービスの登録用のCSV(以下、登録CSVといいます。)を吐き出す予定です。
登録CSVは別システムに手動でアップロードし、その別システムから登録結果CSVが吐き出されます。
登録結果CSVにはサービスの顧客毎のID・PASSが記載されています。
登録CSVの内容:
・顧客ID
・サービス利用開始日
・固定の設定項目が約20項目ほど。顧客それぞれによらず、「0」や「1」の表記で固定
登録結果CSVの内容:
・登録CSVで登録した顧客ID
・登録CSVで登録したサービス利用開始日
・登録CSVで登録した固定の設定項目が約20項目ほど。
・顧客毎のIDやPASSの項目
となっています。
【問題としていること】
このような場合、これまでのFileMakerの作成では、
登録CSVに必要な固定の設定項目は顧客情報テーブルに作成し、
登録結果CSVを、「登録結果テーブル」にインポートしていました。
(顧客情報テーブル上のフィールド例)
1:顧客IDフィールド(AAA0001)
2:サービスの利用開始日フィールド(201701)
3:固定設定項目フィールド1(=1 計算フィールドで指定)
4:固定設定項目フィールド2(=0 計算フィールドで指定)
・
・
・
・
25:固定設定項目フィールド23(=1 計算フィールドで指定)
等という形でフィールドを作成し、それをエクスポートして登録結果CSVとするイメージです。
これまではサービスの種類が少ないため、上記で問題ないかと考えていたのですが、多種のサービスを申し込む事例が増えそうなため、
下記のことを懸念しています。
・顧客情報テーブルに存在する顧客の全てがそれぞれのサービスを利用するわけではないのに、不要な顧客にまでそれぞれのサービスの申込のための計算フィールドを作ることで動作が遅くなるのではないか
・顧客情報テーブルに大量のフィールドを作ることになるので、動作が遅くなるなど、問題がでるのではないか。
・顧客情報テーブルに大量のフィールドを作ると、見栄えが悪い&視認性がよくない
【検討していること】
上記を踏まえ、下記の機能を持ったボタン(スクリプト)を作ろうかと思っています。
・ボタンを押すと、
・顧客情報テーブルと顧客IDでリレーションが張られている「サービス申し込みテーブル」(又は、登録結果テーブルとこのサービス申し込みテーブルは共通)に新しくレコードが作成され、
・そのレコードにボタンを押したときに表示されていたレコード上の顧客IDが入力される
・同じユーザーを複数作成しないようにはスクリプト側で制御する
・その後、手動でサービス申し込みテーブルから登録CSVをエクスポートする。
これであれば、顧客情報テーブル側にフィールドを作成しなくてすむかと考えております。
【上記の運用の問題点として考えていること】
・そもそも、ここまでして顧客情報テーブルにフィールドを作成しないようにする必要があるのか。
・新しくサービスを申し込もうとするユーザー一人一人にそれぞれ手動でボタンを押さないといけなくなるため、押し忘れや押し間違いが起きそうである。
以上の状況で、どちらの形で設計および運用するのが良いのか、
アドバイスを頂けませんでしょうか。
>>Shin様
ご丁寧にファイルまで作成頂いてありがとうございます。
Shin様のおかげでポータルという機能を初めて知りまして、簡単に実装できて感動しました。。。
>>年*12+月
こちらも頭に入れておきます。
アドバイス頂きましてありがとうございます。
解決直後で申し訳ないのですが、また1点別で疑問が出まして、別のTOPICでご質問させて頂ければ幸いです。
Shin様もご覧頂いた皆様もありがとうございました。
お世話になります。
・顧客情報
・顧客への課金結果
の2種のテーブルがあります。
顧客情報テーブルには
・顧客ID(AAA00001 など)
が存在します。
顧客への課金結果テーブルには、
・顧客ID(AAA00001 など。この顧客IDは顧客情報テーブルの顧客IDと一致)
・課金月(201701、201702。・・・・など。)
・回収金額
が存在します。
課金結果テーブルには、課金月毎にレコードが存在するため、
同一の顧客IDに対して、課金月によって複数のレコードが存在します。
(例えば、顧客ID:AAA00001、課金月:201701、回収金額:1,000円 と 顧客ID:AAA00001、課金月:201702、回収金額:1,500円 のレコードが存在します。)
この状況で、
顧客情報のテーブルに、それぞれの課金月の回収金額を表示させる術はありますでしょうか。
顧客への課金結果のテーブルを、課金月に分けて毎回作っていけば(例えば、201701と201702の課金月で別のテーブルを作成すれば)、普通に顧客IDでリレーションを張るだけで実現できるかと思うのですが、
月毎にテーブルが無限に増えていく仕様にはできればしたくないと考えています。
お手数おかけいたしますが、どのようにすればよいかお教え頂けますと幸いです。
よろしくお願いいたします。
Pages: 1
[ Generated in 0.005 seconds, 6 queries executed - Memory usage: 630.12 KiB (Peak: 667.52 KiB) ]