データベースからのインポートをLabTalk置換で更新する

サマリー

このチュートリアルはデータベースからのデータをSQLエディタとLabTalk置換を使用してOriginのワークシートにインポートする方法を紹介します。そして、インポートしたデータで棒グラフを作図します。その後、ワークシートデータを更新し、定義したLabTalkの変数を変更して作図します。

ここで使用するSQLデータベースは AdventureWorks データベースです。AdventureWorks データベースの取り付け方法についての詳細情報は、CodePlex のWebサイトを参照してください。

必要なOriginのバージョン: Origin 8.5.1 SR0以降

学習する項目

このチュートリアルでは、以下の項目について解説します。

  • SQLエディタを使ってデータをインポートする
  • SQLステートメント内でLabTalk変換を使う
  • 棒グラフを作図する
  • データベースからのインポートをLabTalk置換で更新する

ステップ

サーバマシンnoho上にSQLサーバAdventureWorks2008を予めセットアップ済であることを想定しています。

データをデータベースからインポートし、棒グラフを作成する

  1. 新しいプロジェクトを開始します。データベースアクセスツールバーのSQLエディタを開くボタンをクリックしてSQLエディタを起動します。
    ImportDataDatabase 1.png
  2. メニューからファイル:接続文字列の編集を選択してテキストボックスに以下の接続文字列を入力します。
    Provider=SQLOLEDB.1; Password=labtalk2015; Persist Security Info=TRUE; USER ID=CONNECT; Initial Catalog=AdventureWorks2008; DATA SOURCE=noho
            
  3. テストボタンをクリックして接続を確認します。大丈夫ならOKをクリックしてデータベースにアクセスします。
  4. SQLエディタでクエリー:LabTalk...と操作し、LabTalkサポート設定ダイアログを開きます。このダイアログではLabTalk置換(%,$)をするのチェックにチェックをつけ、以下のLabTalkスクリプトをクエリー前のスクリプトテキストボックスに貼り付けます。
    string myStartDate$ = "1/1/2003";  // 最初の日付置換 
    string myEndDate$ = "12/31/2003";  // 2番目の日付置換
    string myStrName$ = "LineTotalFor2003";  // 名前         
    ImportDataDatabase 21.png
  5. OKをクリックしてSQLエディタに戻ります。右側のテキストボックスに、以下のSQLステートメントを入力します。
    SELECT Production.ProductCategory.Name, LINETOALANDNAMEYEAR.%(myStrName$) FROM 
                    (SELECT SUM(SALEANDPRODUCTYEAR.LineTotal) AS %(myStrName$), Production.ProductSubcategory.ProductCategoryID                 FROM                         (SELECT SALEINFOYEAR.LineTotal, PRODUCTINFOYEAR.ProductSubcategoryID                         FROM                             (SELECT Sales.SalesOrderheader.OrderDate, Sales.SalesOrderDetail.LineTotal, Sales.SalesOrderDetail.ProductID                             FROM Sales.SalesOrderheader                             INNER JOIN Sales.SalesOrderDetail                             ON Sales.SalesOrderheader.SalesOrderID=Sales.SalesOrderDetail.SalesOrderID                             WHERE Sales.SalesOrderheader.OrderDate BETWEEN '%(myStartDate$)' AND '%(myEndDate$)') AS SALEINFOYEAR                         INNER JOIN                                 (SELECT Production.Product.ProductID, Production.Product.ProductSubcategoryID                                 FROM Production.Product) AS PRODUCTINFOYEAR                         ON SALEINFOYEAR.ProductID=PRODUCTINFOYEAR.ProductID) AS SALEANDPRODUCTYEAR                  INNER JOIN Production.ProductSubcategory                  ON SALEANDPRODUCTYEAR.ProductSubcategoryID=Production.ProductSubcategory.ProductSubcategoryID                  GROUP BY Production.ProductSubcategory.ProductCategoryID) AS LINETOALANDNAMEYEAR          INNER JOIN Production.ProductCategory          ON LINETOALANDNAMEYEAR.ProductCategoryID=Production.ProductCategory.ProductCategoryID         
    ImportDataDatabase 22.png

    上の図で確認できるように、合計で3つのLabTalk変数がステートメントの中で使用されています。

  6. ツールバーの最後のボタンButton db Preview LabTalk Substitute.pngをクリックすると、置換結果を見ることが出来ます。
    ImportDataDatabase 23.png
  7. メニューから、ファイル:アクティブワークシートに保存を選択し、この設定をワークシートに保存します。そして、ワークシートにデータをインポートボタンButton db Import Data.pngをクリックしてインポートを行います。
  8. SQLエディタを閉じます。次の画像で、インポートされたデータを確認出来ます。列Bのロングネームは"LineTotalFor2003"で、LabTalk変数で設定されたものです。
    ImportDataDatabase 24.png
  9. ワークシート内の列Bを選択し、作図:棒グラフ/円グラフ:縦棒グラフと操作して縦棒グラフを作図します。
    ImportDataDatabase 25.png

