Loading

トピック

Asana のタイムシートと予算を使用している組織では、正確な会計処理と給与計算のために定期的なレポート作成が不可欠です。Asana には、アプリ内で確認できる便利なビューが用意されていますが、月末や四半期末に外部監査やカスタム処理を行うために、ドメイン全体のすべての時間データを CSV 形式でエクスポートする必要がある場合があります。

この記事では、Asana API を使用して、ワークスペース全体の時間エントリを集計し、社内の要件に合った、会計処理に適した CSV にフォーマットする方法について説明します。

ノート iconノート

このガイドはタイムシートと予算アドオンのユーザー向けですが、この API ベースのエクスポート方法は、アドオンを使用していないユーザーが標準の Asana タスクフィールドを介して時間を記録する場合にも利用できます。

API を介してエクスポートする理由

Asana の UI には便利なダッシュボードが用意されていますが、API を介してエクスポートすると、次のことが可能になります。

  • レポートの自動化:財務チームが手動でクリックすることなく、月次または四半期ごとのエクスポートをスケジュールできます。
  • 監査の粒度:タスクのステータス、優先度、エントリー GID など、記録管理に不可欠な特定のメタデータにアクセスできます。
  • システム連携: Asana の時間データを ERP や給与計算ソフトウェアに簡単に取り込めます。

エクスポートのターゲット形式

標準的な会計慣行との互換性を確保するため、エクスポートスクリプトは、レビュアーのエクスポートビューに表示される次のフィールドを含む CSV を生成する必要があります。

説明

タスク名

時間が記録されたタスクのタイトル。

時間 (時間単位)

合計時間 (分単位から 10 進数の時間単位に変換)

日付

作業が実行された特定の日付。

送信者

時間を記録したチームメンバーの名前。

タスク GID

Asana タスクの一意の識別子。

プロジェクト GID

親プロジェクトの一意の識別子。

タスクのステータス

タスクが現在「未完了」か「完了」か。

エントリー GID

特定の時間ログの一意の識別子。

実装: Python を使用したエクスポート

「すべて」の時間をエクスポートするには、スクリプトでプロジェクトを反復処理してタスクを検索し、タスクのタイムトラッキングエントリを取得するエンドポイントを使用して、それらのタスクの時間エントリを取得する必要があります。

前提条件

エクスポートスクリプト

Python 
import Asana
import pandas as pd

# クライアントを初期化
client = asana.Client.access_token('YOUR_PERSONAL_ACCESS_TOKEN')
workspace_gid = 'YOUR_WORKSPACE_GID'

def export_domain_time ():
    all_time_data = []

    # 1. ワークスペース内のすべてのプロジェクトを反復する
    projects = client.projects.get_projects({'ワークスペース': workspace_gid})

    プロジェクトのプロジェクトの場合:
        # 2. プロジェクトのすべてのタスクを取得する
        tasks = client.tasks.get_tasks_for_project(project['gid'], opt_fields=[
            'name', 'gid', 'completed', 'completed_at', 'priority'
        ])       
       
                for task in tasks:
            # 3. 各タスクの時間入力を取得する
            time_entries = client.time_tracking_entries.get_time_tracking_entries_for_task (
                task['gid'],               
                                opt_fields=['created_by.name', 'duration_minutes', 'entered_on', 'gid']
            )           
           
                        for entry in time_entries:
                # 10 進数形式で時間を計算する
                hours = round(entry['duration_minutes'] / 60, 2)

                # CSV テンプレートに合わせて行を作成する
                all_time_data.append({
                    "タスク名": task['name'],
                    "Time (hours)": hours,
                    "日付": entry['entered_on'],
                    "送信者": entry['created_by']['name'],
                    "タスクGID": task['gid'],
                    "プロジェクトGID": project['gid'],
                    "Task Status": "Completed" if task['completed'] else "Open",
                    "Task Completion Date": task.get('completed_at', ''),
                    "タスクの優先度": task.get('priority', ''),
                    "Entry GID": entry['gid']
                })   
   
        # 4. CSV 形式で保存する
    df = pd.DataFrame(all_time_data)
    df.to_csv('asana_time_export_accounting.csv', index=False)
    print("エクスポート完了: asana_time_export_accounting.csv")

export_domain_time()

大規模なドメインの場合の重要な考慮事項

組織全体でこのエクスポートを実行する場合は、次のベストプラクティスを念頭に置いてください。

  • API レート制限: Asana では、1 分間に行えるリクエスト数に制限があります。大規模なドメインの場合は、time.sleep() を追加するか、Asana ライブラリに組み込まれている再試行ロジックを使用することを検討してください。
  • 日付フィルター:月次会計の場合は、スクリプト内の entered_on フィールドを使用して、関連する期間 (前月など) のみをフィルターします。
  • 権限: Personal Access Token が、関連するすべてのプロジェクトにアクセスできるサービスアカウントまたは管理者に属していることを確認してください。そうすることで、エントリーがスキップされることはありません。

Ask the Community

Note iconノート

この記事は AI によって翻訳されています。

翻訳に関するフィードバックを送る。
読み込み中
API を介して Asana の時間データを CSV にエクスポートする | Asana ヘルプセンター