Microsoft Access 掲示板

【Access】クエリでグループ化を維持したまま集計合算フィールドを対象とした計算をしたい

8 コメント
views
4 フォロー

はじめての質問です。Accessの知恵をお貸しください。

タイトルの件ですが、具体的な内容を先に記載します。
ODBCデータソースから2つのリンクテーブルをAccessで用意しました。
「伝票」「明細」となる2つのテーブルを伝票番号フィールドでつなげています。

伝票には顧客情報などいわゆるヘッダー情報があり、明細には商品情報(商品名、数量、売上額、粗利額)などの要素があります。
一対多となります。

クエリでグループ化を行い、金額関係のフィールドを合算することで1つの伝票番号に複数明細行があったとしても1行で売上合計額と粗利合計額がわかるような仕上がりにすることができました。

そこで更に合計された金額から粗利率の算出をしたいと思い、クエリに追加で粗利率:[粗利額]/[売上額]という計算式を追加したところ明細ごとにわかれてしまいました。明細行ごとの粗利率は正常に計算されています。

このような場合、どのような方法なら実現ができるのでしょうか?
よろしくお願い致します。

追記
グループ化をするにあたり、年月別で集計したいと思っています。
伝票テーブルで持っている情報はyyyy/mm/ddの形式となっており、年:Year([売上計上日)]と月:Month([売上計上日])で分割をしました。年別or月別顧客別売上実績…というようなイメージで考えております。

ほり
作成: 2022/06/08 (水) 14:23:01
最終更新: 2022/06/08 (水) 14:28:00
通報 ...
1

クエリのデザインビューで下記のように設定してください。

フィールド: 粗利率: SUM([粗利額])/SUM([売上額])
テーブル: 明細
グループ化: 演算
2

追記に関しては、現状の 年:Year([売上計上日)]と月:Month([売上計上日]) の設定では希望と異なるのですか。
具体的にどのような出力になってほしいのでしょうか。
希望の出力を例示してもらえますか。

3
ほり 2022/06/08 (水) 16:19:33 10b1e@0e92c

早速のご回答ありがとうございました。
上記方法ですぐに求めていることが実現できました、助かりました。

追記に関してですが、かえって混乱をさせてしまいました。解決済みです。
集計するのに年単位、月単位で見れるようにしたいというのが希望でしたが、それに関しては2つのクエリを作成して年別クエリには年だけのフィールド、月別クエリには年、月を用意しておけば良いとわかっていました。

月別売上実績
年 月 顧客名 売上額 粗利額 粗利率
2022 4 A株式会社 10000 8000 80%
2022 5 A株式会社 20000 8000 40%
2022 6 A株式会社 30000 8000 27%
2022 4 有限会社B 5000 4000 80%
2022 5 有限会社B 6000 3000 50%
2022 6 有限会社B 7000 2000 29%

年別売上実績
年 顧客名 売上額 粗利額 粗利率
2022 A株式会社 60000 24000 40%
2022 有限会社B 18000 9000 50%

すごく初歩的なお話になってしまうのですが、こういったデータ分析をするのにAccessクエリを使うことは過去にもよくありましたが上記例のように年別、月別、日別、全期間などグループ化する重点をどこかに置くかの違いだけで似たようなクエリが続出していきます。クエリが増えていくこと自体は業務で必要なことなので構わないのですが、これってスマートなやり方なの?と思うときがあります。

4

年別、月別、日別、全期間などグループ化する重点をどこかに置くかの違いだけで似たようなクエリが続出していきます。

下記のようなフィールドを作成してそれでグループ化すれば一つのクエリで可能です。

間隔: Format([年月日],Choose([年別:1, 月別:2, 日別:3, 全期間:4],"yyyy","yyyy/mm","yyyy/mm/dd","全期間"))

[年別:1, 月別:2, 日別:3, 全期間:4]というパラメータが出ますので1~4の数値を入力することでグループ間隔を指定できます。

フォームにオプショングループを配置しておいて、それを参照するようにすれば、フォームでオプションを選択すればグループ間隔を切り替えて表示できます。

間隔: Format([年月日],Choose([Forms]![フォーム1]![フレーム1] ,"yyyy","yyyy/mm","yyyy/mm/dd","全期間"))
5
ほり 2022/06/08 (水) 17:57:56 10b1e@0e92c

早速上記のフィールドを作成して試してみました!
まだフォームでの切り替え制御までは手を付けられていませんが、既にクエリ実行時に表示されるダイアログで1~4を指定すればグループの間隔を1つのクエリで制御できました!基幹システムに備わっている集計機能の煩わしさをこれでフォローできてしまいそうです…勉強になりました。

6

下記の手順で簡単にオプショングループを設置できます。

コントロールウィザードがONの状態でフォーム上にオプショングループを配置します。
ウィザードで、ラベル名を下記のように設定すれば、あとは、次へボタンをクリックしていけば完成します。

画像1

あとは、クエリを開くコマンドボタンを配置すればいいでしょう。

画像1

7
りんご 2022/06/09 (木) 13:16:15 c564b@0e907

>> 3
横にそれます。あえて、年月別のテーブルに持つ、という選択肢もあるようです。組み方はちょっと分かりませんが。

8
ほり 2022/06/09 (木) 15:55:11 10b1e@0e92c

hatenaさん、りんごさん、アドバイスありがとうございます。
まず、オプショングループを設置してでのクエリを開くは無事作成することができました。

今まではクエリの抽出指定する時などは非連結のテキストボックスやプルダウンリストを使っていましたが、オプショングループは使用者にとって視覚的にもわかりやすいですね。
今までの知識だと今回のようなケースはあらかじめ年別、月別、日別、全期間でグループ化しておいたクエリを作って、フォームにそれぞれを開くボタンを設置していましたがとてもシンプルになりました。

結果は今までの方法でも得られたと思いますが、クエリやフォーム上のボタンなど乱立もせず、ボタンのイベントも複数個所メンテナンスする必要がなくなるのでしっかり身に着けたいと思います。ありがとうございました。