Amazon QuickSight のダッシュボードスナップショット API でも Excel 形式の出力がサポートされたので試してみた

2023.09.04

いわさです。

先日の QuickSight のアップデートで、Paginated Report を使って QuickSight で Excel 形式のレポートを作成出来るようになりました。

上記ブログエントリではスケジュール実行でのレポート配信の様子が検証されています。

さらに、今回のアップデートはプログラム実行による Excel エクスポートもサポートされており、次のスナップショット API を通して S3 バケットへ Excel レポートを出力もサポートされました。

本エントリではダッシュボードスナップショット API を通して Excel レポートの出力を検証してみましたので紹介します。

AWS CLI アップデート

ダッシュボードスナップショット API は AWS CLI でのみサポートされています。
また、今回の Excel エクスポートオプションを指定するためには AWS CLI のバージョンが 1.29.34 以上である必要があります。

% aws-v1 --version
aws-cli/1.29.38 Python/3.9.8 Darwin/22.5.0 botocore/1.31.38

インタラクティブシート & 複数シート指定

ダッシュボードスナップショット API は Paginated Report アドオンをサブスクライブしていることで利用出来るようになる機能です。
ただし、エクスポート対象のシートについてはページ分割シートではなく閲覧者がコンソールから確認する通常のシート(インタラクティブシート)もエクスポート対象とすることが出来ます。

ここでは次のようなテーブルビジュアルを配置し、エクスポート対象に指定してみます。

次のようなパラメータでスナップショットジョブを作成します。

{
    "AwsAccountId": "123456789012",
    "DashboardId": "54a1b9db-2025-436d-a05c-cee7510aaf89",
    "SnapshotJobId": "hoge0901a",
    "UserConfiguration": {
        "AnonymousUsers": [
            {
                "RowLevelPermissionTags": [
                    {
                        "Key": "hoge-key",
                        "Value": "hoge-value"
                    }
                ]
            }
        ]
    },
    "SnapshotConfiguration": {
        "FileGroups": [
            {
                "Files": [
                    {
                        "SheetSelections": [
                            {
                                "SheetId": "54a1b9db-2025-436d-a05c-cee7510aaf89_bb2cb3a0-149f-49a4-b1f2-2a53d425ed34",
                                "SelectionScope": "SELECTED_VISUALS",
                                "VisualIds": [
                                    "54a1b9db-2025-436d-a05c-cee7510aaf89_8cfad577-c068-40b8-bbd2-2398a0ecb4a4"
                                ]
                            }
                        ],
                        "FormatType": "EXCEL"
                    }
                ]
            }
        ],
        "DestinationConfiguration": {
            "S3Destinations": [
                {
                    "BucketConfiguration": {
                        "BucketName": "hoge0730snapshot1",
                        "BucketPrefix": "hoge0901a",
                        "BucketRegion": "ap-northeast-1"
                    }
                }
            ]
        }
    }
}

正常に実行することができました。

% aws quicksight start-dashboard-snapshot-job --cli-input-json file://hoge.json --profile hogeadmin
{
    "Status": 200,
    "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/54a1b9db-2025-436d-a05c-cee7510aaf89/snapshot-job/hogesnapshot1",
    "SnapshotJobId": "hogesnapshot1",
    "RequestId": "20daeb5d-322e-4b9b-bb0d-e9748d5bcac8"
}

上記コマンドでジョブが作成され、数十秒から 1 分後くらいにジョブが完了しました。
スナップショットパラメータで指定した S3 バケットを確認してみると xlsx 形式のファイルが作成されていることが確認出来ます。

ファイルをローカルへダウンロードして Microsoft Excel で開いてみると次のようにコンテンツを確認出来ました。

ちなみに、SelectionScopeオプションにALL_VISUALSを指定した場合はスナップショットジョブの作成に失敗します。

% aws quicksight start-dashboard-snapshot-job --cli-input-json file://hoge.json --profile hogeadmin

An error occurred (InvalidParameterValueException) when calling the StartDashboardSnapshotJob operation: EXCEL only supports generating SELECTED_VISUALS for SheetSelections.SelectionScope.

ページ分割シート

続いて先程と同じくテーブルを配置したシートなのですが、インタラクティブシートではなくページ分割シートの場合でも確認してみます。
また、今回の Excel 出力の場合であれば単一エクスポートファイルに対してシートを複数指定することが出来るようなので先程のインタラクティブシートと併せて出力してみたいと思います。

次のようにスナップショットパラメータにて複数シートを指定しています。

