過去の桐井戸端BBS (桐ver.8)
5022 レポートで集計 NANA 2000/03/08-14:24
初めまして、22歳のOL2年目のNANAです。
桐は使い始めて3ヶ月くらいですが、
現在販売管理を作成しています。
いつも、BBSを見て勉強しています。

初めてこの場に書き込みをしていますが、
今日はレポート印刷で集計がうまくいかないので
教えてください。

表の状態
NO   ID   数量
2    1    10
2    2    5
1    1    5
2    2    3

これをレポートを作成して
    NO   1    2    合計
ID   1    5    0    5
    2    10    8    18
合計 15    8    23

と言う集計をとりたいのです。
現在出来上がっているのは
   NO    1    2
ID  1    15    15
   2     8     8
        23    23
と言う状態で、すべての情報が1行目に集まってしまいます。
NO1はNO1の列にと言う風にその列に合うデータだけを出す方法が分かりません。
今の状態は、小計と大計を利用していて、IDはテキストで項目を挿入していますが、
NOの方はラベルにして固定にしています。
いろいろ調べましたが、なかなか出来ないので
どなたか教えていただけませんでしょうか?


5025 Re:レポートで集計 宮城 2000/03/08-15:43
記事番号5022へのコメント
NANAさん、こんにちは。b横、IDを縦とする二次元テーブルを作りたいということですね。
(でもなんか逆のような気もするんですが。)

「転置集計」を使います。次の手順によってください。

1.aAID順に並び替える(横に展開する方を上位にしてください)。
2.行集計→転置集計
  グループ項目:ID・・・縦
    転置項目:aE・・横
    集計項目:数量(集計種別=合計)
3.これをさらに集計すれば、いいはずです。

(やっぱり、きれいに縦横逆のテーブルができました。でも、要領はわかりましたでしょ。)


5026 Re:レポートで集計 宮城 2000/03/08-16:18
記事番号5025へのコメント
一言忘れました。転置集計後の表はそのままでは保存できません。
保存するには別表として書き出して下さい。

5027 Re:レポートで集計 NANA 2000/03/08-16:45
記事番号5025へのコメント

宮城さん、ありがとうございました。
宮城さんの言うとおり、縦横逆のテーブルでしたが、集計がとれました。
初心者なので,BBSへの書き込み方の礼儀も
なっていないと思いますが、これからも
よろしくお願いいたします。

5141 NO5022の続きです NANA 2000/03/13-15:40
NO5022で質問しましたNANAです。
先日教わりました、転置集計から、印刷物を作るのに、
テーブルの一覧表の印刷では不十分でしたので、
レポートの作成を試みました。

今度は転置項目を日付の月にしました。

●転置集計のテーブルから書き出した表
1999年4月#タ1999年5月・・・

●レポート
#タ4月#タ#タ5月・・・

[4月]というレポートの項目に[1999年4月]
というテーブルの項目を設定します。
これを毎年、同じテーブルやレポートを使用したいのですが、
項目をそのたびに揃える方法が分かりません。
テーブルの項目を書き換えてしまうことが出来れば
良いのですが・・・。

5151 Re:NO5022の続きです 宮城 2000/03/13-18:27
記事番号5141へのコメント
常に4月から3月までの表(レポート)を作りたいということでいいですか?
(ちょっと違うかな?)

そういう最終レポート用の表ができている前提とします。年抜きで4月・5月
・・・・・2月・3月・合計等。この表をエクスプローラで別名でコピーして
おきます(去年のデータ)。次に4月から3月までをゼロクリアします。

一方、最新データで転置すると、4月・5月までのデータしかなかったとしましょう。
これを書き出しするのではなしに、左記の表へ読み込みます。

[4月][2000年4月]
[5月][2000年5月]
6月以降読み込まず。

これで、毎回表の属性やり直しからは逃れられます(前回のをベースとしてマイナーチェンジのみ行う)。

5160 Re:NO5022の続きです NANA 2000/03/14-14:32
記事番号5151へのコメント
NANAです。いつも早々とお返事、助かっています。
本当にありがとうございます。
宮城さんからのヒントを元に、
今度はそれをイベントのマウス左クリックに
登録して自動で動かしてみました。

表 "WK_数量推移.TBL"
&項目数=#項目数
&回数=1
繰り返し (&回数=<&項目数)
&項目名[&回数]=#項目属性(&回数,1)
&回数=&回数+1
繰り返し終了

