このチュートリアルは説明のみを目的としています。チュートリアルに示されている接続文字列は、インストールされたデータベースには接続しません。チュートリアルで説明したプロセスを実行できるように、独自のサーバーに AdventureWorks データベースをセットアップする場合は、 このGitHubページを参照してください。
このチュートリアルでは、データベースからのデータインポートおよび分析とグラフ作成を行います。その後、OriginのLabTalkスクリプトを使用したデータベースクエリーの更新とデータ再インポートを行うボタンをグラフに追加します。
このチュートリアルでは、以下の項目について解説します。
サーバマシンnoho上にSQLサーバAdventureWorks2008を予めセットアップ済であることを想定しています。
Provider=SQLOLEDB.1; Password=labtalk2015; Persist Security Info=TRUE; USER ID=CONNECT; Initial Catalog=AdventureWorks2008; DATA SOURCE=noho
string pastFrom$ = ""; string pastTo$ = ""; string curFrom$ = ""; string curTo$ = ""; if(exist(strPast1$, 18) == 18) // strPast1$に値があるか確認 { // strPast1$に値がある場合 pastFrom$ = strPast1$; // strPast1 $をpastFrom$に割り当てる } else // strPast1$が定義されていない場合 { pastFrom$ = "1/1/2003"; // 定数文字列をpastFrom$に割り当てる } if(exist(strPast2$, 18) == 18) { pastTo$ = strPast2$; } else { pastTo$ = "3/31/2003"; } if(exist(strCurrent1$, 18) == 18) { curFrom$ = strCurrent1$; } else { curFrom$ = "4/1/2003"; } if(exist(strCurrent2$, 18) == 18) { curTo$ = strCurrent2$; } else { curTo$ = "6/30/2003"; }
SELECT OrderDateTotalDueAndProductSubcategoryID.OrderDate AS 'Order Date', 'Date Range' = CASE WHEN OrderDateTotalDueAndProductSubcategoryID.OrderDate < '%(curFrom$)' THEN 'Past' ELSE 'Current' END, Production.ProductSubcategory.Name AS 'Subcategory Name', OrderDateTotalDueAndProductSubcategoryID.TotalDue AS 'Total Due' FROM (SELECT OrderDateAndTotalDue.OrderDate, OrderDateAndTotalDue.TotalDue, Production.Product.ProductSubcategoryID FROM (SELECT Sales.SalesOrderheader.OrderDate, Sales.SalesOrderDetail.ProductID, Sales.SalesOrderheader.TotalDue FROM Sales.SalesOrderheader INNER JOIN Sales.SalesOrderDetail ON Sales.SalesOrderheader.SalesOrderID=Sales.SalesOrderDetail.SalesOrderID WHERE (Sales.SalesOrderheader.OrderDate BETWEEN '%(pastFrom$)' AND '%(pastTo$)' OR Sales.SalesOrderheader.OrderDate BETWEEN '%(curFrom$)' AND '%(curTo$)')) AS OrderDateAndTotalDue INNER JOIN Production.Product ON OrderDateAndTotalDue.ProductID=Production.Product.ProductID) AS OrderDateTotalDueAndProductSubcategoryID INNER JOIN Production.ProductSubcategory ON OrderDateTotalDueAndProductSubcategoryID.ProductSubcategoryID=Production.ProductSubcategory.ProductSubcategoryID
上の図で確認できるように、合計で3つのLabTalk変数がステートメントの中で使用されています。
B==0 ? 100 : 100*(C-B)/B
col(B)==0 ? 100 : 100*(col(C)-col(B))/col(B)
D > 0 ? 12 : 2
col(D) > 0 ? 12 : 2
結果は次のようになります。
double pastDate1 = date(1/1/2003); double pastDate2 = date(3/31/2003); double currentDate1 = date(4/1/2003); double currentDate2 = date(6/30/2003); // strPast1$, strPast2$, strCurrent1$, strCurrent2$が同時に存在するか確認 if((exist(strPast1$, 18) == 18) && (exist(strPast2$, 18) == 18) && (exist(strCurrent1$, 18) == 18) && (exist(strCurrent2$, 18) == 18)) { // ある場合、ダイアログに表示するようにdouble値に設定します pastDate1 = date(strPast1$); pastDate2 = date(strPast2$); currentDate1 = date(strCurrent1$); currentDate2 = date(strCurrent2$); } // 日付設定のダイアログ GetN (Last Seaon) :@G (From) pastDate1:@FD0 (To) pastDate2:@FD0 (-) :@G (Current Seaon) :@G (From) currentDate1:@FD0 (To) currentDate2:@FD0 (-) :@G (Set Date); // 設定された日付を取得し文字列に変換 string strPast1$ = $(pastDate1, D0); string strPast2$ = $(pastDate2, D0); string strCurrent1$ = $(currentDate1, D0); string strCurrent2$ = $(currentDate2, D0); // 設定された日付に従ってデータベースからデータを再インポート dbimport iw:=[book1]sheet1!; range rPivot = [Book1]Pivot1!; // ピボットテーブル範囲 layer.x.to = rPivot.maxRows+0.5; // 垂直軸の値を設定 rPivot.runfilter(); // データフィルタを実行
テキストオブジェクトがボタンになり、これをクリックすると、入力されたスクリプトが実行されます。