初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-12-30 09:49:25

KN0319
Member

クロス集計 人毎年毎の売り上げリスト

お世話になります。
さて、以下の様なクロス集計をしたいと考えております。

◎テーブル

【社員】
社員ID
氏名

【売上】
社員ID
日付
金額

◎得たい結果

社員ID   氏名 2010年の売上合計 2011年の売上合計 2012年の売上合計 …… 横合計
000001 太郎        1000                   2000                  1500                    4500
000002 次郎        2000                   1500                  3000                    6500
------------------------------------------------------------------------------------------
縦合計                 3000                   3500                   4500                 11000


◎その他

・何年から何年までを集計対象にするかはグローバルフィールド等で指定したい。
・上記の表の各行(縦合計以外)をエクセルにエクスポートしたい。

・環境 Windows10、Filemaker Pro 15 Advanced

==============================

典型的なクロス集計のパターンだと思ったので、過去ログを探して、サンプルも色々見てみたのですが、そのまま当てはまりそうなものを探せなかったので、投稿させて頂きました。
「過去のこの記事がそのまま当てはまるよ」とかでも構いませんので教えて頂けると助かります。
よろしくお願いします。

Offline

#2 2017-12-30 12:07:39

Hiro
Member

Re: クロス集計 人毎年毎の売り上げリスト

> ●何年から何年までを集計対象にするかはグローバルフィールド等で指定したい。
・過去ログid:3983「★ 「クロス集計」サンプルを公開 ★」で基本を習得してください。
・次に、要求になるべく近い事例サンプルを過去ログ検索で見つけてください。
・クロス集計の基本が身についていれば、近似サンプルの改造は容易と思います。
・時系列推移でのクロス集計は、カレンダー系や予約系サンプルを当たって下さい。

> ●上記の表の各行(縦合計以外)をエクセルにエクスポートしたい。
※これはかなり難しいでしょう。理由もクロス集計を習得すれば見えてくると思います。
・最終目的がExcelへ転記なら、
・わざわざ苦手なデータベースソフトFMで遣らなくても
・基礎データだけ送って、
・得意な表計算ソフトExcel側で遣れば良いのでは?

Last edited by Hiro (2017-12-30 16:02:15)

Offline

#3 2018-01-04 19:07:33

KN0319
Member

Re: クロス集計 人毎年毎の売り上げリスト

Hiroさん、ありがとうございました。
おかげさまで、クロス集計に対する理解が深まり、少なくとも紹介して頂いたサンプルについては理解ができたと思います。

さて、その上で、項目を任意で指定できるように、サンプルに次の修正を加えてみました。
・「項目一覧元」というテキストフィールド(グローバル)作る。
・このフィールドに任意の項目を改行区切りで手動で入力する。
・「項目一覧」フィールドは「項目一覧元」を元に各繰り返しフィールドに値を代入するように変更。
・新たに「マスタテーブル 5」というTOを作成。
・「マスタテーブル」の「項目一覧元」と「マスタテーブル 5」の「項目」をリレーションで結ぶ。
・値一覧の「区分トップIDs」の最初のフィールドの値のところを「マスタテーブル 5」の「レコードID」に、2番目のフィールドのところを「マスタテーブル 5」の「区分」にする。
・更に、次のレコードから関連レコードの値のみを含めるに「マスタテーブル」指定。
・ソートを「2番目のフィールド」に指定。

こうすることによって、取得する「レコードID」を絞り込み、その上で各「区分」の先頭の「レコードID」を値一覧にしたかったのですが、この方法だと同じ「区分」の「レコードID」が複数、値一覧に入ってしまいました。
これは仕様でしょうか?

また、これを回避して、意図通りに、各「区分」の先頭の「レコードID」のみのを取得するにはどうしたらよろしいでしょうか?

Offline

#4 2018-01-04 19:48:10

Shin
Member

Re: クロス集計 人毎年毎の売り上げリスト

