9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FileMakerでアプリ作っていくよ【作って学ぼう】

Last updated at Posted at 2018-11-15

ぷろろーぐ

データトゥーンしたいな~。

みなさんFileMaker好きですか?スプラトゥーンも好きですか?
それならデータトゥーンしてみませんか?

今回はFileMakerで、実践的なアプリを作る過程を書き綴りたいと思います。
公式からはイカリング2なんていう便利なツールも出ていて、結構細かいログなんかも
残してくれるんですが、13歳未満は使えないという謎の制限があります。
なので、子供のプレイログを保存するために作りたいと思います。

18-12-03:敵統計画面 を追記。ひとまずこれで完成!
18-11-28:バトル統計画面 を追記。
18-11-22:バトル一覧画面 を追記。
18-11-21:武器登録画面、バトル記録画面 を追記。
18-11-21:battle::idの既定値を修正(nagaikaoさん、ありがとうございます!)
18-11-16:リレーションを定義追加
18-11-16:誤字修正(khskさん、ありがとうございます!)
18-11-15:新規投稿

FileMakerのスキルアップが目的の人も、結局1番勉強になるのって作ることなんですよね。
なので、そういう方のためのチュートリアル的な記事になればとも思っています。

ものすごく細かいところの説明は、一部端折ってます。分かり難いところがあれば追記or回答しますのでコメントください!
間違いとかこうした方がいいよというのがあれば、同様にアドバイスいただけると幸いです。

こういう人むけ

  • FileMaker好きな人
  • スプラトゥーン好きな人(好きじゃなくても大丈夫だよ)
  • スプラトゥーンで自分のプレイを分析してみたい人
  • FileMaker初級~中級者で、もう一歩スキルアップしてみたい人(本当に始めたばかりの人だとちょっと難しいと思うので、基本操作レベルは習得しておいていただいたほうが良いかもしれません)
  • イカリング2のバトルログを、サーバからAPIで取得してどうのこうのという難しいやつではないです。それは他の人がいろいろやってそうなので検索してみてね。

こんな感じの作るよー

【登録画面】
image.png
【統計画面】
image.png

準備(俗に言う「設計」のゆるいやつ)

要件(野沢雅子風に言うなら「ねげぇ」)きめよーっと。

  1. ルールごとの勝率とキルレベル※知りたい
  2. ステージごとの〃
  3. 苦手な相手の武器が知りたい
  4. 得意な〃
  5. 武器は分類(シューター/ローラー とか)でも分析したい

※1回のデスあたりに何キルしているか

どんな機能があればいいかな~。

  • バトルの情報を入力する機能
    • ルール/ステージ/勝敗/日付/所要時間/ウデマエ
  • 相手の情報入力する機能
    • 武器/名前
  • キル/デスを入力する機能
    • 相手の武器/武器区分(メイン/サブ/スペシャル)
  • バトルを分析する機能
    • ルール別の勝利数/敗北数/キル数/デス数
    • ステージ別の〃
  • 相手武器を分析する機能
    • 武器ごとのキル数/デス数/キルレベル
    • 分類ごとの〃
  • 武器をメンテナンスする機能
    • 名前/分類/サブウェポン/メインウェポン/画像

じゃあ必要な画面は

  • バトル結果入力画面
    • バトルの情報を登録
    • 対戦相手の情報を登録
    • キル/デスの情報を登録
  • バトル統計画面
    • エリア別の統計表示
    • ステージ別の統計表示
  • 対戦相手統計画面
    • 武器別の統計表示
    • 分類別の統計表示
  • 武器メンテナンス画面
    • 武器の属性を登録 アップデートに備えて

画面構成はこんな感じ

image.png
上に画面を切り替えるメニュー(ボタン群)、下に選択した画面を表示。

テーブル構成考えっか

  • バトルテーブル(1バトルで1レコード)
  • 対戦相手テーブル(バトルテーブルと1:4)
  • キルテーブル(バトルテーブルと1:n)
  • デステーブル(バトルテーブルと1:n)
  • 武器テーブル(マスタ)

実際に作っていくよ

①テーブル作ろう

バトルテーブル(テーブル名:battle)

