このページはCalíope 1.7を紹介しています。私がいま作っているバージョンです。1.6は、Mac、iPad、iPhone、Apple Watch、Apple TV、Apple Vision Pro向けにApp Storeで公開中です。それぞれの機能がどのバージョンで入ったかは変更履歴に書いてあります。

すべてのトピックに「Calíopeで開く」ボタンを追加します。アプリがインストールされている場合にのみ機能します。

レポート

レポート

出力を定義し、パラメータを宣言した、保存済みのクエリー。

場所: ワークスペース › ツール › レポート

レポートはスニペットではありません。スニペットはエディタに貼り付けるテキストですが、レポートは実行する成果物です。期待する列、その表示のしかた、求めるパラメータ、どのソースから来るかを保存しています。

だから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の機能です。

キーワード: プリント、印刷物、レポート、テーブル、紙