表 "WK_推移.TBL"
行削除 *
読み込み 表,"WK_数量推移.TBL"\
,{[得意先ID]&項目名[1],[7月]&項目名[2],[8月]&項目名[3],[9月]&項目名
[4]\
,[10月]&項目名[5],[11月]&項目名[6],[12月]&項目名[7],[1月]&項目
名[8]\
,[2月]&項目名[9],[3月]&項目名[10],[4月]&項目名[11],[5月]&項目名
[12]\
,[6月]&項目名[13],[合計]&項目名[14]}

(変数宣言はすでにしてあると言うことにします)
と言うプログラムを書きました。

>6月以降読み込まず。
と言う処理の書き方が分からないために、
エラーが生じて、読み込みが出来ません。
ここの書き方を指導してください。

5162 Re:NO5022の続きです 宮城 2000/03/14-15:11
記事番号5160へのコメント
いや、立派な記述です。驚きました。

>>6月以降読み込まず。
>と言う処理の書き方が分からないために、

ですが、これは要は対応を書かなければいいんです。

>表 "WK_推移.TBL"
> 行削除 *
> 読み込み 表,"WK_数量推移.TBL"\
> ,{[得意先ID]&項目名[1],[7月]&項目名[2],[8月]&項目名[3],[9月]&項目名
>[4]\
> ,[10月]&項目名[5],[11月]&項目名[6],[12月]&項目名[7],[1月]&項目
>名[8]\
> ,[2月]&項目名[9],[3月]&項目名[10],[4月]&項目名[11],[5月]&項目名
>[12]\
> ,[6月]&項目名[13],[合計]&項目名[14]}

を次のようにするつもりでした。

表 "WK_推移.TBL"
行削除 *
読み込み 表,"WK_数量推移.TBL"\
,{[得意先ID]&項目名[1],[7月]&項目名[2],[8月]&項目名[3],[9月]&項目名[4]\
,[10月]&項目名[5],[11月]&項目名[6],[12月]&項目名[7],[1月]&項目名[8]\
,[2月]&項目名[9],[3月]&項目名[10],[4月]&項目名[11],[5月]&項目名[12]\
}

もし、この例で6月データがない場合、

[得意先ID][7月][8月][9月][10月][11月][12月][1月][2月][3月][4月][5月][合計]

という表になるはずです。よって、配列変数&項目名[12]までは狙い通りにセットされますが、

&項目名[13]:合計
&項目名[14]:未定義(初期値セットしていなければ)

となっていると思います。&項目名[14]に相当する項目名が WK_数量推移に見いだせず
エラーになっているのだと思われます。

5169 Re:NO5022の続きです NANA 2000/03/14-18:15
記事番号5162へのコメント
またまた、NANAです。
同じ事でしつこく申し訳ありません。
宮城さんいつもいつもお返事ありがとうございます。

エラーの理由は理解できました。
ところでこれを、経過月数に関わらず、
書き換えずにいつでも、1年中使えるように
したいのですが、そう言うことは無理なのでしょうか?

話は全然違いますが、最近ずっと
この手の事をやり続けているので、
もう頭の中は、パニック状態です(^^;)ゞ
5170 Re:NO5022の続きです 宮城 2000/03/14-19:21
記事番号5169へのコメント
データがない月のダミーデータを追加するのが一番簡単そうです。
年月、集計対象数量ゼロとします。


5197 Re:NO5022の続きです NANA 2000/03/15-14:22
記事番号5170へのコメント
宮城さんありがとうございますm(_ _)m
やはりデータが存在しないものを印刷しようと
する事自体無理のあることなんですね。
その方法で、レポートを実現させてみます。

あともう一通り考えているものがあるのですが、
そちらの方もうまくいきそうにありません。
確認が出来次第、また登場させていただくと
思います(^^;)ゞ

いつもいつも本当にありがとうございますm(_ _)m
これからもよろしくお願いいたします。


5203 こんなのはいかがでしょう。 しましま 2000/03/15-22:25
記事番号5169へのコメント
>ところでこれを、経過月数に関わらず、
>書き換えずにいつでも、1年中使えるように
>したいのですが、そう言うことは無理なのでしょうか?
>
最近「桐ver.5」で作っている一括処理で私も似たよう状況があり、今回質問
の内容にも使えそうなので、偉そうにもアドバイス等してみたいと思います

