quot; + price.toFixed(2), "")` 条件分岐と数値フォーマットを定義。 - `file.name.lower()` 小文字に変換。 - `tags.contains("urgent")` タグリストに値が含まれるかチェック。 - `due_date.format("YYYY-MM-DD")` 日付をフォーマット。 ## リンクされたノートのプロパティを使う 数式は、ノートがリンクしているノートのプロパティを読み取ることができます。リンクされたノートから1つの値をルックアップしたり、複数のリンクされたノートの値を合計、カウント、リストなどにロールアップしたりできます。 リンクされたノートのプロパティを読み取るには、`asFile()`でリンクをファイルに変換し、`properties`を使用します。`project: "[[Website redesign]]"`のようにプロパティに格納されたリンクは、この方法で直接利用できます。 > [!warning] 行のノートが変更されると結果が更新されます > リンクされたノートのみを編集した場合、ベース内のルックアップやロールアップはベースを再度開くまで更新されないことがあります。 ### 値をルックアップする `project`プロパティにリンクされたノートの`status`を表示: ```js project.asFile().properties.status ``` プロパティが1つのリンクまたはリンクのリストのどちらも保持できる場合は、`list()`で囲んで最初のリンクを取得します: ```js list(project)[0].asFile().properties.status ``` ### 値をロールアップする `tasks`プロパティにリンクされたすべてのノートの`hours`を合計: ```js tasks.map(value.asFile().properties.hours).reduce(acc + value, 0) ``` `status`が「Done」でないリンクされたノートの数をカウント: ```js tasks.filter(value.asFile().properties.status != "Done").length ``` リンクされたノートのステータスを重複なしでリスト化: ```js tasks.map(value.asFile().properties.status).unique() ``` ### ここにリンクしているノートの値をロールアップする ノートにリンクしているノート(例:それぞれがプロジェクトにリンクしているタスク)の値をロールアップするには、`file.backlinks`を使用します: ```js file.backlinks.map(value.asFile().properties.hours).reduce(acc + value, 0) ``` `file.backlinks`は大規模な保管庫では低速です。可能な場合は、ノート自体にリンクを保存し、上記のように`map()`と`reduce()`でロールアップしてください。 ## 数式の例 ### 期限を計算する プロジェクトの期限を開始日の2週間後に設定: ```js start_date + "2w" ``` ### 期限超過ステータスを表示する 期限が過ぎていてステータスが「Done」でない場合に「Overdue」と表示: ```js if(due_date < now() && status != "Done", "Overdue", "") ``` ### 通貨をフォーマットする 小数点以下2桁と通貨記号で価格を表示: ```js if(price, "quot; + price.toFixed(2), "") ``` ### リスト項目を数える リストプロパティのアイテム数を数える: ```js tasks.length ``` ### 優先度スコアを計算する 複数の要素を組み合わせて優先度スコアを算出: ```js (impact * urgency) / effort ``` ### テキストフィールドを結合する 姓と名からフルネームを作成: ```js first_name + " " + last_name ``` ### 総コストを計算する 月額コストに所有月数を掛ける: ```js monthlyUses * formula.Owned.round() ``` ## データ型 数式はさまざまな型のデータを扱います: - **文字列** — 引用符で囲まれたテキスト:`"hello"` または `'world'` - **数値** — 数値:`42`、`3.14`、`(2 + 2)` - **ブール値** — 真または偽:`true`、`false` - **日付** — `date()`、`today()`、`now()`で作成 - **リスト** — 値のコレクション:`[1, 2, 3]` - **オブジェクト** — キーと値のペア:`{"name": "value"}` 数式の出力型は、使用するデータと関数によって決まります。 ## 他の数式を参照する 数式は他の数式を参照でき、派生的な計算を作成できます。例えば、`price_per_unit`という数式がある場合: ```js price / quantity ``` 別の数式からそれを参照できます: ```js formula.price_per_unit * 1.1 ``` > [!warning] 循環参照を避ける > 数式は、直接的にも他の数式を介して間接的にも、自分自身を参照することはできません。