dbSheetClient格闘編(2)

SQLの「Q」は、Queryの略です。
直訳すると「質問する」「照会する」「問い合わせる」などの意味です。
皆さんが「ググる」(Googleで検索する)時の検索キーワードもQueryです。
ユーザーがQueryして「そうそうコレコレ、これが知りたかったの!」というレスポンスを返し続けるシステムが優れたシステムなのです。

Where句
下記は、格闘編(1)の説明に使った売上データテーブルです。
例えば、このテーブルから九州支店と四国支店の売上データを抽出する場合のQueryを考えてみましょう。

下記の2つのWhere句を使ったSQLは、いずれも抽出条件が固定されてしまって使い勝手が良くありません。

distinctとorder by
筆者がdbSheetClientのタスクタイプを調べたところ、「検索付きデータ照会」が使えそうな気がしました。
下記SQLのdistinctは計上データの「部署」を抽出してくれます。
「検索付きデータ照会」は、抽出された部署からチェックボックスで複数の部署を指定できます。

部署コード順に表示させる場合は、order byを使います。(※部署コードを選択画面で非表示にすることも可)

抽出条件を受け渡すマクロ
タスクタイプ「検索付きデータ照会」で選択した部署を使って、どのようにレコードを抽出したらよいか。
筆者は、セルに展開された選択部署をシングルクオーテーションで囲んでカンマ区切りに結合するマクロを作成することにしました。
初めてのマクロでしたが、幸運にも筆者の周囲には優しく教えてくれるVBAの達人たちがいました^^
作成したマクロをタスクタイプ「マクロ実行」で実行します。
結合した部署をセットしたセルに「選択支店」という名前を付けてQueryに引用します。
タスクタイプ「マクロ実行」で「再計算」を実行しておくことがコツです。
これはdbSheetClientの作法の一つで、再計算しないとマクロで結合した結果が「選択支店」に反映されません。
これがわからなくて途方に暮れました^^;

dbSheetClientの進化
その後、dbSheetClientのバージョンアップで、タスクタイプ「変数演算」や配列変数機能が追加されました。
筆者がマクロを使って悪戦苦闘していた処理は、よりスマートに実現できるようになりました。

デヂエを凌駕した全文検索
サイボウズ社の「デヂエ」では検索機能が便利でした。
ユーザーは、当然のように同じ機能をリクエストしてきます。
検索窓にキーワードを入力して「検索」ボタンをクリックすると、キーワードが含まれたレコードがヒットします。
キーワードを含む場所は、どの項目でも構いませんでした。
ただし、弱点があって、「A」(全角)と「A」(半角)が区別され、「A」(全角)では「A」(半角)がヒットしません。
さらに「デヂエ」後継の「Kintone」では、1文字のキーワードは受け付けてくれませんでした(泣)
dbSheetClientでは、この全文検索機能が簡単に実装できます。(実はlikeとかstr、かなり格闘しました^^;)
しかも、「a」と入力すれば、「A」(全角)でも「A」(半角)でも「a」(全角)でも「a」(半角)でもヒット!
例えば、「king」と打てば、「King」でも「KING」でもヒットしました。
ユーザーは大喜びでした^^(注)お使いのデータベースによるかもしれません。
次回は、「抽出データをどうすればそのまま活用できるか?」という課題との格闘です。

皆さん本日もお疲れ様でした!
おやすみなさい(挙手)