みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
初心者で、このサイトに初めて来ました。
素朴なことが簡単にできないので、良い方法をご存じの方に教えて頂ければと思って質問します。
どなたか簡単に分かりそうでしたら、教えて頂けると幸いです。
<実現したいこと>
既存のデータを特定のフィールドでソートした結果を、専用のレイアウトで表示する。
<データの例>
元データのテーブル「Data」
ID Value
1 5
2 2
3 4
欲しい表示: フィールド Value の値でソートした結果
ID Value
2 2
3 4
1 5
https://www.dropbox.com/s/il5wlywu24hiyxf/Test.fmp12
<質問>
これを実現する最も簡単な方法はどのようなものでしょうか?
<参考: 考えてみた実現方法>
(1) フィールド ID を鍵にして、テーブル Data の自己連結リレーションシップから 2 つ目のテーブル Output を作成する。
(2) ダミーの 3 つ目のテーブル Dummy を作成し、フィールド Dummy を作成し、グローバル定義で数値 1 を設定する。
(3) テーブル Data と Output の両方にフィールド Dummy を作成し、それを鍵にして、テーブル間にリレーションシップを作成する: Dummy = Data = Output
(4) 表示用レイアウトを作成する。テーブル Output のレコードを参照し、フィールド Value でソート表示するポータルを配置する。
とりあえずこれで、やりたいことは実現できています。
しかし、単に既存データのソート順だけが異なるデータを表示するだけのことに対して、(1), (2), (3) が余計な操作になっていると思っています。
とりわけ、(2), (3) のような方法はとらなくてもよいはずだろうと想像しています。
というわけで、(1)〜(3) のようなことをしなくてもよい、より良い方法はないかどうかというのが質問です。
もちろん、ポータルなど上記に出てきた手段にこだわっているわけではありません。
Last edited by tack2018 (2018-08-17 02:25:56)
Offline
全レコードをポータル表示するのに、要らぬ大変な苦労をなさってます。
常に全件ヒットするリレーションは、デカルト積(リレーション演算子→[X])
のリレーションと言います。
設定は非常に簡単で、キーフィールドは空欄で無ければ何でも結構ですので、
演算子だけ[X]の自己リレーションを張るだけで完了です。
本題のソートの点ですが、
元データ順を上書きしても良いなら:
→単純にValueで昇順ソートするだけ
元データ順を保持したままで、別途Value昇順ソート見せしたいなら:
→新規ウインドウでソート見せするのが簡単
あるいは
→元ソートと変更ソートをそれぞれスクリプトにしておいて任意切り替える
ポータルでValue順見せしたいなら:
→デカルト積[X]リレーションにValue順ソートを掛けます。
Last edited by Hiro (2018-08-17 04:21:38)
Offline
既存のデータのオカレンスで、専用のレイアウトを作れば、単に Value でソートするだけだと思いますが。
Offline
大変丁寧なご回答、ありがとうございました。
自分で調べている間は、「デカルト積」というキーワードに辿り着けませんでした。
このサイトの他のスレッドで「デカルト」という語があったのを一度見つけていたので、
けっこう近い情報には当たれていたとは思うのですが、それがどう使えるのかが分からないと、結局理解できません。
「×」演算子は、リファレンスに普通に書かれてあって、そうと分かれば事例がいっぱい見つかって当たり前のことかと思うのですが、
「デカルト積」というキーワードがここで関係していると指摘されないうちは、
自分でこのまま調べていてもまだまだ分からないままだったと思います。
助かりました。ありがとうございます。
ダミーのグローバル定数をキーフィールドにするという私が考えた方法は、
その「×」演算子を「=」演算子で自作したことになっていたと理解しました。
回り道をして、いろいろよく理解できました。
ソートに関して、元のデータを残す場合に、「新規ウインドウ・・・」の点はよく分からないので、
今できている、ポータルで表示する方法を採用します。当面、それで十分です。
(この場合に、なぜデカルト積リレーションで新たにテーブルオカレンスを作成しないといけないのか、
それがデータベースの原理的な理由によるのか、FileMaker のインターフェイス上のことだけなのか、
まだ理屈をよく理解しきれませんが、とりあえず、今は放っておいて大丈夫です。)
Offline
>ソートに関して、元のデータを残す場合に、「新規ウインドウ・・・」の点はよく分からないので、
「専用のレイアウトで表示」これをどう解釈するかで、いろいろな表示方法が考えられます。
サンプルファイルを見ますと、入力レイアウト(Data)とソート表示のレイアウト(Output)が別となっています。(もしくは、入力レイアウトはまた別かもしれませんが)
入力しつつ登録リスト(ソート済)を確認したい場合、同一のレイアウトにポータル表示するか、別ウィンドウを開いてリスト表示をします。
後者の形であらわすのに、新規ウィンドウを使用します。
この場合、ポータル使用せず、リスト形式などで表示もできます。
>なぜデカルト積リレーションで新たにテーブルオカレンスを作成しないといけないのか
自己リレーションです。
サンプルファイルがDataテーブルに、オカレンスDataとOutputが存在します。
ポータルを使用するさい、参照先のオカレンスを指定しなければなりません。Dataテーブル(オカレンス:Data)→Dataテーブル(オカレンス:OutPut)をみています。
参照先が同じテーブルであるため、「自己」というわけです。
サンプルファイルは、オカレンスがDataとOutput違う名にしていますが、テーブルが同じですから、これも自己リレーションです。
要は、ポータル使うために参照先のオカレンスが必要となるため、テーブルが1つでも元と参照先の2つオカレンスを作ることになるわけです。
あとは、リレーションがどのような形であるかというだけです。[=]なのか[X]なのかなど。
Offline
あるとさん、ありがとうございます。
(1)
> 入力しつつ登録リスト(ソート済)を確認したい場合
はい、この場合に落ち着くことになりそうです。
今のところ、フォーム形式でポータルを配置していけています。
一画面内に、データを入力する部分と出力の部分を自由にレイアウトします。
この先、最終的には、この出力レイアウトの部分だけを Pro Advanced の実行ファイル生成機能を使ってアプリ化することを前提としています。
(目下、手持ちの FileMaker は一つ前の Ver. 16 Pro なので、その機能はまだ確認できていません。)
フォーム形式ではなく、リスト表示でこのようなことが実現できるのか、ちょっとまだよく分かっていませんが、
とりあえず今のところは、できている方法で先に進めばよいので、このまま理解し損ないでも大丈夫です。
(2)
> 要は、ポータル使うために参照先のオカレンスが必要となるため、テーブルが1つでも元と参照先の2つオカレンスを作ることになる
だいぶ考えました。そして、今、今なりに、リレーションシップを作るということとポータルとの関係がだいぶくっきりと分かったつもりになっています。
ポータルを使おうとすると、別の TO を参照しなければならないから、目下の目的では自己連結リレーションシップによってそれを作る必要がある。
このあたりのことについて、だいぶはっきりしました。
ありがとうございます。
私がなんとなく思っていたことは、そういった機能はポータルに持たせられるのではないかということだったようで、
自己連結リレーションシップ + デカルト積などという、形式的には理解できるけれども二重に回りくどいことは
しなくてもよい方法があるのではないかということでした。
しかし、だいぶ考えた今,その回りくどいように見えるほうが形式的にはすっきりとしていて理解しやすいようにも思えてきました。
まだ直感的にはいかないのですが。
Offline
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 586.16 KiB (Peak: 603.06 KiB) ]