みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
表題の件ですが、イメージができず実装できないのでご相談です。
現在2つのテーブルが存在
①データ蓄積
②データ分析
それぞれのテーブルには以下のフィールドが存在
1、主キー
2、日付(日付、②はグローバル)
3、会社名(テキスト、②はグローバル)
4、部署(テキスト、②はグローバル)
データ分析フィールドには追加でもう1フィールド
5、集計(計算)
◆この時、データ分析テーブルでグローバルフィールドの値を変更した時にデータ蓄積テーブルで
一致したレコード数を表示したい
リレーションは日付と会社名と部署の3つを=で接続
集計フィールドは【Count(データ蓄積::主キー)】で設定
結果、日付と会社名と部署の3つ全てを埋めると正しい数が返ってきますが、今回はここから
・日付と部署だけを指定した時のレコード数
・会社名と部署だけを指定した時のレコード数
・会社名のみ指定した時のレコード数
といったように、リレーションを組んだフィールドの1つないし2つが空欄の時でも、残りのリレーションフィールドが
一致しているレコードをカウントしたいです。
日付<=日付
日付>=日付
など試しましたがどうしてもうまくいきません。
どうにか表示させる方法はありますでしょうか??よろしくお願いいたします・・・。
Offline
アイデアですが、
①にカウント集計フィールドを作り、
全件ヒットする[X]ポータルに条件計算式で動的ポータルフィルターを掛け、
先の①集計フィールドを上の1行ポータル内で参照する。
フィルターの条件式は考えてみてください。
ExecuteSQL関数で、直接算出する方法。
必要な集計条件のSQL構文をテキスト計算式で生成し、算出する。
SQL構文計算式は考えてみてください。
必要な照合条件の静的リレーションをすべて組み、
Case関数で条件判別の適合リレーション集計式で算出する。
Case式は考えてみてください。
Last edited by Hiro (2019-04-24 13:42:14)
Offline
適当なフィールドで「X」のリレーションをします。
仮に、このときのTOをデータ蓄積2とします。
会社名で考えると、
データ分析テーブルで
もう一つ計算フィールドを作り、
Case ( IsEmpty ( データ分析::会社名 ) ; List ( データ蓄積2::会社名 ) ; データ分析::会社名 )
としてこのフィールドを会社名に変えて照合します。
他のフィールドも同様ですが、
日付は、テキストとなってしまいますので、繰り返しにするとかの工夫が必要でしょう。
Offline
データ蓄積側のテーブルに、計算フィールドを追加します。例えば、会社名に対して、会社名_(List ( "*" ; 会社名))を作ります。
テーブル集計側からは、そのフィールドにリレーションを張り、空白の時には、"*" を設定します。
チポさんの指摘もあるように、日付フィールドについては、テキストに変換されるので、その書式でトラブルになる事があります。(システムの設定で、2019/3/1 が、"2019/3/1","2019/03/01","2019/3/01"になりえます。テキストですと、異なる値です)
Offline
>#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; ""; "")
)
Offline
Pages: 1
[ Generated in 0.008 seconds, 7 queries executed - Memory usage: 512.89 KiB (Peak: 517.43 KiB) ]