NANAさんのやっていることとは、つまり、
基礎データの表→(転置集計)→WORK用の表 →(読込)→ 年度レポート用の表
「○○○.TBL」     「WK_数量推移.TBL」     「WK_推移.TBL」
で、要は「WK_推移.TBL」に「WK_数量推移.TBL」を読み込む処理がうまくできないということですよね。

でしたら、まず始めに作成される「WK_数量推移.TBL」の"項目名"を年度用の
「WK_推移.TBL」と必ず同じになるよう(項目数が少ない分には問題ない)に
転置集計前あるいは後に調整してから、一括処理で、

 「読み込み 表,"WK_数量推移.TBL",*」とやればいいと思います。

では、その肝心の"調整"の部分をどうやるかですが、次の2つのどちらかの方法
で解決できると思います。

 → 次のツリーにつづく...
5204 Re:こんなのはいかがでしょう(解決編)。 しましま 2000/03/15-22:28
記事番号5203へのコメント
【説 明】
 以下は"調製"部分の解決方法です(一応2通り程)。

<現 状>
NANAさんの場合、日時型の[日付]を転置項目(グループ化指定"月")にし、転置
集計後の表「WK_数量推移.TBL」を作成していると仮定します。
*−−− 解決編 −−−−−−−−−−−−−−−−−−−−−−−−−−−
<前準備> 重要!
レポートに使う年度用の「WK_推移.TBL」には予め@「WK数量推移.TBL」の転置
集計時に指定するグループ項目 A半角二桁での月名全部(04月〜03月)の項目
B合計項目 をもつ表を定義しておきます。 


<解決案1>("転置項目名用のワーク項目を予め作っておく"の巻)
1.「○○○.TBL」にあらかじめ、転置項目用のワーク項目として文字列型の
  [月]を追加し、項目計算式に、#STR(#月([日付]),2)+"月" と設定する。
  (ワーク用なので、非表示にしておくいいと思います)
2.集計したい年度のレコードを絞り込む。
3.転置集計実行時の転置項目には、[日付]ではなく、[月]を指定し実行。
   → WORK用の表「WK_数量推移.TBL」ができる。
  「WK_数量推移.TBL」の項目名には、グループ項目と該当する月のランダム
  な月数(12ヶ月以下)の項目(必ず"半角二桁の月名")ができる。
4.この時点で、一括処理で年度用の「WK_推移.TBL」を開き、
     読み込み 表 "WK_数量推移.TBL",*  
  と実行すれば、該当する月同士うまく読み込んでくれるはずです。
  (項目名のところに * を指定すると、編集対象表と同じ項目を読み込みます)


<解決案2>("転置集計後のWORK表の項目名を変更する"の巻)
1.とりあえず、転置後の表「WK_数量推移.TBL」までができているとして、転置
  後の項目名が例えば、[製品名(仮)][1999年4月][1999年10月]のようになって
  いるはずなので、以下のような一括処理を実行する。

    変数宣言{&LOOP,&項目数}
    &項目数 = #項目数
    繰り返し &LOOP=2,&項目数,1  ←("&LOOP=2"の部分はグループ項目の数+1
                      で、最初に月がくる項目番号を指定)
      &STR = #文字列(#月(#項目属性(&LOOP,1)),2)+"月"
      項目名変更 &LOOP=&STR
    繰り返し終了

2.<解決案1>の4番目と同様に、年度用の表を開き「読み込みコマンド」を実行する。

【補 足】
 ここでできたレポート表:WK_推移.TBLは、該当する月がよみこまれなかった場合、
数値部分が未定義のままなので、レポート印刷された時も未定義になってしまいます。
 もし、この未定義の部分を0として印刷したいなら、対処としてレポートのテキストオブジェクトに例えば
 #未定義値変換([04月,0]) などと指定しておけば、うまく0で印刷してくれるでしょう。
*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
以上ですが、私の場合は、<解決案1>に近いかたちの処理で対応したので、<解決案2>
は動作未確認です(たぶん問題ないでしょう (^^)V たぶん...)。
ちなみに私の場合、WORK用の表はあくまで一時ファイルであり、後でファイル管理の邪魔
になるので、帳票印刷の後すぐに「ファイル削除 "WORK.*"」で消してしまい、最終的に
できる帳票印刷(レポート)用の表は、年度一覧としてデータがすぐに使いまわせるので
あえて残しています。

 → 次のツリーにまだつづく...
