初心者のFileMaker pro Q&A (旧掲示板)

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

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2019-04-25 11:48:14

てとりっち
Guest

重複した項目は1としてカウントしたい

お世話になります。

テーブル名:薬剤
フィールド名:薬品名
フィールド名:薬効分類
フィールド名:種類数
上記の構成です。

薬品名フィールドに
薬品名 薬効分類
AAA 〇
BBB ◎
CCC
BBB ◎
CCC
CCC

の様に入力があり
重複している項目は1として種類数フィールドにカウントしたいと思っています。
※上記の場合答えは3

ValueCount(
ExecuteSQL("
SELECT DISTINCT

他の質問でExecuteSQLを使えば良いとの回答はあったのですが
理解できなかった為、再度詳しく教えていただけませんでしょうか?

また薬効分類のカウントもしたいと思っており
If(薬効分類="○" or 薬効分類="◎";"1";"0")で〇もしくは◎の場合をカウントしていましたが
薬品名が重複している場合はこちらも1としてカウントできればと思っています。
上記の場合は答えは2

皆様のお力添えをお願いいたします

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

Hiro
Member

Re: 重複した項目は1としてカウントしたい

>#1『他の質問でExecuteSQLを使えば良いとの回答はあったのですが理解できなかった』
それなら、FM標準の「値一覧」機能を使ってユニーク値一覧リストを作り、
それの行数をカウント計算するやり方が、分かり易いかも?

  1. 薬品名のユニークカウントは、
    ・薬品名フィールドで値一覧「種類値一覧」を作る
    ・目的の「g種類数」計算フィールド(グローバル格納)を作り、下式を設定
          ValueCount(ValueListItems(Get(ファイル名); "種類値一覧") & Left(薬品名フィールド;0))
       

  2. 薬品分類のユニークカウントは、
    ・新規計算フィールド「薬品分類」を作り、式に下式を設定
          Choose(IsEmpty(薬効分類フィールド); 薬品名フィールド & 薬効分類フィールド)
    ・「薬品分類」フィールドで値一覧「分類値一覧」を作る
    ・目的の「g分類数」計算フィールド(グローバル格納)を作り、下式を設定
          ValueCount(ValueListItems(Get(ファイル名); "分類値一覧") & Left(薬品分類フィールド;0))
       

Offline

#3 2019-04-25 17:36:23

てとりっち
Guest

Re: 重複した項目は1としてカウントしたい

Hiroさん

ありがとうございます。

>1薬品名のユニークカウントは、
を試しているのですが、うまく反映されず( ;∀;)
g種類数が0と表示されてしまいます。

ポータルを利用していて薬品名はポータルの中に入っており
g種類数をポータルの外に配置しているのが原因なのでしょうか・・・

#4 2019-04-26 02:26:41

Hiro
Member

Re: 重複した項目は1としてカウントしたい

>#3『ポータルを利用していて薬品名はポータルの中に入っており』
重大要素の後出しジャンケンはご法度ですよ!
>#2の回答が大幅に違ってしまう。

基本的に、ポータルテーブルの関連フィールドで動的値一覧を作り、
ポータルの中に入っている関連フィールドだけの一覧リストアップします。

  1. 薬品名のユニークカウントは、
    1.薬品名フィールドで値一覧「種類値一覧」を作る
    1.ポータルテーブルの関連「薬品名」フィールドで動的値一覧「動的種類値一覧」を作る
    (意図した薬品名の一覧になっているか、適当なフィールドに仮付けして内容表示確認すること)
    2.目的の「g種類数」計算フィールド(グローバル格納)を作り、下式を設定
    2.目的の「種類数」計算フィールドを作り、下式を設定(計算結果:非保存を指定する)
          ValueCount(ValueListItems(Get(ファイル名); "種類値一覧") & Left(薬品名フィールド;0))
          ValueCount(ValueListItems(Get(ファイル名); "動的種類値一覧") & Left(※適当なフィールド;0))
       

  2. 薬品分類のユニークカウントは、
    1.新規計算フィールド「薬品分類」を作り、式に下式を設定
    1.ポータルテーブルに新規計算フィールド「薬品分類」を作り、式に下式を設定
          Choose(IsEmpty(薬効分類フィールド); 薬品名フィールド & 薬効分類フィールド)
    2.「薬品分類」フィールドで値一覧「分類値一覧」を作る
    2.ポータルテーブルの関連「薬品分類」フィールドで動的値一覧「動的分類値一覧」を作る
    3.目的の「g分類数」計算フィールド(グローバル格納)を作り、下式を設定
    3.目的の「分類数」計算フィールドを作り、下式を設定(計算結果:非保存を指定する)
          ValueCount(ValueListItems(Get(ファイル名); "分類値一覧") & Left(薬品分類フィールド;0))
          ValueCount(ValueListItems(Get(ファイル名); "動的分類値一覧") & Left(※適当なフィールド;0))

なお、「※適当なフィールド」とは、再計算誘発トリガーに成り得るフィールドのことですが、
テーブル構成の詳しい説明が未だ無いので、具体名の進言は差し上げられません。
ご自身で考えてみてください。

Last edited by Hiro (2019-04-26 02:42:14)

Offline

#5 2019-04-26 10:57:18

てとりっち
Guest

Re: 重複した項目は1としてカウントしたい

Hiroさん

後だしの情報をして大変申し訳ありません。
詳しいテーブル構成を下記に記載いたします。

処方箋テーブル(メインレイアウト)
→処方ID
→処方日
処方箋明細テーブル(ポータルの中)
→処方ID
→薬品コード
→薬品名
→内服薬チェック
→種類数
→分類数
処方IDでリレーションしています。


医薬品テーブル(医薬品マスタファイル、レセコンからデータを取り出しています)
→薬品名
→内服薬

上記3つのテーブルがあります。


>1.ポータルテーブルの関連「薬品名」フィールドで動的値一覧「動的種類値一覧」を作る
処方箋明細テーブルと医薬品テーブルを「薬品名」フィールドでリレーションし

「薬品名」フィールドで動的値一覧「動的種類値一覧」を作る

※適当なフィールドに仮付けしてというのが良く分かりません...

処方箋明細テーブルの種類数フィールドに
  ValueCount(ValueListItems(Get(ファイル名); "動的種類値一覧") & Left(処方箋明細テーブル:薬品名;0))

とし、処方箋テーブル(メインレイアウト)に
処方箋明細テーブル:種類数フィールドを配置したのですが
0と表示されてしまいました。

情報が後出し後だしで申し訳ありません。
もう一度ご助言をいただけませんでしょうか?

#6 2019-04-26 14:16:25

Hiro
Member

Re: 重複した項目は1としてカウントしたい

説明されたテーブル構成を前提に、実装サンプルをアップしました。
設定説明代わりにご覧ください。

処方箋テーブル(メインレイアウト)上の明細表ポータルから
・明細データの入力・編集・削除と
・そのカウント集計結果の表示
が出来る様にして有ります

●サンプル「Distinct集計.fmp12」 → https://yahoo.jp/box/j7v7va

Offline

#7 2019-04-26 15:22:00

てとりっち
Guest

Re: 重複した項目は1としてカウントしたい

Hiroさん

サンプルありがとうございます!
種類数はばっちり表示されるようになったのですが
分類数の方を重複しているものは1としてカウントかつ、◎もしくは〇だけをカウントするように
というのは出来ませんでしょうか?

どうぞよろしくお願いいたします

#8 2019-04-26 20:45:20

Hiro
Member

Re: 重複した項目は1としてカウントしたい

>#1 wrote:

薬品名 薬効分類
AAA 〇
BBB ◎
CCC
BBB ◎
CCC
CCC
の様に入力があり
重複している項目は1として種類数フィールドにカウントしたいと思っています。
※上記の場合答えは3

また薬効分類のカウントもしたいと思っており
If(薬効分類="○" or 薬効分類="◎";"1";"0")で〇もしくは◎の場合をカウントしていましたが
薬品名が重複している場合はこちらも1としてカウントできればと思っています。

※上記の場合は答えは2

サンプルの薬効分類カウントの答えも、正解2が返っていますが、それが>#7でいう不正解なのですか?
上の条件解釈で、逆に分類が同じでも薬品名が重複してイナイ場合は別途カウントする、として条件式を立てています。「Choose(IsEmpty(内服薬チェック); 薬品名 & 内服薬チェック)」

例えば、データが(分類が同じでも薬品名が重複している場合)、
AAA 〇   ◀ユニーク
BBB ◎   ◀ユニーク
CCC
BBB ◎
CCC
CCC
※答えは<2> で正解ですが、

例えば、データが(分類が同じでも薬品名が重複してイナイ場合)
AAA 〇   ◀ユニーク
BBB ◎   ◀ユニーク
CCC
XXX ◎   ◀ユニーク
CCC
CCC
※答えは<3> となりますが、これが不正解??


>#7 wrote:

種類数はばっちり表示されるようになったのですが
分類数の方を重複しているものは1としてカウントかつ、◎もしくは〇だけをカウントする
ようにというのは出来ませんでしょうか?

分類数がダメ、すなわち、条件説明の解釈が出来ていないのなら、
文章説明でなく、上記のような具体例とその結果で示してください。

Offline

#9 2019-04-30 11:37:52

てとりっち
Guest

Re: 重複した項目は1としてカウントしたい

Hiroさんへ

例えば、データが(分類が同じでも薬品名が重複している場合)、
AAA 〇   ◀ユニーク
BBB ◎   ◀ユニーク
CCC
BBB ◎
CCC
CCC
※答えは<2> で正解ですが、

例えば、データが(分類が同じでも薬品名が重複してイナイ場合)
AAA 〇   ◀ユニーク
BBB ◎   ◀ユニーク
CCC
XXX ◎   ◀ユニーク
CCC
CCC
※答えは<3> となりますが、これが不正解??

私の説明がいつも不足していてHiroさんにご迷惑をおかけして申し訳ありません。

上記2つの例とも正解なのですが
分類が〇と◎以外にも△・◇・☆の5つがあり
その中で、〇と◎が表示されてる場合にという風に絞り込みをおこないたかったのです。

AAA 〇   ◀ユニーク
BBB ◎   ◀ユニーク
CCC
XXX ◎   ◀ユニーク
CCC
CCC
DDD △  ◀ユニーク

※答えは〇と◎のみをカウントする為<3>が正解



もうひとつだけ追加で質問させてください。

薬品名:ロサルタンカリウム錠50mg
薬品コード:2149039F227

薬品コードを5桁目から7桁目までの3つの番号<039>が
001~399までの範囲の場合
Middle関数を使って
Middle(薬品コード;5;3))とし5~7桁目を抽出するのは分かるのですが
抽出したもの(この場合は039)を001~399の範囲に該当しているかでさらに絞り込み
種類数フィールド:ValueCount(ValueListItems(Get(ファイル名); "動的種類値一覧") & Middle(薬価基準コード;5;3))
に反映させることは可能でしょうか・
該当しているもののみをカウントさせたいと思っています。

何度もお願いして申し訳ありません。

どうぞよろししくお願い致します。

#10 2019-04-30 15:18:08

Hiro
Member

Re: 重複した項目は1としてカウントしたい

●>#9質問ー前半

>#9
分類が〇と◎以外にも△・◇・☆の5つがあり、その中で、〇と◎が表示されてる場合にという風に絞り込み

それなら、

>#4
2. 薬品分類のユニークカウントは、
1.ポータルテーブルに新規計算フィールド「薬品分類」を作り、式に下式を設定
      Choose(IsEmpty(薬効分類フィールド); 薬品名フィールド & 薬効分類フィールド)

今回>#9の新規条件を、上の>#4 2.の1.の式に反映させるだけ、その変更式は、
      Choose(IsEmpty(Filter("〇◎";薬効分類フィールド)); 薬品名フィールド & 薬効分類フィールド)


●>#9質問ー後半

>#9
もうひとつだけ追加で質問させてください。
薬品名:ロサルタンカリウム錠50mg
薬品コード:2149039F227
薬品コードを5桁目から7桁目までの3つの番号<039>が
001~399までの範囲の場合
Middle関数を使って
Middle(薬品コード;5;3))とし5~7桁目を抽出するのは分かるのですが
抽出したもの(この場合は039)を001~399の範囲に該当しているかでさらに絞り込み
種類数フィールド:ValueCount(ValueListItems(Get(ファイル名); "動的種類値一覧") & Middle(薬価基準コード;5;3))
に反映させることは可能でしょうか