サンプルファイルで、項目一覧 フィールドの変更は、それでいいでしょう。
区分トップIDs の変更は不要です。特に、2番目のフィールドとしてしていすると、1番目のフィールドの一意性は失われますので、同じデータが出てきます。

新たな TO は不要でしょう。
そのままで、関連レコードへ移動 で、テーブル4 へ移動すれば、目的のレコードに絞り込まれているはず。それをソートしてから書き出せば良いのでは。

Offline

#5 2018-01-04 20:15:25

Hiro
Member

Re: クロス集計 人毎年毎の売り上げリスト

#4 Shinさん回答 に賛同です。

Offline

#6 2018-01-04 20:33:47

KN0319
Member

Re: クロス集計 人毎年毎の売り上げリスト

区分トップIDs を変更しないままだと、この値は「1¶7」に固定されませんか?
例えば 項目一覧 を「い う」にした場合は、区分トップIDsを「2¶8」に、
「う」にした場合は、「6¶9」になるようにしたいと思ったのですが。

Offline

#7 2018-01-04 20:58:48

Hiro
Member

Re: クロス集計 人毎年毎の売り上げリスト

説明の意味が分かりません。その意図も分かりません。
同一「区分」内の項目一覧も集計一覧もその内容は同一です、から!
同一「区分」内のレコードIDを差し替えても、結局表示内容は同じです。

Offline

#8 2018-01-04 21:37:43

KN0319
Member

Re: クロス集計 人毎年毎の売り上げリスト

あ、そうですね。
確かに項目一覧を「い う」に絞っても、
表示結果は

       い  う
  A  2  1
  B  1  1

という感じで期待通りになりますね。

ただ、これは区分A及びBが、それぞれ項目が「い」あるいは「う」のレコードを含んでいるから問題ないのですが、
例えば、このサンプルに「C え」というレコードを追加して、
項目一覧を「え」にしたら、

       え
  A 
  B 
  C  1

になるかと思います。
これを、

       え
  C  1

となるようにするにはどうしたら良いでしょう?

Last edited by KN0319 (2018-01-04 21:41:41)

Offline

#9 2018-01-05 01:03:40

Hiro
Member

Re: クロス集計 人毎年毎の売り上げリスト

改造設定説明代わりにカスタム修正版サンプルをアップしましたので、解析くださいネ。

●修正版サンプル「指定対象レコードのクロス集計.fmp12」→ https://yahoo.jp/box/lZ42k5

Offline

#10 2018-01-05 12:27:19

KN0319
Member

Re: クロス集計 人毎年毎の売り上げリスト

ありがとうございます。
とても参考になりました。

ところで、管理ー値一覧で「区分トップIDs2」の「フィールド指定」を開いて、「OK」を押すと、
『フィールド「区分トップID」は索引設定ができないため、この値一覧は動作しません。処理を続けますか?』
というメッセージが出ます。
それでも特に問題なく動作しているように見えるのですが、何か注意する点はありますか?

Offline

#11 2018-01-05 14:13:53

Hiro
Member

Re: クロス集計 人毎年毎の売り上げリスト

結果オーライの裏技的手法なので、実質問題ないかと思いますが、
どうしても気になるなら、SQL関数が使えるFMP12以降に限っての代案、

「区分トップIDs」の式を以下に変更、(問題の値一覧を使わず、SQLで直接算出)

Let(
[
   #in=Substitute("'" & 項目リスト & "'"; ["¶";"','"]);   //う¶え → 'う','え' へ変換
   #sql="SELECT DISTINCT \"区分トップID\" FROM \"マスタテーブル\" WHERE \"項目\" IN(" & #in & ")"
];
   ExecuteSQL(#sql; ""; ¶)
)

Offline

#12 2018-01-05 19:23:14

KN0319
Member

Re: クロス集計 人毎年毎の売り上げリスト

ありがとうございます。
ExecuteSQLの指定の仕方も知っておきたかったので助かりました。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 597.51 KiB (Peak: 614.41 KiB) ]