5205 Re:こんなのはいかがでしょう(発展編)。 しましま 2000/03/15-22:31
記事番号5204へのコメント
*−−− さらに発展編 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−
NANAさんの現状の方法だと、【基礎表→WORK表→レポート表】の用に別名の表としていたの
で、それにあわせて解決方法を書きましたが、もし「WORK表」があくまで「レポート表」を
作成するためだけのものならば、転置後の表は「WORK表」として保存しない方がいいと思います。

具体的には、「基礎表」からの転置集計時に"表番号"を指定しておき、「レポート表」に読み込む時も、
表名の代わりに表番号で実行し、印刷後はすぐに破棄終了させた方がモアスマートだと思います。

さらに言えば、今回のように[グループ項目名][12ヶ月分の項目名][月の合計項目]で構成し、
この場面以外使わない構成の年度表ならば、「レポート表」自体も用意しないやり方もありだと思います。
方法としては、
1.<解決案2>の記述の「繰り返しコマンド」内に、項目名変換した月を12個格納できる配列
  変数に変換した項目月名の月の数字を格納する一括処理を追加する。
2.次に、<解決案2>の「繰り返し終了コマンド」のあとにもう一度「繰り返しコマンド(今度
  は12回ループさせる)」記述。
  中の処理には、&配列変数[&LOOP]=#未定義 の場合に、足りない月の項目を「項目属性変更
  コマンド(追加)」と&LOOPを使い、未定義の"月項目"を再定義していく。
3.「2.」のループを抜けたら、最後に、年度合計や平均など必要な項目を項目計算式と共に
  必要なだけ「項目属性変更コマンド(追加)」で、やはり再定義する。
4.レポート印刷を行い、その後、転置集計で作成された一時ファイルとして破棄終了させれば
  印刷のために不要なファイルができないので、ベストスマートではないでしょうか。)^o^( 
(ただしレポート再定義時には試行のため必要なのでそのときは保存するよう一括処理を一部
 書き換えて対処する)


最後の方では、ちょっとやりすぎだと思うけどあくまで案として...
やっぱり余計な表ファイルが増えない方がいいでしょう。('-')(,_,)ウンウン(笑)
*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
さすがに書き疲れたので、おしまい。

5213 Re:こんなのはいかがでしょう(訂正編?)。 しましま 2000/03/16-02:04
記事番号5205へのコメント
【解決編】と【発展編】にそれぞれ記述ミスがあったので、訂正しておきます。

・【解決編】
 <解決案2>の一括処理で、&LOOP の終了値を設定するところで、
>    &項目数 = #項目数
 と書きましたが、転置集計後の表の最終項目には[合計]があるので、正しくは
    &項目数 = #項目数−1
 です。これにより、転置後の年月の項目名がいくつであっても、OKのはずです。
*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

・【発展編】
後半のベストスマートの方法として書かれている
>1.<解決案2>の記述の「繰り返しコマンド」内に、項目名変換した月を12個格納できる配列
>  変数に変換した項目月名の月の数字を格納する一括処理を追加する。
は、正しくは

1.<解決案2>に記述されている「繰り返しコマンド」内に、「"12個格納できる配列変数"へ項目
  名変更した該当月の項目名を格納していく内容の一括処理」を追記する。

です。(まだややこしいかな?)
*−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
こんどこそ本当に、おしまい。\(__ )
5221 Re:こんなのはいかがでしょう(訂正編?)。 NANA 2000/03/16-13:45
記事番号5213へのコメント
NANAですm(_ _)m お礼が遅れてしまってすみません。
しましまさん、本当にありがとうございます。
しましまさんの記述の解決案1を使わせていただきましたm(_ _)m

私も前回記述した方法以外にも考えていたのですが、
ただレポートを印刷するときにやはり「未定義の項目があります」
と言うエラーが返されてしまって、息詰まっていました。

しかし、しましまさんの解決案1により、
見事に綺麗なレポートが完成いたしました(^_^)v
ここまで綺麗に仕上がるなんて、一週間前の私には
想像も出来なかったことです(^^;)ゞ

しましまさん、宮城さん、本当に本当に
ありがとうございました。

まだまだ初心者のNANAですが、これからも
努力していきたいと思いますので、
ご支援下さいますよう、お願い申し上げますm(_ _)m


戻る