データベースからのインポートをLabTalk置換で更新する

LabTalk変数myStartDate$myEndDate$myStrName$ は、どの年のデータをデータベースからインポートするかをコントロールするために使用されます。他の年のデータをインポートする一つの方法として、この変数値をLabTalkサポート設定ダイアログで編集する方法があります。

  1. 上記でインポートしたデータが入力されているワークシートをアクティブにします。SQLエディタを開くボタンButton db Create.pngをクリックすると、SQLエディタが保存した設定と共に開きます。
  2. クエリー:LabTalk...と操作し、LabTalkサポート設定ダイアログを開きます。myStartDate$, myEndDate$, myStrName$ の3つの変数の値を変更します。
    string myStartDate$ = "1/1/2004";  // 最初の日付置換
    string myEndDate$ = "12/31/2004";  // 2番目の日付置換
    string myStrName$ = "LineTotalFor2004";  // 名前
            
    ImportDataDatabase 26.png
  3. OKをクリックしてSQLエディタに戻ります。クエリー設定を保存ボタンをクリックし、ワークシートにデータをインポートボタンButton db Import Data.pngをクリックします。SQLエディタを閉じます。
  4. ワークシートのデータとグラフが更新されたことがわかります。
    ImportDataDatabase 27.png
    ImportDataDatabase 28.png

しかし、変数値を編集するためにSQLエディタを開く必要があるので、この方法はあまり便利ではありません。LabTalkサポート設定の修正のより良い方法は、グローバル変数を使用することです。そして、グローバル変数を編集すれば、SQLエディタを使用せずに再インポートできます。

  1. 再度ワークシートをアクティブにして、Button db Create.pngをクリックしてSQLエディタを開きます。
  2. メニューのクエリー:LabTalkを選択して、LabTalkサポート設定を以下のように編集します。
    string myStartDate$ = "";  // 最初の日付置換
    string myEndDate$ = "";  // 2番目の日付置換
    string myStrName$ = "";  // 名前
    if(exist(startDate$, 18) == 18)  // startDate$があるかどうか 
    {
            myStartDate$ = startDate$;  // あれば、それをmyStartDate$として使う
    }
    else
    {
            myStartDate$ = "1/1/2003";  // なければ、1/1/2003 を myStartDate$とする
    }
    if(exist(endDate$, 18) == 18)  // endDate$があるかどうか
    {
            myEndDate$ = endDate$;  // あれば、それをmyEndDate$として使う
    }
    else
    {
            myEndDate$ = "12/31/2003";   // なければ12/31/2003を使う
    }
    if(exist(strName$, 18) == 18)  // strName$があるか
    {
            myStrName$ = strName$;  // あれば、それを strName$として使う
    }
    else
    {
            myStrName$ = "LineTotalFor2003";  // なければLineTotalFor2003をstrName$とする
    }
    ImportDataDatabase 29.png
    SQLエディタクエリー設定を保存ボタンをクリックして、閉じます。
  3. メインメニューのウィンドウ:スクリプトウィンドウを選択して、スクリプトウィンドウを開きます。
  4. スクリプトウィンドウに以下のスクリプトを貼り付け、すべて選択してからキーボードのEnterキーを押して実行します。
    string startDate$ = "1/1/2003"; // startDate$文字列変数を定義
    string endDate$ = "12/31/2004"; //endDate$文字列変数を定義
    string strName$ = "LineTotalFor2003and2004"; // strName文字列変数を定義
    dbimport; // データベースからデータをインポート
            
  5. ワークシートのデータとグラフが更新されます。

Note:

  1. ここでは、3つの「グローバル」LabTalk変数を定義しました。この「グローバル」は、LabTalk変数を「見える」ようにし、SQLエディタの置換で使用できるようにすること意味します。
  2. 最後の dbimport LabTalkコマンドは、データアクセスツールバーのデータのインポートButton db Import Data.pngをクリックするのと同じです。