初心者のFileMaker pro Q&A

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。

何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

ログインしていません。

アナウンス


#1 2019-04-24 11:43:25

bzlivegym
メンバー

別テーブルのレコードの集計

表題の件ですが、イメージができず実装できないのでご相談です。
現在2つのテーブルが存在
①データ蓄積
②データ分析
それぞれのテーブルには以下のフィールドが存在
1、主キー
2、日付(日付、②はグローバル)
3、会社名(テキスト、②はグローバル)
4、部署(テキスト、②はグローバル)
データ分析フィールドには追加でもう1フィールド
5、集計(計算)
◆この時、データ分析テーブルでグローバルフィールドの値を変更した時にデータ蓄積テーブルで
一致したレコード数を表示したい
リレーションは日付と会社名と部署の3つを=で接続
集計フィールドは【Count(データ蓄積::主キー)】で設定
結果、日付と会社名と部署の3つ全てを埋めると正しい数が返ってきますが、今回はここから
・日付と部署だけを指定した時のレコード数
・会社名と部署だけを指定した時のレコード数
・会社名のみ指定した時のレコード数
といったように、リレーションを組んだフィールドの1つないし2つが空欄の時でも、残りのリレーションフィールドが
一致しているレコードをカウントしたいです。
日付<=日付
日付>=日付
など試しましたがどうしてもうまくいきません。
どうにか表示させる方法はありますでしょうか??よろしくお願いいたします・・・。

オフライン

#2 2019-04-24 13:10:25

Hiro
メンバー

Re: 別テーブルのレコードの集計

アイデアですが、

  1. ①にカウント集計フィールドを作り、
    全件ヒットする[X]ポータルに条件計算式で動的ポータルフィルターを掛け、
    先の①集計フィールドを上の1行ポータル内で参照する。
    フィルターの条件式は考えてみてください。
       

  2. ExecuteSQL関数で、直接算出する方法。
    必要な集計条件のSQL構文をテキスト計算式で生成し、算出する。
    SQL構文計算式は考えてみてください。
       

  3. 必要な照合条件の静的リレーションをすべて組み、
    Case関数で条件判別の適合リレーション集計式で算出する。
    Case式は考えてみてください。

編集者 Hiro (2019-04-24 13:42:14)

オフライン

#3 2019-04-24 13:26:40

チポ
メンバー

Re: 別テーブルのレコードの集計

適当なフィールドで「X」のリレーションをします。
仮に、このときのTOをデータ蓄積2とします。

会社名で考えると、
データ分析テーブルで
もう一つ計算フィールドを作り、
  Case ( IsEmpty ( データ分析::会社名 ) ; List ( データ蓄積2::会社名 ) ; データ分析::会社名 )
としてこのフィールドを会社名に変えて照合します。

他のフィールドも同様ですが、
日付は、テキストとなってしまいますので、繰り返しにするとかの工夫が必要でしょう。

オフライン

#4 2019-04-24 14:09:44

Shin
メンバー

Re: 別テーブルのレコードの集計

データ蓄積側のテーブルに、計算フィールドを追加します。例えば、会社名に対して、会社名_(List ( "*" ;  会社名))を作ります。
テーブル集計側からは、そのフィールドにリレーションを張り、空白の時には、"*" を設定します。
チポさんの指摘もあるように、日付フィールドについては、テキストに変換されるので、その書式でトラブルになる事があります。(システムの設定で、2019/3/1 が、"2019/3/1","2019/03/01","2019/3/01"になりえます。テキストですと、異なる値です)

オフライン

#5 2019-04-25 05:24:00

Hiro
メンバー

Re: 別テーブルのレコードの集計

>#2の3つの提案で、一番安直なNo.2案のSQL集計計算の式例を記すと、
(※ このSQL関数式だけで、他に何の要素も必要としません。)

Let(
[
   #SQL=
      "
      SELECT COUNT(*)
      FROM ""データ蓄積""
      WHERE "
      &
      Substitute(
         List(
            Choose(IsEmpty(g日付); """日付""='"& g日付+0 &"'");
            Choose(IsEmpty(g部署); """部署""='"& g部署 &"'");
            Choose(IsEmpty(g会社名); """会社名""='"& g会社名 &"'")
            )
         ; [¶;" AND "]
      )
];
   ExecuteSQL(#SQL; ""; "")
)

オフライン

クィック投稿

メッセージを書いて送信してください。
登録の確認

実在の人物による登録であることを確認します。

Board footer