みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
macOS Ventura
FileMaker Pro 19
以下の様な日付別のテーブルがあります。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
年度 日付 数量 中央値
1975 2021/1/1 5
1975 2021/1/2 3
1975 2021/1/3 10
・
・
・
2022 2022/12/29 5
2022 2022/12/30 3
2022 2022/12/31 10
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
小計ソートで年度でソートし、以下の様な形で年度毎の中央値を見たいと思います。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
年度 中央値
1975 3
1976 4
・
・
・
2021 6
2022 8
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
しかし、中央値が全て同じ値で返って来てしまいます。
中央値の計算式は以下の通りです。
*計算式はネットで見つけました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
(
GetNthRecord ( 数量 ; Int ( Get ( 対象レコード数 ) / 2 + .5 ) ) +
GetNthRecord ( 数量 ; Int ( Get ( 対象レコード数 ) / 2 + 1 ) )
) /2
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
実際のデータテーブルで年度別に検索をしてみると、この計算式が効いて検索した各年度毎に計算結果が出てきます。
小計ソートの時に正しく表示されません。
何が原因となりますでしょうか。
ご教授ください。
Last edited by u1 (2023-01-10 00:23:27)
Offline
その計算式は、ソートされた対象レコードの中央値を計算するので、「年度ごとの」なら年度で検索して数量でソートしないと得られません。
年度でリレーションして、関連レコードを対象に同様の計算をすればいいのでは。
その計算式は、ソートされた対象レコードの中央値を計算するので、「年度ごとの」なら年度で検索して数量でソートしないと得られません。
年度でリレーションして、関連レコードを対象に同様の計算をすればいいのでは。
リレーションも考えましたが、年度の数が実際には1975〜2023まであり、かつメインのテーブルが拠点毎に存在するのでリレーションだととんでも無い数になる為避けたいです。
よって計算式で何とかしたいのですが。
Offline
「日付別のテーブル」を自己リレーションすればいいだけのはずですが
「メインのテーブル」とは何ですか?
「日付別のテーブル」を自己リレーションすればいいだけのはずですが
「メインのテーブル」とは何ですか?
初めに書いた日付や数量の入ったテーブルが複数あります。
Offline
それならどっちにしてもそれぞれのテーブルで計算式を設定する必要があるのでは。
複数のテーブルを一括して集計したいわけじゃないですよね?
以下のテーブルが30拠点分(30テーブル)あります。
拠点1
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
年度 日付 数量 中央値
1975 2021/1/1 5
1975 2021/1/2 3
1975 2021/1/3 10
・
・
・
2022 2022/12/29 5
2022 2022/12/30 3
2022 2022/12/31 10
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ただ集計は各拠点毎で問題なく、小計ソートにて年度別で数量の中央値を出したいと思います。
これを自己リレーションでやると、非常に多くなってしまうので、上手いこと計算式でできないかなというのが希望です。
試しに、カウントで集計フィールド(フィールド名:対象)を用意し、小計ソートした際に各年度の集計フィールド(カウント)は正しく表示されるので、その値を利用して計算式を以下の様に変えました。
その上で、ソートをする際、年度に加えて数量(降順)も加えたら、各年度で中央値は表示されましたが正しい値とは異なるものでした。
*中央値の正しい値は、Excelで同じデータをMEDIAN関数で確認しています。
(
GetNthRecord ( 数量 ; Int ( GetSummary ( 対象 ; 年度 ) / 2 + .5 ) ) +
GetNthRecord ( 数量 ; Int ( GetSummary ( 対象 ; 年度 ) / 2 + 1 ) )
) /2
Last edited by u1 (2023-01-10 00:22:39)
Offline
サンプルファイルを作ってみました。
テーブルは1つのみで、データは1/1〜12/31まで入れると面倒なので、各年毎(2005年〜2007年)に1/1〜1/10までのデータにしています。
https://xgf.nu/24dz
集計ボタンを押したら、本来以下の結果になる必要があります。
ーーーーーーーーーーーーーーー
年度 中央値
2005年 6.5
2006年 5.5
2007年 6
ーーーーーーーーーーーーーーー
しかし、実際の結果は全て中央値が6.5になってしまいます。
また、実際拠点は30あるので、30テーブルを自己リレーションするのは大変かなと考えます。
計算式でうまく、年度毎の中央値を出せないでしょうか?
Offline
カウントだけ集計フィールドに変えても、GetNthRecordが対象レコード全体から取得するので意味がないです。
>30テーブルを自己リレーションするのは大変かなと考えます。
30個計算フィールドを定義するのと大して手間は変わらないでしょう。
リストの集計フィールドを追加すればグループごとのリストになるはずなので、GetNthRecordの代りにGetValueでそこから取得すれば、リレーションなしでできるかな?
例えばリレーションで対応する場合、以下のような対応になりますか?
・テーブルに1975〜2022までのグローバルフィールドを作成し、それぞれのフィールドに年度の値をセット。
・各年度毎(1975〜2022)に48個のオカレンスを作成の上、自己リレーションで「1975=年度」「1976=年度」・・「2022=年度」という感じでリレーションする。
・各年度のオカレンスを利用して、中央値計算をする。
Offline
グローバルフィールド不要です。
年度で自己リレーションすればいいことですよ。
全拠点をひとつのテーブルにして、
アクセス権の設定で自拠点のレコードのみ閲覧・編集可能
ともできますが。。
Offline
ああ、書き落としました。
中央値を求めるのですから、
リレーションの設定で、数量でソートする必要がありますね。
降順、昇順どちらでもいいでしょう。
Offline
据点ごとにテーブルがあるということは、据点ごとに同じレイアウトを作った、ということですね。
1テーブルにまとめてしまうと、全てが楽になります。中央値の計算も1リレーションはるだけです。
https://www.dropbox.com/s/j7714pvtr07so … 2.zip?dl=0
Offline
チポさん、Shinさんありがとうございます。
頂いた助言とサンプル含め、改めて見直したいと思います。
Offline
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 594.86 KiB (Peak: 611.77 KiB) ]