フィールド名 説明 補足/計算式等
id 数字 ユニークなID 自動入力※
日付 日付 プレイした日
ルール テキスト 例)エリア、ヤグラ
ステージ テキスト 例)ハコフグ倉庫とか
キル 数字 キルした数
デス 数字 デスした数
スペシャル 数字 スペシャル発動した回数
勝敗 テキスト 勝 or 負
所要時間 時刻 バトル時間(最後までなら5:00) 分:秒として使う
ウデマエ テキスト 例)A+、X2200
補足 テキスト 例)神試合!とか 日記的なもの
キル合計 集計 キル数の合計
デス合計 集計 デス数の合計
勝フラグ 計算 勝敗が「勝」の場合に1 勝敗="勝"
勝フラグ合計 集計 勝フラグの合計
負フラグ 計算 勝敗が「負」の場合に1 勝敗="負"
負フラグ合計 集計 負フラグの合計
キルレベル 計算 1デスあたりのキル数 Round(キル合計/デス合計;2)
勝率 計算 勝利数の割合 Round(勝フラグ合計 / Get ( 対象レコード数 );2)
※ idには既定で現在のレコード数+1が入るようにしておく。またユニークにしておく。
自分が使う武器を毎回変える人は「武器」フィールドがあったほうが良いですね。
image.png
If(Get( レコード総数 )<>Get( 対象レコード数 );Get( レコード総数 )+1;Get( 対象レコード数 ))
※ややこしい計算ですが、FileMakerのおかしな動作をカバーするためです。おまじないと思ってコピペしてください。
image.png
対戦相手テーブル(テーブル名:enemy)
フィールド名 説明 補足/計算式等
バトルid 数字 対戦したバトルのID
武器 テキスト 使用武器
名前 テキスト 無くてもいいけど保存しておくと遊べそうw
回線落ち 数字 回線落ちした場合に1を登録
カウント 集計 バトルidのカウント 集計で使用する

キルテーブル(テーブル名:kill)

フィールド名 説明 補足/計算式等
バトルid 数字 対戦したバトルのID
武器 テキスト 使用武器
武器区分 テキスト メイン/サブ/スペシャル など 既定で「メイン」をセット※
補足 テキスト 思い出とか 用途自由
カウント 集計 バトルidのカウント 集計で使用する
※ 武器区分はメインが多いので、既定で設定されるようにしておく
image.png

デステーブル(テーブル名:death)

killテーブルと全く同じ定義なので割愛

武器テーブル(テーブル名:weapon)

