レポート
出力を定義し、パラメータを宣言した、保存済みのクエリー。
場所: ワークスペース › ツール › レポート
レポートはスニペットではありません。スニペットはエディタに貼り付けるテキストですが、レポートは実行する成果物です。期待する列、その表示のしかた、求めるパラメータ、どのソースから来るかを保存しています。
だから2回実行すれば同じ結果になり、届いたものが宣言と合わないときは、黙って別の表を見せる代わりに、いちばん上でそう伝えます。
リレーショナルデータベース、MongoDB、Redis、CassandraとScyllaDBで使えます。
キーワード: レポート、保存済みのクエリー、出力
レポートは複数の文にできます。最後の文が、表を作るSELECTであればかまいません。
場所: ワークスペース › ツール › レポート
すべてのレポートが、ひとつのクエリーから出てくるわけではありません。セッション変数を設定し、一時テーブルを何回かに分けて作り、インデックスを付け、最後にそれを読むこともできます。スクリプト全体がひとつの接続で実行されるので、最初の文で作った一時テーブルは、最後の文でもまだ存在します。
最後のSELECTの前に使えるもの:セッションのためのSETとUSE、CREATE TEMPORARY TABLE、そしてこのレポート自身が作ったテーブルへの書き込み(INSERT、UPDATE、DELETE、インデックス、ALTER)。途中の読み取りもできます。
使えないもの:実際のテーブルへの書き込み、TEMPORARYのないCREATE TABLE、SET GLOBAL、PREPARE、EXECUTE、CALL。これは閉じたリストで、それ以外のものは、何かを実行する前に、文の番号とともに拒否されます。
実際のテーブルへのSELECT … INTOも対象外です。いくつかのエンジンでは、そのテーブルを作成してしまうからです。
SQL Server
SQL Serverでは、一時テーブルは名前が#で始まるテーブルで(CREATE TABLE #t、SELECT … INTO #t、DROP TABLE #t)、TEMPORARYは付けません。パラメータなしで作成し、そのあとINSERTで埋めてください。バインドした値はsp_executesqlを通るので、その中で作った一時テーブルは、その文が終わると消えてしまいます。Calíopeは、何かを実行する前にそう伝えます。
ClickHouse
ClickHouseでは、一時テーブルはCREATE TEMPORARY TABLEで作成し、サーバのメモリーの中にあります。HTTPでは文ごとに別のリクエストになるので、Calíopeはレポートを実行するたびに専用のサーバセッションを開き、終わったら一時テーブルを削除します。最初の文の一時テーブルは最後の文にも存在し、ほかの誰にも見えません。アカウントにはCREATE TEMPORARY TABLEの権限が必要です。読み出し専用のアカウントでは最初の文でレポートが失敗し、メッセージがそう伝えます。
Oracle
Oracleでは、レポートの各文は終わるときに確定され、それが一時テーブルの書き方を決めます。GLOBAL TEMPORARY TABLEにはON COMMIT PRESERVE ROWSが必要です。デフォルトのON COMMIT DELETE ROWSでは、最後のSELECTに空のまま届きます。プライベートな一時テーブル(CREATE PRIVATE TEMPORARY TABLE ora$ptt_…)にはON COMMIT PRESERVE DEFINITIONが必要です。デフォルトでは、2つ目の文でもう消えています。終わるとき、Calíopeは同じ接続で一時テーブルを空にして削除します。レポートが失敗したときも同じなので、グローバルな一時テーブルがスキーマに残ることはありません。OracleにはSETもUSEもありません。レポートはアカウントのスキーマで実行され、別のスキーマのテーブルは、そのスキーマを前に付けて書きます(demo.pedidos)。
理由はひとつの約束です。レポートは、あなたのデータに決して触れません。だから午前3時にレポートをスケジュールしても安全なのです。
読み出し専用の環境タグが付いた接続では、レポートは一時テーブルを作成できますが、それ以外は何もできません。
CassandraScyllaDB
CassandraとScyllaDBでは、レポートはひとつのSELECTです。CQLにはセッションのテーブルがなく、複数の文からなるスクリプトは何も実行する前に拒否されます。
キーワード: バッチ、一時テーブル、複数の文、スクリプト、準備
型とデフォルト値を付けて宣言し、クエリーとは別に送られます。
場所: レポート › パラメータを宣言
ツールのツールバーにある「パラメータを宣言」で宣言します。それぞれに名前、型、必須かどうか、渡されるときの値があります。テキストの中では、SQLでは:name、MongoDBのJSONでは$$nameと書きます。
テキストに書いても宣言にはなりません。その方法では宣言できず、宣言されていないマーカーがあると、レポートは検証で失敗します。シートがしてくれるのは、クエリーがすでに使っているものを提案することで、正確な名前で宣言できるようにします。
パラメータは値であり、クエリーの一部ではありません。テキストに貼り込まれることはなく、別にバインドされて送られます。だからそこに何を入力しても、クエリーを壊したり、その動作を変えたりすることはできません。
その代わり、テーブル名をパラメータにすることも、可変長のIN(…)リストをひとつのマーカーで表すこともできません。リストには「リスト」型があり、値の数だけマーカーを展開します。テーブル名には対応しておらず、これは意図的です。
CassandraScyllaDB
CassandraとScyllaDBでは、リストはひとつの値です。IN :idsにはリスト全体が入り、これがCQLの期待する形です。
キーワード: パラメータ、バインド、インジェクション、リスト
どの列を、どの順で、どのタイトルと書式で表示するか。
場所: レポート › 出力
これが、保存済みのクエリーをレポートに変えるものです。列を隠したり、並べ替えたり、独自のタイトルを付けたり、書式(桁区切り、小数点以下2桁、パーセント、通貨、日付、バイト)と配置を選んだりできます。
フッタには、列ごとの集計を加えられます。合計、平均、最小、最大、件数です。NULLは数えません。平均は行の数ではなく、存在する値の数で割ります。
ここで選ぶ順序は表示のためのもので、クエリーを書き換えはしません。
キーワード: 列、書式、集計、グラフ
CSV、TSV、JSON、Markdown、HTML、XML、テキスト、Excel、ページ付きのPDF。
場所: レポート › 書き出す
書き出されるのは、出力が宣言するものです。表示されている列が、その順序で、そのタイトルと書式で書き出されます。「金額」と書いたPDFと「total_eur」と書いたCSVは、同じレポートではありません。
書式を宣言していない列は、CSV、TSV、JSON、XML、Excelには正確な値のまま(すべての小数、桁区切りなし、日付は2020-01-01)書き出されます。別のプログラムが読むからです。PDF、HTML、Markdown、テキストでは、画面に見えるとおりに出力されます。宣言した書式は、いつも書き出されます。
PDFはページ付きで、ヘッダとページ番号が各ページに繰り返されます。集計と通知は最後のページに入ります。
すべてシステムの保存パネルを通ります。Calíopeは、あなたが選んでいないフォルダには決して書き込みません。
キーワード: 書き出し、PDF、Excel、CSV、共有
毎日、毎週、平日、毎月、またはN時間ごと。知っておくべき制限があります。
場所: レポート › スケジュール
スケジュールした実行は、Calíopeが開いている間しか行われません。バックグラウンドのサービスも、デーモンも、起動エージェントもありません。Macではアプリが開いているときに実行され、iPadではフォアグラウンドのときだけです。レポートにバックグラウンドの実行時間が与えられることはありません。
予定の時刻にアプリが閉じていれば、その実行はスキップとして理由とともに履歴に記録され、次の時刻に再試行されます。逃した実行がまとめて行われることはありません。
誰も見ていないときは、各パラメータのデフォルト値が使われます。値のない必須パラメータを作り出すことは決してなく、その実行はスキップとして記録されます。
スケジュールできるのは、リレーショナルサーバのレポートだけです。MongoDB、Redis、Cassandra、ScyllaDBのセッションでは、そのボタンはありません。
Apple Vision Pro:iPadと同じく、フォアグラウンドのときだけです。
キーワード: スケジュール、自動、スキップ
何が、いつ、どの値で、どのマシンで実行されたか。
場所: レポート › 履歴
実行のたびに1行が残ります。何が起きても、キャンセルやスキップも含めてです。どのパラメータで実行したか、何行返したか、どれだけかかったか、どのマシンが実行したか、そしてアドレスが2つあり得る場合は、どちらで接続したかを保存します。
レポートとバックアップは、2つの独立した範囲を持つ同じ履歴を共有します。レポートからバックアップの行が見えることは決してなく、その逆もありません。
180日より古い行は、自動的に削除されます。履歴はこのデバイスにとどまり、iCloudには送られません。
履歴そのものを書き込めなかったとき(たとえばディスクがいっぱいのとき)は、フッタがそう伝えます。そのときは行が欠けていて、見えているのが実行されたもののすべてではありません。
キーワード: 履歴、実行、保持期間、監査
出力のシートで、棒、折れ線、円のグラフをオンにします。ひとつの列がラベルを、数値の列が値を出します。
場所: ワークスペース › ツール › レポート
レポートの出力のシートで、「グラフ」セクションの「グラフを描画」をオンにすると、グラフが表示されます。「種類」(棒、折れ線、円)、ラベルを出す「ラベルの列」、値のための数値の列をひとつ以上選びます。結果に数値の列がひとつもなければ、シートがそう伝えます。
グラフは表の上に描かれます。系列を省かなければならないときはそう表示し、VoiceOverはそれを要約として読み上げます。
キーワード: グラフ、チャート、棒、折れ線、円、レポート
Macでは、結果が画面にあるとき、⌘Pで見ているのと同じ表をプリントします。結果がなければ、メニュー項目は無効です。
場所: キーボードショートカット: ⌘P
Macでは、レポートの結果が画面にあるとき、⌘Pで見ているのと同じ表をプリントします。結果がなければ、メニュー項目は無効です。
レポートのプリントは、Macの機能です。
キーワード: プリント、印刷物、レポート、テーブル、紙