> ## Documentation Index
> Fetch the complete documentation index at: https://datagen.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 5. 發布 App

> 建立 marimo 儀表板筆記本並分享給團隊

Agent 會回答問題並寄出每週報告，但有些人想自己探索數字。在最後這一部分，你會建立一個 **marimo** 儀表板——一個反應式的 Python 筆記本——並分享給工作區成員。

## 開始之前

* 你已完成 [4. 建立 Agent](/zh/tutorial/04-build-agent)。
* 導覽列上看得到「**應用程式**」。應用（App）是依帳號啟用的功能；如果沒有看到，請聯絡 [support@datagen.dev](mailto:support@datagen.dev)。
* 儀表板的資料是「**檔案**」中的一個 CSV 檔。

<Note>
  執行中的 App 會讀取你在「**來源**」分頁選取的工作區檔案（啟動時複製到 App 中），以及其連線保險庫中的憑證。筆記本沒有建構器對話，因此不會連結知識庫。自訂 App 能使用的所有內容請參考[建立 App](/zh/apps/build)。
</Note>

## 1. 建立筆記本

<Steps>
  <Step title="開啟筆記本">
    在左側導覽列點選「**應用程式**」，再點選「**筆記本**」卡片。
  </Step>

  <Step title="填寫對話框">
    點選「**新增筆記本**」並填寫：

    | 欄位 | 值 |
    | - | - |
    | 標題 | 顯示名稱。 |
    | 名稱 | 小寫英文字母、數字、連字號或底線。它決定筆記本檔案的名稱，建立後無法修改。 |
    | 說明 | 選填。說明儀表板呈現的內容。 |
    | Sandbox 環境 | 維持「**工作區預設**」。只有在啟用沙箱環境功能時才會顯示此欄位。 |
  </Step>

  <Step title="建立">
    點選「**建立**」。筆記本會啟動，並在 marimo 編輯器中開啟。
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/datagen/rusBmwP8bd_Srmdm/images/browser-guide/zh/new-notebook.jpg?fit=max&auto=format&n=rusBmwP8bd_Srmdm&q=85&s=8b8eca995caaece99a9248acf6c11e87" alt="新增筆記本：標題、名稱、說明與 Sandbox 環境" width="838" height="863" data-path="images/browser-guide/zh/new-notebook.jpg" />
</Frame>

## 2. 提供資料給筆記本

1. 在筆記本畫面中點選「**應用程式詳情**」，再開啟「**來源**」分頁。
2. 點選編輯（鉛筆）圖示，選取 CSV 檔，然後儲存選擇。
3. 點選「**重新複製來源**」，或停止後重新開啟筆記本，讓執行中的筆記本取得本機副本。

筆記本會在 `DATAGEN_SOURCES_DIR` 環境變數所指的目錄下，以檔案的完整儲存路徑讀取每個選取檔案的唯讀副本。位於檔案「**工作區**」分頁的檔案，其路徑以 `.raw/` 開頭。

## 3. 建立儀表板

點選「**開啟應用程式**」回到筆記本，加入下列儲存格。marimo 會自動重新執行相依的儲存格，所以有人調整控制項時，儀表板會立即更新。

```python 載入資料 theme={null}
import os

import marimo as mo
import pandas as pd

SOURCES = os.environ["DATAGEN_SOURCES_DIR"]
df = pd.read_csv(f"{SOURCES}/.raw/<folder>/<file>.csv")
```

```python 篩選 theme={null}
segment = mo.ui.dropdown(
    options=sorted(df["<segment_column>"].dropna().unique().tolist()),
    label="區隔",
)
segment
```

```python 關鍵數字 theme={null}
view = df if segment.value is None else df[df["<segment_column>"] == segment.value]

mo.hstack(
    [
        mo.stat(value=f"{len(view):,}", label="資料列"),
        mo.stat(value=f"{view['<metric_column>'].sum():,.0f}", label="<指標名稱>"),
    ]
)
```

```python 明細表 theme={null}
mo.ui.table(view)
```

<Tip>
  如果筆記本需要尚未安裝的 Python 套件，請把它加入一個已建置筆記本映像檔的[沙箱環境](/zh/foundation/sandbox-environments)，並為筆記本選擇該環境。
</Tip>

## 4. 分享

筆記本本來就是共用的：每個筆記本都存放在工作區共用的筆記本資料夾中，工作區成員可以從「**應用程式**」>「**筆記本**」點選「**開啟**」來使用它。

* 每位開啟筆記本的成員都會取得自己的沙盒。筆記本的「**執行中的個體**」分頁會列出目前有誰正在執行。
* 工作區管理員可以在「**存取**」分頁限制誰能看到這個筆記本（當你的工作區提供此分頁時）。
* 沒有公開連結。只有已登入的工作區成員能開啟筆記本。

<Frame>
  <img src="https://mintcdn.com/datagen/rusBmwP8bd_Srmdm/images/browser-guide/zh/apps-list.jpg?fit=max&auto=format&n=rusBmwP8bd_Srmdm&q=85&s=8e13bf5d82ac667aaa02d2521aef4363" alt="應用程式總覽：筆記本與自訂應用程式" width="838" height="863" data-path="images/browser-guide/zh/apps-list.jpg" />
</Frame>

## 你完成了什麼

透過這五個部分，你在 DataGen AI Cloud 上建立了一套完整的內部 AI 工作流程：

| 部分 | 構件 | 成果 |
| - | - | - |
| 1 | 資料 | 一個連線與一個已發布的分析模型 |
| 2 | 檔案 | 一個共用的參考文件資料夾 |
| 3 | 知識庫 | 由文件建立、有版本的知識庫 |
| 4 | Agent | 一個回答問題並每週把報告發到 Slack 的 Agent |
| 5 | 應用（App） | 一個分享給工作區的 marimo 儀表板 |

進一步了解：[應用總覽](/zh/apps/overview)、[建立 App](/zh/apps/build)與[發布與分享](/zh/apps/publish-and-share)。

<CardGroup cols={2}>
  <Card title="上一步：建立 Agent" icon="arrow-left" href="/zh/tutorial/04-build-agent">
    建立 Agent 並排程每週報告。
  </Card>

  <Card title="下一步：應用總覽" icon="arrow-right" href="/zh/apps/overview">
    筆記本與自訂 App，以及各自適合的情境。
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.