{
    "AwsAccountId": "123456789012",
    "DashboardId": "54a1b9db-2025-436d-a05c-cee7510aaf89",
    "SnapshotJobId": "hoge0901a",
    "UserConfiguration": {
        "AnonymousUsers": [
            {
                "RowLevelPermissionTags": [
                    {
                        "Key": "hoge-key",
                        "Value": "hoge-value"
                    }
                ]
            }
        ]
    },
    "SnapshotConfiguration": {
        "FileGroups": [
            {
                "Files": [
                    {
                        "SheetSelections": [
                            {
                                "SheetId": "54a1b9db-2025-436d-a05c-cee7510aaf89_bb2cb3a0-149f-49a4-b1f2-2a53d425ed34",
                                "SelectionScope": "SELECTED_VISUALS",
                                "VisualIds": [
                                    "54a1b9db-2025-436d-a05c-cee7510aaf89_8cfad577-c068-40b8-bbd2-2398a0ecb4a4"
                                ]
                            },
                            {
                                "SheetId": "54a1b9db-2025-436d-a05c-cee7510aaf89_03fbefb8-f5a8-42df-be34-6067d2ba45ad",
                                "SelectionScope": "SELECTED_VISUALS",
                                "VisualIds": [
                                    "54a1b9db-2025-436d-a05c-cee7510aaf89_fe06aa11-9262-4698-a193-e0e25a85e9a8"
                                ]
                            }
                        ],
                        "FormatType": "EXCEL"
                    }
                ]
            }
        ],
        "DestinationConfiguration": {
            "S3Destinations": [
                {
                    "BucketConfiguration": {
                        "BucketName": "hoge0730snapshot1",
                        "BucketPrefix": "hoge0901a",
                        "BucketRegion": "ap-northeast-1"
                    }
                }
            ]
        }
    }
}

先程と同様に S3 バケットへ Excel 形式のファイルが出力されているので、ローカルダウンロードしてから開いてみます。

確認してみると、次のように複数の Excel シートに分かれていることが確認出来ました。

スナップショットパラメータで複数シートを指定するとこのように Excel シートが分かれる形式になるようです。
以前までのスナップショットパラメータでは複数シート指定が出来なかったのでこれは新しいですね。

サポートされていないビジュアル

なお、サポートされているビジュアルは表形式のテーブルとピボットテーブルのみのようです。
次のように円グラフのページ分割シートで試してみるとどうなるでしょうか。

確認したところ、スナップショット作成ジョブの開始コマンド自体は成功しました。

% aws quicksight start-dashboard-snapshot-job --cli-input-json file://hoge.json --profile hogeadmin
{
    "Status": 200,
    "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/54a1b9db-2025-436d-a05c-cee7510aaf89/snapshot-job/hoge0901b",
    "SnapshotJobId": "hoge0901b",
    "RequestId": "a0a3a6e4-e213-45b6-9ee8-acd33a01d186"
}

しかしジョブのステータスを観察していたところ、暫く経過したのちにステータスが Failed となりました。

% aws quicksight describe-dashboard-snapshot-job --cli-input-json file://hoge2.json --profile hogeadmin 
{
    "AwsAccountId": "123456789012",
    "DashboardId": "54a1b9db-2025-436d-a05c-cee7510aaf89",
    "SnapshotJobId": "hoge0901b",
    "UserConfiguration": {
        "AnonymousUsers": [
            {
                "RowLevelPermissionTagKeys": [
                    "hoge-key"
                ]
            }
        ]
    },
    "SnapshotConfiguration": {
        "FileGroups": [
            {
                "Files": [
                    {
                        "SheetSelections": [
                            {
                                "SheetId": "54a1b9db-2025-436d-a05c-cee7510aaf89_bb2cb3a0-149f-49a4-b1f2-2a53d425ed34",
                                "SelectionScope": "SELECTED_VISUALS",
                                "VisualIds": [
                                    "54a1b9db-2025-436d-a05c-cee7510aaf89_8cfad577-c068-40b8-bbd2-2398a0ecb4a4"
                                ]
                            },
                            {
                                "SheetId": "54a1b9db-2025-436d-a05c-cee7510aaf89_53346441-84f3-4c06-b9f2-42df99041947",
                                "SelectionScope": "SELECTED_VISUALS",
                                "VisualIds": [
                                    "54a1b9db-2025-436d-a05c-cee7510aaf89_e1c031f5-bc57-46b0-9123-b3ef0d968740"
                                ]
                            }
                        ],
                        "FormatType": "EXCEL"
                    }
                ]
            }
        ],
        "DestinationConfiguration": {
            "S3Destinations": [
                {
                    "BucketConfiguration": {
                        "BucketName": "hoge0730snapshot1",
                        "BucketPrefix": "hoge0901b",
                        "BucketRegion": "ap-northeast-1"
                    }
                }
            ]
        },
        "Parameters": {
            "StringParameters": [],
            "IntegerParameters": [],
            "DecimalParameters": [],
            "DateTimeParameters": []
        }
    },
    "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/54a1b9db-2025-436d-a05c-cee7510aaf89/snapshot-job/hoge0901b",
    "JobStatus": "FAILED",
    "CreatedTime": "2023-09-01T06:16:23.066000+09:00",
    "LastUpdatedTime": "2023-09-01T06:18:37.601000+09:00",
    "RequestId": "c0c53776-9db1-4f03-a41d-1d27680cf8c5",
    "Status": 200
}

スナップショット作成に失敗した時はサポートされたビジュアル形式が指定されているか、再度確認してみましょう。

さいごに

本日は Amazon QuickSight のダッシュボードスナップショット API でも Excel 形式の出力がサポートされたので試してみました。

正直言うと、QuickSight から Excel に出力するユースケースが思いついていないのですが、先日登場したばかりのスナップショット API のファイル形式が早速追加された形です。
インタラクティブシートであれば Pagineted Report なしでも使えるようになってくれると有り難いのと、もっと色々なレポート形式に対応してくれると活用の幅が広がりそうです。