過去の桐井戸端BBS (桐ver.8)
12654 書き出ししながら文字置換? ひろこ 2001/08/18-08:50
2ヶ月前に桐を使い出し今部内のDB構築に一生懸命精を出しています。
いろんな制約と戦いながら?進めているのですが、また壁にぶつかってしまいました(--;;;

現在成績書を作っているフォルダが数十個あります。
それらのTBLから、日付で数量を月別集計し別フォルダに書き出すという作業を
また別フォルダのイベント処理を使い転置集計し書き出しします。

表 "○1.tbl"
条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
転置集計 条件名="転置集計01"
書き出し 表"○2",{[日付],[品名],[数量]}
条件 (#文字置換([日付],"1月","01月")) ←ここが?
中止 表
終了 表

最終的に結合表でTBLの種別に分けて確認してもらったり印刷が出来るようにしたいと思っています。

問題は、[日付]の部分を月のグループ化にしてあるため転置集計すると文字列型になってしまう
(それは良いのですが)結合表にて変数パラメーターに「年別:文字列」「月別:文字列」
日付の項目絞込み条件に「&年別 * .and * &月別」としています。
この時「*&月別」(末尾一致)としてある為1月と入力すると11月の分のデータまで
一緒に絞り込まれますよね。
それを避ける為上記の書き出しした表にて1月を01月としたいのですが、さっぱり???です。
どのようにしたらよいのでしょうか。

というか、、、根本的に考え方間違ってるのかな?とも思いますが、、
TBLが数百個あって月ごとに集計を出したい、なおかつ他のコマンドボタン等使っているので
一括処理を使わずイベント処理だけで進めていきたいと思ってます。←無謀かな??
説明が悪いかもしれませんが、だれか、、、、たすけて、、、って感じです。ごめんなさい。
12656 Re:書き出ししながら文字置換? 佐田 守弘 2001/08/18-16:23
記事番号12654へのコメント
ひろこさん
書かれている内容からだけでは、状況が今一つ分かりませんので外しているかも知れません。
そして最も重要な[日付]のデータ型ですが、主旨からすると、文字列型の様に見受けます。
(日時型であればこの種の質問は発生しないはず)

そして、少なくとも、
 >条件 (#文字置換([日付],"1月","01月")) ←ここが?
は、文法エラーです。
多分、日付が1月のデータを選び出して、01月に書き替えたい様ですが、そうであればコマンドが違います。
ここは、単に
 (#文字置換([日付],"1月","01月"))
で良いはずです。

なお、日付に文字列型を使う場合、月の数字を2桁に設定する方法があったはずです。
また、日時型を使えば、この様な問題は根本的に発生しません。

佐田守弘(KS-00119)
12659 Re:書き出ししながら文字置換? ひろこ 2001/08/18-17:55
記事番号12656へのコメント
こんにちは、佐田先生。お返事ありがとうございます。

そうです。データ型は文字列です。
(というか元TBLの項目は日時型ですがグループ化で転置集計した時点で文字列型に変わってしまうのです)

> >条件 (#文字置換([日付],"1月","01月")) ←ここが?
>は、文法エラーです。

文法エラーはわかっていましたがニュアンス的にわかっていただけるようあえて残しておきました。

ちなみに

> (#文字置換([日付],"1月","01月"))

と記述するとフォームを編集状態にしようとした時に「コマンドが違います」となります。

>なお、日付に文字列型を使う場合、月の数字を2桁に設定する方法があったはずです。

それは私にはわからないです。ごめんなさい。

もう一度順を追って説明しますと、

Aフォームにコマンドボタン「集計」を作ってあります。
「集計」ボタン左クリックにてイベントを発生させ先程記述したように
B.tblの「日付」「品名」「数量」項目を転置集計しC.tblに書き出します。
書き出す時に(もうすでに文字列型になってます)"01年1月"となってしまうのを、"01年01月"となるようにしたいのです。

>また、日時型を使えば、この様な問題は根本的に発生しません。

1度書き出した後にイベントの記述にて文字列型を日時型に変更しては?(イベントにて)
とも思いましたがその後結合表にて絞込みをかける時にやっかいそうだったのでやめました。
(日まで勝手に入力されてしまう為?。月迄で止めておきたいのです。)
あんど、コマンド「項目属性変更」がうまく出来なかったのもありますが...

再度お教え願えますか?

12661 Re:書き出ししながら文字置換? toshi-chan 2001/08/18-20:43
記事番号12654へのコメント
ひろこさん、佐田さん、こんばんは。
今朝質問を読みましたが、いまいち内容がわからずにいました。
私は結合表やパラメータ変数には詳しくないのですが、感じたことを書きます。

1.絞り込みの方法
>この時「*&月別」(末尾一致)としてある為1月と入力すると11月の分のデータまで一緒に絞り込まれ
>ますよね。

仮に1月を01月としても、末尾一致で絞り込むと、01月と11月の両方を絞り込むはずです。
だって、末尾が一致しているわけですから。
それとも、月の入力の際に「01」と入力する考えなのでしょうか。
ここは項目[日付]で絞り込むときに、式を
    #月([] )=1
とすれば1月のみが絞り込まれるはずです。

2.別解
転置集計のときにグループ化しているのでこのような問題が発生します。月でグループ化しないで転置集計するのも一法かと思います。
その後
(1) 転置集計表に対して行集計(月でグループ化する)を実行する。
(2) 転置集計表を月で絞り込んでから行集計を実行する。
のいずれかの操作を行えば何とかなるような気がしますが。
12664 Re:書き出ししながら文字置換? KH 2001/08/19-08:07
記事番号12654へのコメント
>表 "○1.tbl"
>条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
>転置集計 条件名="転置集計01"
>書き出し 表"○2",{[日付],[品名],[数量]}
>条件 (#文字置換([日付],"1月","01月")) ←ここが?
>中止 表
>終了 表

 よく理解できないでコメントしますが、佐田先生のコメントにもありますが、絞り込みをしている様子が無いのですが、
1月に絞り込まないと、#文字置換([日付],"1月","01月")で、1月は01月になりますが、11月は101月になってしまいます。

上記の部分だけを修正するとすれば、以下のような方法もあるかと思います。

転置集計の条件があるので、試していません。止まったらごめんなさい。単純なコマンド
ミスがあったらHelp見て直してください。

>表 "○1.tbl"
> 条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
> 転置集計 条件名="転置集計01"
> 書き出し 表"○2",{[日付],[品名],[数量]}
表 "〇2"
絞り込み [日付]="1月"
置換 表,確認=しない,[日付]=#文字置換([日付],"1月","01月")
絞り込み解除
終了 表

12665 Re:書き出ししながら文字置換?(見難いので再度) KH 2001/08/19-08:15
記事番号12664へのコメント
投稿してから見てみると分かり難かったので、再度訂正部分のみ投稿します。
以下では如何でしょう(おやじギャグ)

表 "○1.tbl"
  条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
  転置集計 条件名="転置集計01"
  書き出し 表"○2",{[日付],[品名],[数量]}
  表 "〇2"
    絞り込み [日付]="1月"
        置換 表,確認=しない,[日付]=#文字置換([日付],"1月","01月")
    絞り込み解除
終了 表


12666 Re:書き出ししながら文字置換?(見難いので再度) ひろこ 2001/08/19-14:40
記事番号12665へのコメント
KHさん、toshi-chanさん、こんにちは。コメントありがとうございました。

toshi-chanさん。#月([] )=1のように関数を使って絞込みをかける方法ですが、ごめんなさい。
イマイチ方法がよく解らないです。絞込みをかけたいのは結合表を開くときなのでパラメーター変数を使って
最初に会話式で任意の年、月を使用する人に入力していただきたいのです。

>仮に1月を01月としても、末尾一致で絞り込むと、01月と11月の両方を絞り込むはずです。だって、末
>尾が一致しているわけですから。それとも、月の入力の際に「01」と入力する考えなのでしょうか。

その為
変数名 データ型 ガイド文字列
「年別 文字列 年を半角で入力してください(例)2001年=01」
「月別 文字列 月を半角で入力してください(例)1月=01月」
というようなパラメーター変数を用意し、使用者に年月を入力してもらいます。

行集計は書き出し方法がよく解らないのであまり使用していません。

今回はKHさんの記述を参考にさせていただきました。
基本的に書き出した後では表が二つ開いてる状態になっているので?←ですよね?
置換コマンドを書き出しの後ではなく前に持ってくることでうまく出来ました。(転置集計された表にて置換)
置換コマンドを使えばよかったのですね(^^;;;
てっきり文字列置換・・・・とか文字列を何とかしなければという思い込みですごく時間をかけていたようです。
絞込みをかけるのはやめて置換でもう一度11月が101月になってしまうのを訂正するようにしました。

>表 "○1.tbl"
>  条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
>  転置集計 条件名="転置集計01"
>  書き出し 表"○2",{[日付],[品名],[数量]}
>  表 "〇2"
>    絞り込み [日付]="1月"
>        置換 表,確認=しない,[日付]=#文字置換([日付],"1月","01月")
>    絞り込み解除
>終了 表
>
>
表 "○1.tbl"
  条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
  転置集計 条件名="転置集計01"
  置換 [日付]=#文字置換([],"1月","01月"),[日付]=#文字置換([],"2月","02月"),[日付]=#文字置換([],"3月","03月"),\
      [日付]=#文字置換([],"4月","04月"),[日付]=#文字置換([],"5月","05月"),[日付]=#文字置換([],"6月","06月"),\
      [日付]=#文字置換([],"7月","07月"),[日付]=#文字置換([],"8月","08月"),[日付]=#文字置換([],"9月","09月"),\
      [日付]=#文字置換([],"101月","11月"),[日付]=#文字置換([],"102月","12月")
  書き出し 表"○2.tbl",{[日付],[品名],[数量]}
 中止 表
終了 表

ありがとうございました。
やはりみなさんの知恵をお借りすると、こんなに早く問題が解決するものなのですね(^O^)/
また、解らない事がありましたら(今すでにあるのですが-_-;;;)ここに、こさせてもらう事になると思います。
その時は、また宜しくお願いします。
12672 Re:上手く行って何よりですが KH 2001/08/19-22:02
記事番号12666へのコメント
 上手く行って何よりですが、正攻法ではtoshi-chanさん佐多先生の仰られる方法だと思います。
桐は何でも出来ちゃう反面、システムが大きくなっていくとデータベースの正しい設計がしていないがために変更が大変になります。
これ私の失敗談です。現在も苦慮している部分が沢山あります。

>基本的に書き出した後では表が二つ開いてる状態になっているので?←ですよね?
>置換コマンドを書き出しの後ではなく前に持ってくることでうまく出来ました。(転置集計された表にて置換)

 うーん、書き出しコマンドで書き出した場合、書き出した表は開いていないはずですが?新たに書き出した表を開かなければ処理できないはずですが。
多分、転置集計された作業表(この場合新しく開いているはず、ファイル名を見れば$だったかな(?)がついてすぐ分かります)を
書き出し表と間違えているのではないでしょうか。文面からするとこの場合は同じになっているようですから。違ってましたか?

 上手く行ったからいいような話なのですが、作業表の上で作業する事(あまり出来なかったような気がしましたが?
自分がすぐ書き出してしまいすぐ転置集計を閉じるからかな?)は、多分とても怖い事だと思います。
もし、ハングアップしたらと考えておいた方が良いと思います。仕事上使われると思いますので、
桐を知らない人は何をするか分からない考えておいた方が良いと思っています。

 ついつい余計な話をしてしまいましたが、私の勘違いだったら、年寄りのいらぬお節介と聞き流してください。
 
12674 Re:書き出ししながら文字置換?(見難いので再度) toshi-chan 2001/08/19-23:36
記事番号12666へのコメント
ひろこ さん、再びこんばんは。
私もサンプルファイルを作ってパラメータ変数なるものを初めて使ってみました。

結合表定義画面で項目[日付]の絞り込み条件に
 #月( [日付] )=&月別
と設定してみました。1月のデータがほしいときはパラメータ変数「&月別」に1を代入することでうまくいきました。ひろこさんのお望みどおりにするには、式を
  #年( [日付] )=&年別,#月( [日付] )=&月別
とすればOKです。表ファイルでの絞り込み方法と同じですね。

すでにイベントにて解決したようですが、もしこのコメントをご覧でしたら試してみてください。
おかげさまで、私もパラメータ変数の使い方がわかりました。今まで知らなかったもので・・・・(*^_^*)
12684 Re: ひろこ 2001/08/20-10:55
記事番号12672へのコメント
こんにちは。ひろこです。

KHさんは No.12672「Re:上手く行って何よりですが」で書きました。
> 上手く行って何よりですが、正攻法ではtoshi-chanさん佐多先生の仰られる方法だと思います。
>桐は何でも出来ちゃう反面、システムが大きくなっていくとデータベースの正しい設計がしていないがため
>に変更が大変になります。

よく自分に思い知らせられます。今後も多々出てくる事なのでしょうね。

> うーん、書き出しコマンドで書き出した場合、書き出した表は開いていないはずですが?新たに書き出した
>表を開かなければ処理できないはずですが。

そうなんですか?書き出しコマンドの後の置換は何で出来なかったんでしょうね。

>多分、転置集計された作業表(この場合新しく開いているはず、ファイル名を見れば$だったかな(?)がつい
>てすぐ分かります)を書き出し表と間違えているのではないでしょうか。

それはないと自分では思っていますが、、、、
表の履歴を作ってから作成した物ですから、何か手順がおかしかったのでしょうか?

確かにうまくいったから良かったようなものですね。
でもそれではいけないんじゃないかと自分なりに考えてはいます。
せいぜいバックアップをこまめに取る事位しか思いつかないのですが(^^;;

本当に桐はいろんな作り方が出来てしまう物だと皆さんの意見や事例を見ていて思いました。
最良な方法というのは何なんだろう?という自分への克服課題が増えてしまったようです(^_^)

> ついつい余計な話をしてしまいましたが、私の勘違いだったら、年寄りのいらぬお節介と聞き流してください。

いえいえ、、有り難うございました。そう言ってくれる人って大事ですよね。

toshi-chanさん、御自分でサンプルファイルまで作って試して頂き有り難うございました。
#年([])=&年別,#月([])=&月別
としたら、ばっちりでした。
これならイベントにて置換しなくても良くなりましたね。
皆さん本当に有り難うございました。
12685 Re:結合表グループ化 HERB 2001/08/20-11:20
記事番号12666へのコメント
HERBです。

コメントを読んで別のやり方もありかなと思い投稿しました。

目的は月ごとの集計ですね。

元データ「日付」のデータ型は「日時」ですね。

転置集計すると日時データが文字列となる。

結合表、パラメータ変数で該当月を絞り込む。

元表を仮に「A.tbl」とする。

項目は「日付」「品名」「数量」

結合表「A.viw」を作成、対象表は「A.tbl」

所属対象表を計算項目とする。

計算項目式に#年(["A.tbl".日付])データ型は数値となります。

同じように#月関数で日付データから月数を数値化する。

表示項目名は任意に入力できますのでそれぞれ「年」「月」とする

「品名」はそのまま所属対象表を「A.tbl」項目を「品名」選択。

数量は同じく計算項目にし、計算式には#合計(["A.tbl".数量])
とする、元データ数量は数値型データであればデータ型は数値となるはずです、
計算項目を選択すると計算式の応じてデータ型は任意に設定できます。

属性、グループ化の順にクリックすると定義画面グループ選択に□マークがでます、
年、月、品名にチェックを入れる。

パラメータ変数を年と月に設定する、このとき変数のデータ型は数値としてください。

編集へのアイコンをクリックし、年と月を入力、該当月、品名ごとの合計数量が集計されるはずです。

結合表でも転置集計はできます、年と月は数値型項目ですので集計後文字列になることもありません、
結合表の使用法の一つです試してみてください。

12701 Re:Re:自己レスです HERB 2001/08/21-09:41
記事番号12685へのコメント
>パラメータ変数を年と月に設定する、このとき変数のデータ型は数
>値としてください。

絞り込みに変数を指定しなければいけませんね、忘れていました。

パラメータ変数名を絞り込みにそれぞれ設定してください。

戻る