それなら、その式でではなく、この値一覧の値フィールド「薬品名」を新規「薬品数」へ変更

>#4
>1.ポータルテーブルの関連「薬品名」フィールドで動的値一覧「動的種類値一覧」を作る
処方箋明細テーブルと医薬品テーブルを「薬品名」フィールドでリレーションし
「薬品名」フィールドで動的値一覧「動的種類値一覧」を作る

>#9後半の追加条件を、上の>#4 1.の1.の動的値一覧の値フィールド「薬品数」に反映させるだけ、具体的には、
      新規 計算フィールド「薬品種類」を作り、その式に以下を設定、
      Case(Let([#num=Middle(薬品コード;5;3)]; #num>"000" and #num<"400"); 薬品名)
※なお、こちらの修正は、>#9質問ー前半のカウント数には反映しません。

※上記2件の修正済サンプルを上書きアップしておきます。
●サンプル「Distinct集計.fmp12」 → https://yahoo.jp/box/j7v7va

Offline

#11 2019-05-02 10:18:30

てとりっち
Guest

Re: 重複した項目は1としてカウントしたい

Hiroさん

何度もご修正頂きありがとうございました。
おかげさまで希望通りに動作させる事が出来ました。

本当にお世話になりました。
ありがとうございました。

Registered users online in this topic: 0, guests: 1
[Bot] claudebot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 562.45 KiB (Peak: 583.36 KiB) ]