13 返信 最新の回答 日時: Mar 31, 2016 6:44 PM ユーザー:system7

    1ヶ月間の契約成立をカウントしたい

    system7

      1ヶ月間の(営業数の)集計方法は、ここのDiscussionを通じて解決しました。

      (前回の投稿「1ヶ月間の集計をしたいhttps://community.filemaker.com/thread/154192

      これを前提として、1ヶ月間のさらに契約成立した数をカウントしたいのですがどのようにすればよいでしょうか。

      成立したかどうかは「ドロップダウンリスト」で『成立』『不成立』『回答待』『予約済』などとして定型の単語が必ず入るように入力しています。

       

      FileMakerPro11(.fm7)です。

        • 1. Re: 1ヶ月間の契約成立をカウントしたい
          user14047

          hajimeさんが作られたサンプルを基にするのなら、こんな感じでしょうか?

          新たに、"成立" という文字列が入るグローバルフィールド*と契約成立のカウントのためのリレーションシップを追加してみてください。

          *ファイルを共有して使う場合には注意が必要です。最後にローカルで閉じた時の値が保存されます。もし、回答待とか他の集計をしなくてもいいのであれば、計算フィールドにして、="成立" 結果はテキストとした方が安全かもしれません

           

          sample01.png

          sample02.png

           

          無料で始められる FileMaker : 公式トレーニングカリキュラム FileMaker Training Series 基礎編や、有償ですが FileMaker Drill Book などで基本事項を整理されることから始められた方が、この先が楽になるかと思います。

          その他にも、FileMaker : トレーニング のページには、動画で学べる 録画Webセミナー や、FileMaker 関数・スクリプト ビギナーズガイド などの紹介がありますので一度覗いてみてください。

          • 2. Re: 1ヶ月間の契約成立をカウントしたい
            system7

            user14047様

            回答ありがとうございます。

            ご教示いただいたとおり、作成しましたら一応はできたのですが空欄以外全てカウントされてしまい、『成立』のみのカウントができません。

            この場合、計算式の指定のところで「Count( 集計サンプル_訪問履歴#契約::訪問日時; "成立" )」として囲って見ましたが上手くいかず。。。

            計算フィールドで数字からテキストに変更するも、全てカウントされてしまいます。

            どのようにドロップダウンリストの特定の単語をカウントするのでしょうか。

             

            (カリキュラムなど情報ありがとうございます。同時に読んでみます。)

            • 3. Re: 1ヶ月間の契約成立をカウントしたい
              user14047

              関連レコードの数をカウントしたいわけですから、この場合は Count 関数の中は関連レコードのリレーションキーだけを指定してください。Count( 集計サンプル_訪問履歴#契約::訪問日時; "成立" ) の "成立" が余分です。

              FileMaker Pro 14 ヘルプ : Count

               

              集計サンプル_訪問履歴#契約 のリレーションシップに "成立" の文字の入ったフィールド同士が = で結ばれている条件が入っていれば、 指定された期間の成立したレコードだけが関連レコードになります。

              Count 関数を使う前に、リレーションシップが正しいかレイアウト上にポータルを置いてみると理解し易いかと思います。

              • 4. Re: 1ヶ月間の契約成立をカウントしたい
                system7

                度々済みません

                「関連レコードの数をカウント」したいわけではなく、その中の「成立」のみをカウントしたいと思っています。

                (「; "成立"」を削除しましたが、やはり上手くいかず、空欄以外(成立、不成立など全て)をカウントしています。)

                user14047 による書き込み:

                 

                集計サンプル_訪問履歴#契約 のリレーションシップに "成立" の文字の入ったフィールド同士が = で結ばれている条件

                 

                ここの意味がいまいち理解できていません。二つのテーブルの各フィールドまでしか選択できないので"成立"の文字の入ったフィールドをどうやって特定して=で結ぶのかが分かりません(リレーションでは=で結んでいます)。

                 

                思ったのですが、当方一つのフィールドに「ドロップダウンリスト」で「成立」「不成立」など結果表示しているので、もしかしたら、あるレコードに単に不成立と表示してあっても「ドロップダウンリスト」の内にある「成立」がカウントされてしまっているのでしょうか。それにより、空欄以外の値がカウントされるという結果になっているのでしょうか。

                • 5. Re: 1ヶ月間の契約成立をカウントしたい
                  user14047

                  前回の図に赤丸を足してみました。この図で分かりますでしょうか?

                  期間のカウント用とは別のテーブルオカレンスを作ってください。

                   

                  この状態だと、集計サンプルの [g契約] フィールドに "成立" と入っていると [訪問履歴] テーブルの [契約] フィールドに "成立" と入っていて且つ訪問日時が指定された期間のレコードだけが関連レコードになりますので、その関連レコード数が求めたい値になるかと思います。

                   

                  sample02.png

                  • 6. Re: 1ヶ月間の契約成立をカウントしたい
                    system7

                    user14047様

                    ありがとうございます。

                    一旦リレーションを削除して再度作り直したところ、カウントすらされなくなってしまいました

                    2点気になる点があります

                    1点目

                    user14047様のリレーション画面をみるとテーブル名に「〜#期間」「〜#成立」と名前が違います。

                    これは先に「訪問履歴」テーブルを新規で追加し、「集計サンプル」とリレーションしてますか?

                    それとも元ある「〜#期間」を複製し名前を変えてリレーションしてますか?

                    2点目

                    また、新規で「〜#成立」テーブルを作ったら、フィールドタブの「計算式の設定」で「非関連テーブル」として計算式に入力できない状態になりました。

                    手順として、先ずはテーブルをリレーションしてから、計算式に組み込むという順番があるのでしょうか。

                    • 7. Re: 1ヶ月間の契約成立をカウントしたい
                      user14047
                      • 1点目
                        同じ名前のテーブルオカレンスは作れませんので、名前を変えればどういう名前でも構いません。
                        ただ、「訪問履歴 2」だと何のためのどういう機能のテーブルオカレンスかわからなくなるので、後でわかり易くなるように名前にしています。この場合、
                        「起点となるテーブル名_それにぶら下がるテーブル名#機能」
                        みたいな命名規則にしていますFTS 応用編 だとこういった命名規則になっているものが多いです)ので、図の青いテーブルオカレンスのソーステーブルは「訪問履歴」です。
                        テーブルオカレンスを複製しても引き継がれるのはソーステーブルの情報くらいなので、大元の「訪問履歴」を複製しても、「集計サンプル_訪問履歴#期間」を複製しても一緒ですよ。
                        後者の方がリネームの手間がちょっとだけ省けるくらいしか違いはありません。
                        新規で AddTable.png ボタンをクリックして [テーブルを指定] でも同じです。
                      • 2点目
                        きちんとリレーションが組まれていないと、[非関連テーブル] として計算式中では利用できません。
                        ですから、先にリレーションを作成してください。
                        作ってしまったフィールドは後から計算式の変更ができますので削除してもしなくてもいいです。

                       

                      # テーブルオカレンスについては、FTS 基礎編 の レッスン 8: リレーションシップ からが参考になるかと思います。

                      • 8. Re: 1ヶ月間の契約成立をカウントしたい
                        system7

                        アドバイスありがとうございます

                        先にテーブルを「集計サンプル_訪問履歴」を複製し、リレーションしたところ、カウントされるようになりました。

                        ただ、相変わらず全数がカウントされています。

                         

                        挙動として、新規で「集計サンプル_訪問履歴#成立」を作成してリレーションを組んでも、テーブルを複製してリレーションを組でも、「フィールド」の「成立数」の計算式のところで、新規作成した、もしくは、複製したテーブルを組み込むと反映されない(値を返さず空欄になる)。

                        計算式のところで、わざと元「集計サンプル_訪問履歴」を組み込むと、ちゃんと反映されるが全数カウントされるというところまでか分かりました。

                        何が原因なのでしょう。チェックポイントはどこにあるのでしょうか

                        • 9. Re: 1ヶ月間の契約成立をカウントしたい
                          user14047
                          チェックポイントはただ一点。正しいリレーションがどうかです。


                          「集計サンプル」テーブルを基にしたレイアウト上にポータルを置いて、リレーションが正しいか確認してみてください。

                          • 10. Re: 1ヶ月間の契約成立をカウントしたい
                            system7

                            user14047様

                            ありがとうございます

                             

                            結果から言うと、PatternCountとList関数で解決しました

                            以下のようにしました

                             

                            1. 先ずはリレーションで新規(複製)「集計サンプル_訪問履歴」テーブルを作成し、リレーションの編集も「集計開始日」「集計終了日」「成立」を作っていきます(ここまでは一緒)
                            2. 集計フィールドの「集計サンプル」の「成立」ではタイプを「計算」に「計算式の指定」では「計算結果」を「テキスト」として以下の計算式を記入[PatternCount ( List ( 集計サンプル_訪問履歴::訪問日時 ) ; "成立" )
                            3. 「成立」フィールドをレイアウトに挿入して
                            4. 完成

                             

                            注意なのは2番目で新たに作成・追加したテーブルを計算式に組み込むのではなく、元「集計サンプル_訪問履歴」テーブルを計算式に入れるということです

                             

                            user14047様にはいろいろアドバイス頂きましてありがとうございます

                            なぜ、計算式に元テーブルを入れると、正確なカウントができるのか未だ不明ですが、契約「成立」のテーブルを作ってからリレーションし、計算式を組んでいくという流れが分かりました

                            ありがとうございました

                            • 11. Re: 1ヶ月間の契約成立をカウントしたい
                              user14047

                              PatternCount ( リストされた文字列 ; "成立"  ) だと、"不成立" もカウントしちゃいませんか?

                              • 12. Re: 1ヶ月間の契約成立をカウントしたい
                                system7

                                user14047様

                                確かに…そこまでチェックしてませんでした

                                PatternCount使えないっすね…

                                元に戻しました

                                で、リレーションの各テーブルの位置が左右逆だからかなと予想立てましたが、それ関係無いようですね

                                また、ファイルありがとうございます

                                参考にさせて頂きます

                                • 13. Re: 1ヶ月間の契約成立をカウントしたい
                                  system7

                                  user14047様

                                  ありがとうございます!!!!

                                  できました!!

                                  当方途中、触りすぎで何が何だか分からなくなり、参照元データにも触ってしまい訳が分からなくなりまして…。

                                  で、バックアップから再度1からつくりなおしたところ、どうも「フィールドの計算式」のところで、「Count( 集計サンプル_訪問履歴#契約::訪問日時)」としなければならないところを「Count( 集計サンプル_訪問履歴#契約::契約)」としてしている事に気がつき、それが原因で反映されない状態となっていました。

                                  また、頂いたサンプルファイルを参照していて、ポップアップメニューで『「成立」「不成立」「回答待」を入力する機能いいなぁ。使いたいなぁ。』と思い、導入しました

                                   

                                  作り直したとき、リレーションとフィールドの計算式との関係において、リレーションは元フィールドが無いとリレーション組めないし、フィールドの計算式は関連テーブルが無いとCount関数入力できないしと、相変わらず理解が足りず戸惑うところがありましたが、一旦無関係の計算式でフィールドを作り、リレーション組んでからフィールドの計算式を正しいCount関数に修正するという手法でクリアしました。

                                   

                                  なにわともあれ、丁寧にご教示頂き、本当にありがとうございました