FC2ブログ














ValueCount(FilterValues(  を考える 3

いや〜どうも。

ここで、再び疑問1へ話を戻す。

疑問1.FilterValues(”1.餃子¶2.炒飯¶3.回鍋肉” ;”1.餃子" )の”1.餃子¶2.炒飯¶3.回鍋肉”をどうやって作るか?

ここまで出来ていれば話は簡単である。
値一覧の Choices =”1.餃子¶2.炒飯¶3.回鍋肉” なのだから。
更にアンケート :: Choicesは値一覧のChoicesそのもの(上図参照)なので

FilterValues(”1.餃子¶2.炒飯¶3.回鍋肉” ;”1.餃子" )は
FilterValues(Choices ;”1.餃子" )と置き換えられる。

ただし、ここで注意!
実際にはアンケート :: Choicesの値は”1.餃子¶2.炒飯¶3.回鍋肉” ではなく、各々に割り当てられた値である。
つまり、テキスト 1-1、1-2、1-3 となる。

つづいて、
疑問2.FilterValues(Valuelist(Get(ファイル名) ; "Choises") ;”1.餃子" )の2番目の引数”1.餃子”をどうやって作るか?

前述の注意にあるよう 1.餃子 =  "1-1" である。(1-1ではなく1_1にした方が良いね)
なので、1.餃子を取得するとは”1-1”を求めることと置き変えられる。

まず、下図を見て欲しい。


▼1-1
スクリーンショット 11

上図右側に集計用のタイトルと0 or 1を格納するフィールドを用意した。
フィールドChoicesNameは選択肢の番号1-1を、CountChoicesは 0 or 1で選択されているかどうかを示す。
CountChoicesを積み上げていけば集計が可能となる。

では、それぞれのフィールド設定を見てみよう。

▼追加フィールド
スクリーンショット 12

▼ChoicesName
スクリーンショット 13

▼CountChoices
スクリーンショット 14


ChoicesNameに注目。繰り返しフィールドになっているので戻り値は"1-1","1-2","1-3"となる。
次にCountChoices注目。FilterValues( Choices[1] ; ...)の[1]はExtendの意味合い。これはChoicesNameが繰り返しなのでExtendが必要となる。

話を元に戻す。
疑問2の "1.餃子"をどうやって作るか?はChoicesNameで拾ってくることになる。

FilterValues(Choices[1] ; "ChoisesName")
をわかりやすくすると1-1、1-2、1-3の全てにチェックが付いている(選択している)場合、
ChoiceName[1]にはFilterValues( "1-1¶1-2¶1-3";"1-1" )= "1-1"
ChoiceName[2]にはFilterValues( "1-1¶1-2¶1-3";"1-2" )= "1-2"
ChoiceName[3]にはFilterValues( "1-1¶1-2¶1-3";"1-3" )= "1-3"
とChoicesNameの繰り返し位置に応じて第2引数が変化する計算式が成り立つ。


ここで、元々求めたいのは
ValueCount()で 0 or 1 なのだから、
ValueCount(FilterValues(Choices[1] ; "ChoisesName") )で、FilterValues(Choices[1] ; "ChoisesName")の結果が"1-1"であろうと"1-2"であろうと、
ValueCount(FilterValues(Choices[1] ; "ChoisesName") )の戻り値は 1 となる。

以上 ValueCount(FilterValues( の考察である。

スポンサーサイト



[ 2020/02/03 10:43 ] ValuCount(FilterValue( | TB(0) | CM(0)

ValueCount(FilterValues(  を考える 2

いや〜どうも。



前回の記事に誤りがあったので修正した。ValueCountは引数を二つ持たない。

さて、前回をざっくりまとめると


  • アンケートの集計をしたい

  • FilterValuesの説明と戻り値

  • ValueCountで0 or 1 が求められる

  • である。

今回はもう少し掘り下げていく。

● FilterValues

前回の例を取り上げる。

FilterValues ( "餃子¶炒飯¶回鍋肉" ; "餃子" )

戻り値: 餃子


これは

『改行された文字列 "餃子¶炒飯¶回鍋肉" のうち"餃子" と同じ文字を拾ってきなさい』

ということである。

複数指定も可能で、

FilterValues ( "餃子¶炒飯¶回鍋肉" ; "餃子¶回鍋肉" )

ならば、

戻り値は 餃子¶回鍋肉¶

となる。


● ValueCount

与えられた文字列がいくつあるかカウントしてくる。

例えば、

ValueCount( "餃子¶炒飯¶回鍋肉" )ならば

戻り値は3となる。


以上を踏まえてアンケートを作ってみる。



Q1. 好きな中華料理は(単数回答)

1.餃子 2.炒飯 3.回鍋肉



Q2. 好きなデザートは(複数回答可)

1.杏仁豆腐 2.マンゴープリン 3.胡麻団子





AさんとBさんの二人に回答してもらった結果は以下


Aくん

Q1 1.餃子

Q2 1.杏仁豆腐、2.胡麻団子


Bくん

Q1 1.餃子

Q2 1.杏仁豆腐、2.マンゴープリン



目的はアンケートの集計なので欲しい結果としては、

Q1. 餃子 2票

Q2. 杏仁豆腐2票 マンゴープリン2票 胡麻団子2票

である。


さあ、ここから逆算的に考える。

まずQ1から。

●1を得るためには、

Aさんの回答:ValueCount("1.餃子")= 1

Bさんの回答:ValueCount("1.餃子")= 1

∴ 1 + 1 = 2


●ValueCount("1.餃子")にするためには、

FilterValues(”1.餃子¶2.炒飯¶3.回鍋肉” ;”1.餃子" )= 1.餃子¶



●以上より

ValueCount(FilterValues(”1.餃子¶2.炒飯¶3.回鍋肉” ;”1.餃子" )) = 1

となる。



ここで、疑問。

疑問1.FilterValues(”1.餃子¶2.炒飯¶3.回鍋肉” ;”1.餃子" )の”1.餃子¶2.炒飯¶3.回鍋肉”をどうやって作るか?
疑問2.FilterValues(Valuelist(Get(ファイル名) ; "Choises") ;”1.餃子" )の2番目の引数”1.餃子”をどうやって作るか?


回答の前に、まずはどうやって回答させるか。



回答1の選択肢は

1.餃子 2.炒飯 3.回鍋肉

なの、値一覧から選択させる。



ここからは、実際にFileMakerでやってみる。



▼目標

スクリーンショット 9




  1. テーブル作成

    ▼テーブル

    スクリーンショット 2


  2. フィールド設定


    ▼アンケートのフィールド

    スクリーンショット 7




    ▼質問のフィールド

    スクリーンショット 4


  3. 選択肢作成

    チェックボックスで入力させるため値一覧を定義する。


    1. 選択肢をテーブル質問へ入力しておく



      ▼選択肢の入力

      スクリーンショット 5


    2. 値一覧の定義



      ▼値一覧

      スクリーンショット 6



  4. 選択肢の配置



    ▼テーブルアンケートに選択肢を配置

    スクリーンショット 8


以上で選択肢から選択可能となる。

長くなったのでここまで。
考え過ぎちゃった。
[ 2020/02/02 10:16 ] ValuCount(FilterValue( | TB(0) | CM(0)

Valuecount(FilterValues(  を考える 1

いや〜どうも。


まだまだ、ひよっこですな。
pandas で csv を読み込んで、カンマ区切りを個別データにして csv ファイルとして書き出すとか、columnsの名前を変えるとか、基本的なことが出来てない。やっぱ、実用レベルでどれだけ必要としているかを背負わないとダメですよね。

さてと、今回は『ValueCount(FilterValues( 』を考えるです。
最初に言っときますが、自分のネタではなくパクりです。なので備忘録的に書き記します。

実務ではあまり使わない二つの関数について考える。

1. FilterValue
2. ValueCount

【背景】 アンケートの集計をFileMakerでやってみようと思ったのがきっかけ。
【目的】 アンケートの選択肢が選択されているかどうかを見極める。選択されていれば 1 を、選択されていなければ 0 を戻り値とする。0 or 1 かです。
【方法】 ValueCount ( FilterValues ( 選択肢 ; 選択肢 ) )

まず、FilterValues
FileMakerの説明を載せます。

//////////////////////////////////////////////////////////

FilterValues
フィルタ値で指定した値のみを含むテキスト結果を、フィルタするテキストに入力されている順序で返します。

構文
FilterValues (フィルタするテキスト ; フィルタ値)

引数
フィルタするテキスト - テキスト式またはテキストフィールド
フィルタ値 - 指定されたテキスト内の保持する値

戻り値のデータタイプ
テキスト

説明
値の一覧の説明については、ValueCount 関数を参照してください。
返される各値は改行で終了しているため、一覧を簡単に連結することができます。

メモ
・フィルタ値引数に値が指定されていない場合は、空の文字列が返されます。
・FilterValues 関数では、大文字と小文字は区別されません。

例 1
FilterValues ("Plaid¶Canvas¶Suitcase" ; "Plaid¶Canvas") は「Plaid¶Canvas¶」を返します。

例 2
FilterValues (ValueListItems ("データベース" ; "サイズ") ; "中¶小") は、「データベース」という名前のデータベースファイルに「小¶中¶大」という値を持つ値一覧「サイズ」がある場合に「小¶中¶」を返します。



//////////////////////////////////////////////////////////

さてと、ここでアンケートを考えてみる。

例えば、
設問1 好きなメニューを選んで下さい。(単回答)
  1. 餃子
  2. 炒飯
  3. 回鍋肉


餃子を選んだとする。
ここで、FilterValuesの登場。

FilterValues ( "餃子¶炒飯¶回鍋肉" ; "餃子" )

戻り値: 餃子

になるわけだ。

では、FilterValues ( "餃子¶炒飯¶回鍋肉" ; "杏仁豆腐" )ならばどうだ。
これは、null となる。

更に、 ValueCount 

 ValueCount ( "餃子" ) ならば 戻り値: 1
 ValueCount ( "" ) ならば 戻り値: 0

ということで、ここで 0 or 1 が得られるのだ。

ちなみに、
 ValueCount ( "餃子¶餃子" ) ならば 戻り値: 2



そう、最終的にはこの形にしたいのだ。
 ValueCount ( "餃子" )

今日はここまで。
[ 2020/01/28 21:57 ] ValuCount(FilterValue( | TB(0) | CM(0)

点検予定表ビジュアル表示 15

いや〜どうも。

今回でこのシリーズは終了となります。
前回はポータルでビジュアルを作るでした。

ここではいくつかのキワードについて解説します。
まずは、下図を見て下さい。


▼ポータル表示用に注目
スクリーンショット 34

いくつもの数字が改行で表示されています。
これは値一覧で取得した年度別の管理番号のIDになります。

突然ですがここでキーワードを発表します。
キーワードはマルチキーフィールドです。
マルチフィールドとはいくつかある候補の内一致したものをリレーション出来るという、言い換えればリレーションの幅を広げるためのものです。
FileMaker社(現Claris)にも乗っていますので転記します。

以下転機-------------------------------------------

照合フィールドに複数の値を改行で区切って入力することにより、一致する可能性のある値の数を増やすことができます。リレーションシップ条件に従って、照合フィールドの任意の 1 行に一致すれば、関連データにアクセスすることができます。これを、マルチキーフィールド、または複合キーフィールドと呼ぶこともあります。

たとえば、各テーブルの 1 つのフィールドの内容に基づいてテーブル A のレコードとテーブル B を結合する簡単なリレーションシップがあり、テーブル A の照合フィールドには、改行で区切られた次の値が含まれるとします:





対応する照合フィールドに「赤」、「緑」、または「青」のいずれか 1 つの値が含まれる、テーブル B のすべてのレコードが一致します。ただし、照合フィールドに「赤 緑 青」の値が含まれるレコードは返されません。改行があることで、各行が個別の値として処理されます。

-------------------------------------------

ということで、
Portal表示用にあるIDがsessionのポータルに表示される候補になります。
そして、リレーションの下図部分が効いてきます。


▼リレーションの中身
スクリーンショット 35

結果、Portal表示用にあるIDの内年度が一致したものが表示されるというわけです。


▼例. Portal表示のなかで年度が一致したものだけが表示されている。
スクリーンショット 36


スクリーンショット 37


はい、いかがでしたでしょうか。
以上をもちましてこのシリーズは終了となります。

質問があればお気軽に連絡下さい。

あと、宣伝ですが

FileMakerセミナー for CE を企画しています。

おかげさまで、現在の応募は0名です。
いろいろと制限があり難しいですね。でもいいんです。

ただいま受講者募集中(先着順) 開催日は2020/2/29 東京五反田!詳しくはここをクリック。


[ 2020/01/21 12:32 ] 点検予定表 | TB(0) | CM(7)

点検予定表ビジュアル表示 14

いや〜どうも。

今回はポータル編です。目標は下図です。


▼ポータルでつくる
スクリーンショット 24


ちなみに、前回までのリスト形式で作ったものが下です。


▼リストで作成
スクリーンショット 22

両者の使いどころは・・・まあ、いろいろありそうです。
例えば、
リストの方は専用のレイアウトになるのに対してポータル版はフォーム形式の中に組み込む、スライドコントロール画面に組み込むなどの自由度があります。

さて、ぼちぼち、いきましょう。
ポータルにするにあたってここではテーブルを一つ用意します。このテーブルは説明を分かり易くするために作るものです。
また、ここではsessionモデルで作っていきますYO!


1. テーブルを作る
 テーブル名はsession としました。

スクリーンショット 25

2. フィールド
 以下の様にフィールドを用意します。
 Portal表示用は計算式です。計算内容も設定しておきましょう。結果はテキストにしておきます。

スクリーンショット 26


3. 点検予定テーブルにフィールドを追加
 参照元となる点検予定テーブルに以下の様フィールドを追加します。このフィールドは年度と管理番号を結合するだけです。
備忘録的にコメントする。
年度別のidを拾いたいが為このフィールドを用意。値一覧を設定するときに必要となる。

スクリーンショット 30



4. リレーションの設定
 以下の様にリレーションを組みます。
今回は年度別の表示をリレーションを使って実行していますのでテーブルを二つ用意しました。ポータルフィルタで制御する場合session 2 は不要になります。

スクリーンショット 28

備忘録的に残しておきますと、『session』のPortal表示用はマルチフィールドで『点検予定»session』のidを引っ張ってくるためのもの。『点検予定»session2』は年度別の点検分を表示するためなのでポータルフィルタを使用する場合は不要のテーブル。
ポータルフィルタかリレーションかはどっちでもよいのだが表示時間を考えるとリレーションに軍配か?


5. 値一覧を設定
 以下の様に設定する。

スクリーンショット 31


6. データを追加
 適当でよいのでデータを追加します。ここでは年度の異なるデータを追加しておくのが目的です。

スクリーンショット 32


7. レイアウトを作る
 以下の様にします。Portal表示用は説明上表示しておきます。

スクリーンショット 33


はい、以上で完成です。
これで、session レイアウトを表示すればすでに下図のようになっていることでしょう。


スクリーンショット 24

次回は少しだけ説明を加えてこのシリーズは終了となりますYO!



[ 2020/01/12 10:17 ] 点検予定表 | TB(0) | CM(0)