フィールド名 説明 補足/計算式等
分類 テキスト 例)シューター、ローラー など
シリーズ テキスト オリジナルの武器(例えばスシコラやオクタシューターは「スプラシューター」
名前 テキスト 武器の正式名称
サブ テキスト サブウェポン
スペシャル テキスト スペシャルウェポン
画像 オブジェクト 無くてもいいけど遊び心で

②リレーション定義しよう

の前に、テーブルオカレンス名の命名規則について。

  • リレーションの階層をピリオド「.」で区切る
  • 同じ階層のテーブルオカレンスはアットマーク「@」に続けて、用途を記載

ルートがbattleテーブルのリレーション
image.png

テーブルオカレンス名 テーブル 用途 結合条件 補足
battle battle ルート
battle.enemy enemy 対戦相手ポータル用 battle::id=enemy.kill::バトルid レコード作成許可、関連レコード削除 ※1
battle.kill kill キルポータル用 battle::id=battle.kill::バトルid レコード作成許可、関連レコード削除
battle.death death デスポータル用 battle::id=battle.death::バトルid レコード作成許可、関連レコード削除
battle.battle@ルール battle バトル統計用 battle::ルール=battle.battle::ルール
battle.battle@ステージ battle バトル統計用 battle::ステージ=battle.battle::ステージ
battle.enemy.weapon weapon 対戦相手武器 battle.enemy::武器=battle.enemy.weapon::武器
※1以下のチェックのことです
image.png

ルートがenemyテーブルのリレーション
image.png

テーブルオカレンス名 テーブル 用途 結合条件 補足
enemy enemy ルート
enemy.weapon weapon 武器情報取得 enemy::武器=enemy.weapon::武器
enemy.battle battle バトル情報 enemy::バトルid=enemy.battle::id
enemy.kill kill 武器別のキル統計用 enemy::武器=enemy.kill::武器
enemy.death death 武器別のデス統計用 enemy::武器=enemy.death::武器
enemy.wepon.wepon@分類 wepon 武器の分類別の統計用 enemy.wepon::分類=enemy.wepon.wepon@分類::分類
enemy.wepon.wepon@シリーズ wepon 武器のシリーズ別の統計用 enemy.wepon::シリーズ=enemy.wepon.wepon@シリーズ::シリーズ
enemy.wepon.wepon@分類.kill kill 武器の分類別のキル統計用 enemy.wepon.wepon@分類::武器=enemy.wepon.wepon@分類.kill::武器
enemy.wepon.wepon@分類.death death 武器の分類別のデス統計用 enemy.wepon.wepon@分類::武器=enemy.wepon.wepon@分類.death::武器
enemy.wepon.wepon@シリーズ.kill kill 武器のシリーズ別のキル統計用 enemy.wepon.wepon@シリーズ::武器=enemy.wepon.wepon@シリーズ.kill::武器
enemy.wepon.wepon@シリーズ.death death 武器のシリーズ別のデス統計用 enemy.wepon.wepon@シリーズ::武器=enemy.wepon.wepon@シリーズ.death::武器
後半ちょっとややこしいな...。画面作るところで説明するかな。

③武器登録画面を作ろう

  • 最初に武器登録画面を作っておきましょう。特に難しいところはないと思います。

    • レイアウト名:武器登録
    • レコードを表示(TO):weapon
    • 表示:リスト形式のみ
      image.png
  • メニューバーを作ります。
    とりあえずボタン5つ並べておいてください。スクリプトは全ての画面が完成後に設定します。
    選択中のボタンだけ、アクティブであることが分かるようなデザインにします(この例だとオレンジ)。
    image.png
    フォントはニコカがスプラトゥーンぽいので、あわせたい方はダウンロードとインストールしてください。

    http://nicofont.pupu.jp/nicoca.html
    ※こだわらない方はスキップしてください

  • 操作ボタン3種作ります。

    image.png
    新規ボタンには「新規レコード/検索条件」を割り当てます。
    コピーボタンには「レコード/検索条件複製」を割り当てます。
    削除ボタンには「レコード/検索条件削除」を割り当てます。

  • タイトルとフィールドを追加します。
    image.png
    タイトルはヘッダパートに、フィールドはボディパートに配置してください。

項目 フィールド オブジェクトタイプ 補足
名前 weapon::名前 編集ボックス
サブ weapon::サブ 編集ボックス
スペシャル weapon::スペシャル 編集ボックス
シリーズ weapon::スペシャル 編集ボックス
分類 weapon::スペシャル 編集ボックス
画像 weapon::画像 - パディングは0で良いですimage.png
完成です。いろいろ登録してみてください。画像は適当にネットとかで拾ってください。
image.png

④バトル記録画面を作ろう

  • 新規レイアウトを作成しましょう。
    • レイアウト名:バトル記録
    • レコードを表示(TO):battle
    • 表示:フォーム形式のみ

      image.png
  • メニューバーを作ります。武器登録画面と同じです。
    image.png
    「バトル記録」ボタンをアクティブな書式にします。
  • 操作ボタン3種作ります。

    image.png

    新規ボタンには「新規レコード/検索条件」を割り当てます。
    削除ボタンには「レコード/検索条件削除」を割り当てます。
    コピーボタンは以下のスクリプトを作成して割り当てます。

    image.png
  • バトル情報を追加します。

    image.png
項目 オブジェクトタイプ 補足
ステージ ドロップダウンリスト カスタム値一覧※1
ID 編集ボックス ブラウズモードでの入力不可※2
勝敗 ラジオボタンセット カスタム値一覧(勝/負)
ルール ドロップダウンリスト カスタム値一覧(最後に付録があるのでそこからコピーして)
ウデマエ 編集ボックス カスタム値一覧にしてみても良い
日付 ドロップダウンカレンダー
時間 ドロップダウンリスト カスタム値一覧(10分きざみで 2:00、2:10… 最後に付録があるのでそこからコピーして)
キル・デス ドロップダウンリスト カスタム値一覧(0~20くらい ご自身のウデマエにあわせて)
スペシャル ドロップダウンリスト カスタム値一覧(0~10くらい)
補足 編集ボックス
※1 カスタム一覧は以下の手順で作成します。
image.png
一覧の表示切替~、値一覧の編集を許可、値一覧を使用して~ の3つは全てONにします。
中身は最後に付録があるのでそこからコピーしてください。

※2 インスペクタの「データ」タブで、フィールド入力のブラウズモードをOFFにします。
image.png

  • 対戦相手リストを追加します

    image.png
  • ポータルを使います。image.png
    • 関連レコードは「battle.enemy」
    • スクロールバーはOFF(相手は4人固定なので)
    • 行数は4

      image.png
項目 フィールド オブジェクトタイプ 補足
画像 battle.enemy.wepon::画像 - ブラウズモードOFF
武器 battle.enemy::武器 ドロップダウンリスト ※値一覧は後述
名前 battle.enemy::名前 編集ボックス
回線落ち battle.enemy::回線落ち チェックボックスセット カスタム値一覧(1だけ)
キルボタン - ボタン ※スクリプトは後ほど割り当てます
デスボタン - ボタン ※スクリプトは後ほど割り当てます
※武器の値一覧は武器テーブルから取得します。
image.png
  • キルリストを追加します

    image.png
  • こちらもポータルを使います。
    • 関連レコードは「battle.kill」
    • スクロールバーはON
    • 行数はいくつでも構いません
    • インスペクタで名前を「キル一覧」にします(後で使います)。

      image.png

![image.png](https://qiita-image-store.s3.amazonaws.com/0/251813/b3148ac6-f159-52d4-8053-02c1c164fb0a.png)
項目 フィールド オブジェクトタイプ 補足
相手の武器 battle.kill::武器 ドロップダウンリスト ※値一覧は後述
武器区分 battle.kill::武器区分 ドロップダウンリスト カスタム値一覧(メイン/サブ/スペシャル/他)
補足 battle.kill::補足 編集ボックス 用途は自由です(着地狩り、ホコショット等)
削除ボタン - ボタン スクリプト「レコード/検索条件削除」を割り当てます。
※武器の値一覧は現在のバトルの対戦相手から取得します。
image.png
  • デスリストを追加します

    image.png
  • 内容はほぼキルリストと同じです。TOがbattle.deathに変わっただけです。
    • 関連レコードは「battle.death」
    • インスペクタで名前を「デス一覧」にしておきます(後で使います)。

      image.png

      image.png

項目 フィールド オブジェクトタイプ 補足
相手の武器 battle.death::武器 ドロップダウンリスト ※値一覧もキルリストと同じ
武器区分 battle.death::武器区分 ドロップダウンリスト カスタム値一覧(メイン/サブ/スペシャル/他)
補足 battle.death::補足 編集ボックス 用途は自由です(着地狩り、ホコショット等)お好みでカスタム値一覧に
削除ボタン - ボタン スクリプト「レコード/検索条件削除」を割り当てます。
  • キルボタン/デスボタン用のスクリプトを作成します。

    image.png
    キルかデスかをスクリプト引数(パラメータ)で受け取ります。
    現在行の武器を変数$武器に格納します。
    キルなら「キル一覧」へ移動して、ポータルの最後の行へ移動します。
    (ここで先ほどポータルに設定した名前を使ってます)
    battle.kill::武器に先ほど格納した変数をセットします。このタイミングで
    勝手にkillテーブルにデータが生成されます。
    デスの場合も同様です。移動するポータルとセットするテーブルが違います。
    最後にレコード確定して終わりです。

  • 作成したスクリプトをボタンに割り当てます。

    image.png
    「オプションのスクリプト率い数」に"キル"を設定すると、先ほど作成したスクリプトの
    Get( スクリプト引数 )で受け取ることができます。
    デスボタンもほぼ同じですので、演習がてらご自身でやってみてください。

  • まだ中途半端ですが、一旦終わりにします。いろいろさわってみてください。
    image.png

⑤バトル一覧画面を作ろう

  • 新規レイアウトを作成しましょう。

    • レイアウト名:バトル一覧
    • レコードを表示(TO):battle
    • 表示:リスト形式のみ

      image.png
  • メニューバーを作ります。作成済みの画面からコピーすると良いです。
    image.png

  • 集計エリアを追加します。
    image.png

    ヘッダーパートに乗せてください。

項目 フィールド オブジェクトタイプ 補足
勝利合計 battle::勝フラグ合計 編集ボックス ブラウズモードでの入力不可
敗北合計 battle::負フラグ合計 編集ボックス ブラウズモードでの入力不可
キル合計 battle::キル合計 編集ボックス ブラウズモードでの入力不可
デス合計 battle::デス合計 編集ボックス ブラウズモードでの入力不可
キルレベル battle::キルレベル 編集ボックス ブラウズモードでの入力不可
  • タイトルとフィールドを追加します。
    image.png

    タイトルはヘッダパートに、フィールドはボディパートに配置してください。
項目 フィールド オブジェクトタイプ 補足
id battle::id 編集ボックス ブラウズモードでの入力不可
日付 battle::日付 編集ボックス ブラウズモードでの入力不可
ルール battle::ルール 編集ボックス ブラウズモードでの入力不可
ステージ battle::ステージ 編集ボックス ブラウズモードでの入力不可
キル battle::キル 編集ボックス ブラウズモードでの入力不可
デス battle::デス 編集ボックス ブラウズモードでの入力不可
スペシャル battle::スペシャル 編集ボックス ブラウズモードでの入力不可
所要時間 battle::所要時間 編集ボックス ブラウズモードでの入力不可
勝敗 battle::勝敗 編集ボックス ブラウズモードでの入力不可
ウデマエ battle::ウデマエ 編集ボックス ブラウズモードでの入力不可

勝敗フィールドは見易くなるように、条件付書式を入れておきます。
image.png
値が"勝"の時は背景をブルーに、"負"の時は背景をグレーにする。という条件にしています。

  • 完成です。
    image.png

⑥バトル統計画面を作ろう

  • 新規レイアウトを作成しましょう。

    • レイアウト名:バトル統計
    • レコードを表示(TO):battle
    • 表示:リスト形式のみ

      image.png
  • メニューバーを作ります。作成済みの画面からコピーすると良いです。
    image.png

  • 統計ボタンを2つ作ります。
    image.png
    ヘッダーパートに乗せてください。
    「ステージ別ランキング」ボタンに以下のスクリプトを割り当てます。
    image.png
    image.png

「ステージ」でソートすることにより、後ほど追加する集計パートが有効になります。また「集計フィールドに基づいて並べ替え」を利用して、勝利数が多い順に並ぶようにしています。ここは好みで変更しても良いです(敗北数、キル数、デス数)。

「ルール別ランキング」ボタンにも、同じようにソートのスクリプトを割り当ててください。演習としてご自身で設定してみてください。

  • タイトルラベルを追加します。
    image.png
    ヘッダパートに配置してください。

  • ステージ別統計用の集計パートを追加します。
    image.png
    image.png
    image.png

  • 追加したパートに、フィールドを作成します。
    image.png

項目 フィールド オブジェクトタイプ 補足
ステージ battle::ステージ 編集ボックス ブラウズモードでの入力不可
試合数 計算 タブコントロール ※1 後述
勝利数 battle::勝フラグ合計 編集ボックス ブラウズモードでの入力不可
敗北数 battle::負フラグ合計 編集ボックス ブラウズモードでの入力不可
勝率 battle.battle@ステージ::勝率 編集ボックス ブラウズモードでの入力不可
キル数 battle::キル合計 編集ボックス ブラウズモードでの入力不可
デス数 battle::デス合計 編集ボックス ブラウズモードでの入力不可
キルレベル battle.battle@ステージ::キルレベル 編集ボックス ブラウズモードでの入力不可

※1 試合数はフィールドを作っても良いんですが、有名(?)な裏技で対応します。
image.png
image.png
FileMakerは基本的に画面上に情報を表示するには、フィールドが必要となりますが、タブコントロールのタブ名には計算式が使えます。これを利用してフィールドを追加することなく計算結果を表示することができます。
Count(battle.battle@ステージ::id)
ちなみにこの計算式は、リレーションされたレコードのidの個数をカウントしています。
タブコントロールの背景色や枠線は透明にしておいてください。

【勝率とキルレベルについて】
ここには関連テーブルである「battle.battle@ステージ」を指定しました。ちょっと難しいのですが、これは現在のレコードと「ステージ」が一致する自己リレーションを使っています。例えば現在行のステージがハコフグ倉庫なら、過去の全てのハコフグ倉庫のバトルが繋がっています。なのでそのTOの集計フィールドを参照すると、ステージごとの集計結果が得られるというわけです。大事な考え方なので、頑張って理解してください。説明へたくそorz

  • ルール別統計用の集計パートを追加します。
    image.png
    これもちょっと難しいかもしれませんが、演習としてご自身でトライしてみてください。ソート対象は「ルール」です。また勝率とキルレベルは「battle.battle@ルール」を参照します。

  • 完成です。2つのボタンをクリックすると統計データが表示されます。
    image.png

⑦敵統計画面を作ろう

  • 新規レイアウトを作成しましょう。

    • レイアウト名:敵統計
    • レコードを表示(TO):enemy
    • 表示:リスト形式のみ

      image.png
  • メニューバーを作ります。作成済みの画面からコピーすると良いです。
    image.png

  • 統計ボタンを3つ作ります。
    image.png

ヘッダーパートに乗せてください。
「武器別ランキング」ボタンに以下のスクリプトを割り当てます。
image.png
image.png

「武器」でソートすることにより、後ほど追加する集計パートが有効になります。また「集計フィールドに基づいて並べ替え」を利用して、登場回数が多い順に並ぶようにしています。

「シリーズ別ランキング」ボタンと「分類別ランキング」ボタンにも、同じようにソートのスクリプトを割り当ててください。演習としてご自身で設定してみてください。ソート順はそれぞれ以下の通りです。
シリーズ別ランキング:enemy.weapon::シリーズ
分類別ランキング:enemy.weapon::分類

  • タイトルラベルを追加します。
    image.png
    ヘッダパートに配置してください。

  • 武器別統計用の集計パートを追加します。
    image.png
    image.png
    image.png

  • 追加したパートに、フィールドを作成します。
    image.png

項目 フィールド オブジェクトタイプ 補足
武器画像 enemy.weapon::画像 - ブラウズモードでの入力不可
武器 enemy::武器 編集ボックス ブラウズモードでの入力不可
カウント enemy::カウント 編集ボックス ブラウズモードでの入力不可
キル数 enemy.kill::カウント 編集ボックス ブラウズモードでの入力不可
デス数 enemy.death::カウント 編集ボックス ブラウズモードでの入力不可
キルレベル 計算 タブコントロール ※1 後述

※1 キルレベルもタブコントロールの裏技で対応します。
image.png

Let([

kill= enemy.kill::カウント;
death=enemy.death::カウント;
death=If(death = 0; 1; death)

];

Round(kill / death;2)

)

計算式はちょっと難しいのですが、Letという標準関数を使っています。Letは2つの引数を与えて使います。とても良く使う関数なのでここで覚えましょう!
Let( 変数設定; 計算 )の形式です。1つ目の引数で変数に値を設定しておいて、2つめの計算で変数の値を使って戻り値を作っています。今回の例だと先ずkillという変数にenemy.kill::カウントの値を、deathという変数にenemy.death::カウントの値を設定しています。deathは次の計算の分母になるので、もし0件なら1をセットするようにしています。変数設定は2つ以上ある場合、[]で囲む必要があります。
次に2つめの引数で計算をします。Round()というのは四捨五入を行うための標準関数で、2つの引数を与えて使います。1つ目の引数で対象となる数値を、2つめの引数で小数点以下の桁数を指定します。

  • シリーズ別/分類別統計用の集計パートも追加します。
    image.png

これもちょっと難しいかもしれませんが、演習としてご自身でトライしてみてください。イメージは付けませんが、各設定をまとめておきます。
【シリーズ別】
パート定義の小計対象フィールド → enemy.weapon::シリーズ

項目 フィールド オブジェクトタイプ 補足
武器画像 enemy.weapon::画像 - ブラウズモードでの入力不可
シリーズ enemy.weapon::シリーズ 編集ボックス ブラウズモードでの入力不可
カウント enemy::カウント 編集ボックス ブラウズモードでの入力不可
キル数 enemy.weapon.weapon@シリーズ.kill::カウント 編集ボックス ブラウズモードでの入力不可
デス数 enemy.weapon.weapon@シリーズ.death::カウント 編集ボックス ブラウズモードでの入力不可
キルレベル 計算 タブコントロール ※1 後述
※1 タブ名の計算式
Let([

kill= enemy.weapon.weapon@シリーズ.kill::カウント;
death=enemy.weapon.weapon@シリーズ.death::カウント

];

Round(kill / death;2)

)

【分類別】
パート定義の小計対象フィールド → enemy.weapon::分類

項目 フィールド オブジェクトタイプ 補足
武器画像 enemy.weapon::画像 - ブラウズモードでの入力不可
分類 enemy.weapon::分類 編集ボックス ブラウズモードでの入力不可
カウント enemy::カウント 編集ボックス ブラウズモードでの入力不可
キル数 enemy.weapon.weapon@分類.kill::カウント 編集ボックス ブラウズモードでの入力不可
デス数 enemy.weapon.weapon@分類.death::カウント 編集ボックス ブラウズモードでの入力不可
キルレベル 計算 タブコントロール ※1 後述
※1 タブ名の計算式
Let([

kill= enemy.weapon.weapon@分類.kill::カウント;
death=enemy.weapon.weapon@分類.death::カウント

];

Round(kill / death;2)

)

enemy.weapon.weapon@シリーズ.killとかenemy.weapon.weapon@分類.deathとかが超ややこしいですね。リレーションシップグラフを確認してみましょう。

image.png

①現在行の敵の「武器」を元に、武器テーブルからデータを取得
②「①」で取得した武器テーブルの「シリーズ」を元に、再度武器テーブルからデータを取得(同じシリーズの武器一覧取得)
③「②」で取得した武器リストの「武器」を元に、killテーブルからデータを取得(これで、現在行の敵の武器と同じ「シリーズ」の、killの集計情報が取得できる)

書いてても、とても難しいです。説明へたくそorz
実際にデータを入れてみると分かり易いかもしれません…。

  • 完成です。3つのボタンをクリックすると統計データが表示されます。
    image.png

⑧メニューバーにスクリプト設定しよう

image.png
これは全然難しくありません。
各ボタンに、対象のレイアウトへ移動するスクリプトを設定するだけですね。
《バトル一覧の例》
image.png

これで全て完了なので、さわり倒してください。

ふろく

用語集

用語 説明 補足
テーブルオカレンス(TO) 説明しにくい…。テーブルとレイアウトをつないでくれるやつ。見たいな感じか…。感覚で覚えるしかないですね。
ルート 本記事では、最上位という意味で使ってます

カスタム値一覧(コピペして使ってね)

※2018-11-28時点
【ルール】
ガチアサリ
ガチエリア
ガチホコ
ガチヤグラ
【ステージ】
バッテラストリート
フジツボスポーツクラブ
ガンガゼ野外音楽堂
タチウオパーキング
コンブトラック
海女美術大学
チョウザメ造船
ホッケふ頭
マンタマリア号
モズク農園
エンガワ河川敷
Bバスパーク
ザトウマーケット
ハコフグ倉庫
デボン海洋博物館
アロワナモール
アジフライスタジアム
ショッツル鉱山
モンガラキャンプ場
スメーシーワールド
ホテルニューオートロ
アンチョビットゲームズ
ムツゴ楼
ミステリーゾーン
【対戦時間】
5:00
4:50
4:40
4:30
4:20
4:10
4:00
3:50
3:40
3:30
3:20
3:10
3:00
2:50
2:40
2:30
2:20
2:10
2:00
1:50
1:40
1:30
1:20
1:10
1:00

まとめ

また長くなっちゃったなー。
もっと説明うまいと良いんだけど…。とりあえず誰か作ってみてください。
躓いたらコメントください。
本当はチェック処理とか、装飾とかまだまだやることはいろいろありますが、とりあえずこれをテンプレートとして、後はご自信でいろいろと味付けしてみてください。
扱っているのはスプラトゥーンのバトルログですが、他の用途でもベースとしての考え方は同じだと思います。いろいろな用途に応用してみてください。

ランタイムアップしたいけど、どこに上げればいいのかわからん。Qiitaで用意してくれないかな~

教訓

自分が興味のあることがネタ、いくらでもがんばれるぞ。

:cat:こちらも暇があればご覧ください。:cat:
 FileMakerで登録/キャンセル制御したい
 FileMakerで分離モデルしてみたい
 FileMakerでレスポンス悪いときに確認すること
 FileMaker 一歩進んだシステム開発 -汎化-
FileMaker 一歩進んだシステム開発 - 怖くないよカスタムメニュー -

9
9
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?