例:パーソナライズされたデータダッシュボードの構築

この例では、Snowflakeデータをクエリし、サードパーティのチャートライブラリを追加して、ビューアーごとに表示をパーソナライズする|sis|アプリの構築手順を説明します。最後には、作成、デプロイ、編集、再デプロイという主要な開発サイクルを理解できます。

アプリはコンテナランタイムを使用します。始める前に、:ref:`前提条件<label-streamlit_prereqs>`を完了していることを確認してください。

サンプルデータの設定

この例では、``dashboard_demo``というデータベースを使用します。アクセスできる任意のデータベースとスキーマに置き換えることができます。SQLとアプリコード内の参照を一致するように更新するだけです。

サンプルの収益データを使用してテーブルを作成します。ワークシートまたはSQLセッションで次のSQLを実行します。

CREATE OR REPLACE TABLE dashboard_demo.public.monthly_revenue (
   month DATE,
   region VARCHAR,
   revenue NUMBER(12, 2)
);

INSERT INTO dashboard_demo.public.monthly_revenue VALUES
   ('2026-01-01', 'North America', 125000.00),
   ('2026-01-01', 'Europe', 98000.00),
   ('2026-01-01', 'Asia Pacific', 87000.00),
   ('2026-02-01', 'North America', 132000.00),
   ('2026-02-01', 'Europe', 101000.00),
   ('2026-02-01', 'Asia Pacific', 93000.00),
   ('2026-03-01', 'North America', 141000.00),
   ('2026-03-01', 'Europe', 110000.00),
   ('2026-03-01', 'Asia Pacific', 99000.00);

アプリコードの記述

ローカルマシンの任意のプロジェクトディレクトリに、次のコードを含む:file:`streamlit_app.py`という名前のファイルを作成します。|sf-web-interface|を使用する予定の場合は、アプリを作成した後にこのコードをエディターに貼り付けることができます。

import streamlit as st
import plotly.express as px

st.title("Revenue Dashboard")
st.write(f"Welcome, {st.user.user_name}!")

conn = st.connection("snowflake")

df = conn.query("""
    SELECT month, region, revenue
    FROM dashboard_demo.public.monthly_revenue
    ORDER BY month
""")

selected_regions = st.multiselect(
    "Filter by region",
    options=df["REGION"].unique(),
    default=df["REGION"].unique(),
)

filtered = df[df["REGION"].isin(selected_regions)]

fig = px.bar(
    filtered,
    x="MONTH",
    y="REVENUE",
    color="REGION",
    barmode="group",
    title="Monthly Revenue by Region",
)
st.plotly_chart(fig, use_container_width=True)

st.dataframe(filtered, use_container_width=True)

このアプリは以下を使用します。

  • conn.query()`を使用してSnowflakeからのデータをクエリします。結果は自動的にキャッシュされるため、キャッシュが期限切れになるまでクエリは1回のみ実行されます。詳細については、 :doc:../app-development/secrets-and-configuration` をご参照ください。

  • st.user.user_name`を使用して現在のビューアーに挨拶します。詳細については、 :doc:../app-development/personalization` をご参照ください。

  • インタラクティブチャートに``plotly``を使用します。これは、次のステップで宣言する外部依存関係です。

依存関係の宣言

コンテナランタイムは、:file:`requirements.txt`ファイルに記載されたパッケージをインストールします。:file:`streamlit_app.py`と一緒に:file:`requirements.txt`ファイルを作成します。

plotly
streamlit

アプリの起動時に、コンテナランタイムは宣言されたパッケージを自動的にインストールします。より複雑な依存関係シナリオの場合は、代わりに:file:pyproject.toml`ファイルを使用できます。詳細については、 :doc:../app-development/dependency-management` をご参照ください。

アプリのデプロイ

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Projects » Streamlit を選択します。

  3. + Streamlit App を選択します。

  4. アプリ名として``revenue_dashboard``を入力します。

  5. データベースとスキーマを選択します。

  6. :ui:`Run on container`を選択し、次にコンピューティングプールとクエリウェアハウスを選択します。

  7. Create を選択します。

  8. エディターで、スターターコードを上記のアプリコードに置き換えます。

  9. :ui:`+`(追加)|raa| :ui:`Create new file`を選択して``requirements.txt``と入力し、内容を貼り付けることで、:file:`requirements.txt`ファイルをアップロードまたは作成します。

  10. Run を選択します。

変更

アプリを編集して、開発サイクルがどのように機能するかを確認してください。:file:`streamlit_app.py`の``filtered = ...``行と``fig = px.bar(...)``行の間に次の2行を挿入して、サマリーメトリックを追加します。

total = filtered["REVENUE"].sum()
st.metric("Total Revenue", f"${total:,.0f}")

ブラウザで編集している場合は、エディタに行を貼り付けて:ui:`Run`を選択します。

編集ワークフローについて詳しくは、:doc:`../app-development/editing-your-app`を参照してください。

クリーンアップする

この例で作成したリソースを削除するには、次のSQLを実行します。

DROP STREAMLIT IF EXISTS dashboard_demo.public.revenue_dashboard;
DROP TABLE IF EXISTS dashboard_demo.public.monthly_revenue;

次の内容