Microsoft Access 掲示板

クエリが複雑すぎます / 9

16 コメント
views
4 フォロー
9
hiroton 2020/04/06 (月) 17:37:30 dea5e@f966d

現象を確認しました。
hirotonの上げた構文は8月以降の式が想定と異なっていたためエラーにならなかったようです。

いろいろ試してみましたが、一時テーブルを作成して、「n月金額」部分のみ計算させるような(sumもiifもnzもない)クエリを作っても11か月以上同時に表示しようとするとエラーが発生してしまいました。

フィールドを順次参照していることと、そのフィールドが計算式になっていることが重なって「複雑」となるようですが、明確な条件はわかりませんでした。

いろいろやってみたところ、クエリでの計算を減らすとなんとかなることもあるようでした。例えば標準モジュールに以下のユーザー定義関数を作成し、クエリ上の計算式を置き換えます。

Function 払出金額(前月金額, 前月数量, 当月仕入金額, 当月仕入数量, 当月売上数量)
    払出金額 = (前月金額 + 当月仕入金額) / (前月数量 + 当月仕入数量) * 当月売上数量
End Function

Function 当月金額(前月金額, 前月数量, 当月仕入金額, 当月仕入数量, 当月売上数量)
    当月金額 = 前月金額 + Nz(当月仕入金額, 0) - Nz((前月金額 + 当月仕入金額) / (前月数量 + 当月仕入数量) * 当月売上数量, 0)
End Function
:
 Sum(IIf([月]=1,[仕入数量])) AS 8月仕入数量,
 Sum(IIf([月]=1,[仕入金額])) AS 8月仕入金額,
 Sum(IIf([月]=1,[売上数量])) AS 8月売上数量,
 払出金額([7月金額],[7月数量],[8月仕入金額],[8月仕入数量],[8月売上数量]) AS 8月払出金額,
 Sum(IIf([月]<=1,[仕入数量]-[売上数量])) AS 8月数量,
 当月金額([7月金額],[7月数量],[8月仕入金額],[8月仕入数量],[8月売上数量]) AS 8月金額,
:

ただ、表示までこぎつけても、数件のテストデータだけでも表示までにそれなりの時間がかかっていたので、実用できるかはちょっと疑問です。「複雑すぎ」ると言われるのも納得かなと

金額計算部分がフィールドを繰り返し参照する重い処理になっているので、出力用のテーブルを事前に作成しておいて金額部分以外を出力したのち、VBAで金額部分を計算させるのがいいんじゃないのかなぁと思いました

通報 ...