<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />埃里克·希爾(埃里克·希爾),JMP 首席系統開發人員,SAS
注意:這只是論文的正文;不包括螢幕截圖。請參閱附版本的紙張以獲得整個事情。

查詢產生器
用於將 SQL 資料匯入 JMP 的新 JMP 12 工具
(針對 JMP 12.1 進行了更新)
作者:Eric Hill,JMP 軟體開發人員
內容
- 介紹。 2
第 1 部分:建立連接。 3
第 2 部分:為查詢選擇表。 6
第 3 部分:建置查詢。 11
新增列。 13
儲存查詢。 15
執行查詢。 15
回答問題。 16
- 濾。 19
提示過濾器。 23
- 取樣。 25
編寫您自己的 SQL 。 26
第 4 部分:管理後台查詢。 27
查詢狀態面板28
運行查詢視窗.. 28
第 5 部分:共享查詢。 28
第 6 節:從 JMP 腳本語言 (JSL) 執行查詢。 29
JMP 12.1 有哪些新增功能? 。 31
- 搜尋。 31
新增相關表。 32
作為模板打開。 34
編輯計算列公式。 34
Bug修復。 35
- 結論。 35
介紹
JMP 為您提供了大量觸手可及的分析工具,但如果您無法以您需要的方式將分析所需的資料輸入到 JMP 中,那麼這些工具對您來說毫無用處。JMP 長期以來一直支持透過以下方式將資料從關聯式資料庫匯入 JMP:文件>資料庫>開啟表。 開錶就目前而言還不錯,但它確實有一些明顯的限制:
- 關係資料庫中的大多數數據都以規範化的方式存儲,需要連接才能獲取所需的所有數據,但是開錶不會幫助您進行連線;你必須自己寫SQL。
- 儘管開錶提供了公式編輯器例如,對於建立 WHERE 子句,它不會顯示分類變數的不同值來幫助您對其進行篩選。
- 與他人安全地分享您的查詢可能很困難,因為開錶將您的密碼儲存在它產生的 JSL 腳本的連接字串中。
- 開錶無法協助您完成匯入資料後所需的後處理步驟,例如資料清理、建模類型和格式設定。
查詢產生器是為了解決以下限製而從頭開始設計的開錶,幫助您建立具有提示互動過濾的多表查詢,並可以安全地與同事分享。
在本文中,我將使用查詢產生器具有免費可用的PostgreSQL範例資料庫稱為戴爾商店2 。 PostgreSQL是一個開源資料庫,可以從這裡免費下載:
http://www.postgresql.org/download/
這戴爾商店2範例資料庫可以在這裡找到:
http://wiki.postgresql.org/wiki/Sample_Databases
這戴爾商店2範例資料庫也可用於其他資料庫平台(MySQL、Oracle 和 SQL Server)。
第 1 部分:建立連接
發起查詢產生器使用檔案 > 資料庫 > 查詢產生器從選單中:
您也可以從首頁啟動它JMP 入門版:
最後,在 Windows 上,您也可以找到查詢產生器工具上的家庭窗戶工具列:
啟動後查詢產生器,您將受到歡迎選擇資料庫連接對話框:
這選擇資料庫連接對話框是一個子集開錶窗戶。查詢產生器和開錶使用相同的 ODBC 連接並且實際上共用連接,因此您在任一位置建立的任何連接都會顯示在兩個位置中。
點選新連接...使用現有 DSN 連接到資料庫或建立新 DSN。系統將提示您提供任何所需的憑證:
連接後,JMP 將從連接中檢索架構,以幫助您確保這是您想要的連接:
您也可以查看所選架構中可用的表。 點選下一個繼續下一步。
JMP 12.2 中的新增功能:注意這兩個搜尋盒子裡的模式 – 表格控制板。這些是 JMP 12.1 更新中的新增功能,它們可以在模式和表格列表。我們知道你們中的許多人在給定模式中有數百個模式和數百個表,因此新的搜尋框可以幫助您縮小清單範圍,以便您找到所需的內容。
第 2 部分:為查詢選擇表
圖 1:為查詢選擇表
當您點擊下一個, 這選擇表格將出現對話框。在裡面選擇表格在對話方塊中,您將選擇要包含在查詢中的表格(請參閱圖1多於)。選擇表中的可用的桌子列出您想要包含在查詢中的清單並將它們新增至基本的和中學表格列在右上角。
- 這基本的查詢中的表通常是應從中檢索所有行的表,無論它們在其他表中是否具有匹配的值。這是你的事實表,用資料倉儲術語來說。一個查詢中只能有一個主表。
- 中學表通常是查找表。預設情況下,只有當查詢中某列的值滿足時,輔助表中的行才會包含在查詢中。基本的表中指定列的值匹配中學桌子。這些是你的尺寸表,用資料倉儲術語來說。您可以新增任意數量中學根據需要將表格新增至查詢。
右下角的面板顯示有關所選表格的資訊。這列選項卡顯示有關表中每列的信息,包括它是否是某種類型的鍵:
JMP 12.2 中的新增功能:請注意搜尋框在裡面可用的桌子面板,這是 JMP 12.1 中的新增功能。 當您的架構包含大量表時,可以使用它來尋找您要尋找的表。
這表快照面板顯示資料快照,以便您可以確保表包含您需要的資訊:
通常,在建立查詢時,您會想到一個或多個希望回答的問題,這些問題會決定您的查詢需要包含哪些表。我們正在探索的數據來自一家虛構的 DVD 租賃公司。我想回答的問題是:
- 哪些電影類型帶來的收入最多?
- 哪些演員帶來的收入最多?
這出租表包含該公司生命週期內每個 DVD 租賃事件的記錄,因此該表將成為此查詢的主表。我可以從列面板那個出租具有與外鍵關係的列存貨和顧客表:
圖 2:外鍵
A外鍵關係(也稱為外鍵約束) 表示需要在一個表格的欄位中找到該值首要的關鍵的列其他桌子。從圖2 ,我們可以看到來自庫存_id的欄目租金表必須存在於首要的關鍵的欄目存貨表中的值客戶ID的欄目租金表必須存在於首要的關鍵的欄目顧客表,以及來自的值員工編號租金表的列僅存在於首要的關鍵的欄目職員桌子。對於此查詢,我正在尋找有關租賃的電影的更多信息,而不是參與租賃的工作人員的客戶,因此我將添加存貨表作為輔助表進行查詢。
看著列面板為存貨表,我可以進一步看到外鍵與的關係電影桌子:
圖3:庫存表詳細信息
所以電影表也進入查詢。查看詳細信息電影表,我看到一個租金率列,這應該是我計算收入所需要的,但是我沒有看到任何關於電影的類別或電影中的演員的資訊:
圖 4:膠卷表中的列
然而,縱觀可用的桌子列表,我看到一個電影演員表和一個電影類別表,該表似乎將電影的 ID 映射到其演員和類別,以及演員和類別包含有關參與者和類別的更多資訊的表。所以我也希望在查詢中包含這些表。但是,如果我只是添加這 4 個表,就會出現問題:
圖5:自動加入不成功
中間帶有“X”的“停止標誌”圖示表示 JMP 無法自動連接這兩個表,因此我必須手動設定連接。如果您發現JMP的自動連接功能經常無法完成您需要它做的事情,您可以透過旁邊的紅色小三角形將其關閉選擇表進行查詢。
如果我選擇public.film_actor (t14)並點擊編輯加入按鈕 ( ),編輯條件出現對話框,允許我設定連線。最初,該對話框如下所示:
圖 6:編輯連線條件
因為還不存在連線條件。我要參與film_actor.film_id到庫存.film_id 。為了實現這一點,我只需選擇存貨表從左欄列出並選擇電影_id在兩個列表中:
圖 7:編輯連線條件
同樣,我可以設定連線條件公共電影類別成為庫存.電影_id = 電影_類別.電影_id 。這樣做之後,事情看起來好多了:
圖 8:表之間的聯接有效
所有輔助表都顯示左外連接維恩圖圖示。使用我們剛剛在之間建立的連接電影演員和存貨例如,左外連接意味著全部行從存貨表格(本例中為左表)將包含在查詢中是否有符合項電影演員與否,但僅來自電影演員與中的行相符的表存貨表將被包括在內。
順便說一句, t1 , t2 , t3等,表名稱後面的括號中是當您將表新增至查詢時 JMP 指派給表的表別名。表別名可以更輕鬆地產生正確的 SQL,並使產生的 SQL 更具可讀性。您可以透過右鍵單擊表中的表來更改表的表別名基本的或者中學表格列表和選擇更改別名。表別名不能包含空格或特殊字元。
如果您需要左外連接以外的其他連接,可以使用編輯加入對話。連接類型和維恩圖圖示將會變更以反映複選框的狀態。
圖 9:更改連線類型
要檢查連接設定是否正確,您可以按一下預覽加入按鈕。這將運行查詢並顯示前幾百行資料的快照,以便您可以檢查情況是否正確。
現在我們已經擁有了查詢中所需的所有表,我們可以單擊建構查詢提出查詢產生器本身,我們可以在其中指定要在查詢中包含哪些欄位、要使用的篩選條件、結果資料應如何排序等等。
第 3 部分:建置查詢
當。。。的時候查詢產生器此查詢最初出現窗口,如下所示:
- 這查詢名稱框保存查詢的名稱,預設為主表的名稱。這查詢名稱是指派給執行查詢所產生的 JMP 資料表的名稱,也是將查詢儲存到檔案時的預設檔名。這資料來源顯示查詢正在使用的資料來源的名稱。
- 這表格框顯示目前查詢中的表。若要新增或刪除表或變更連接,請按一下改變…按鈕。
- 這可用列清單顯示查詢中所有表格的所有欄位。從此列表中選擇列並將它們拖曳到包含的列,過濾器, 或者訂購方式面板。或者,如果您願意,可以透過右鍵單擊選項來完成相同的操作。
JMP 12.1 中的新增功能:這可用列面板現在有一個搜尋框,以防您需要在長列表中查找特定列。與其他一樣搜尋框,它會在您鍵入時進行過濾。 - 這包含的列面板顯示查詢包含的所有列的網格。使用包含的列grid 用於設定列資料匯入 JMP 後應具有的格式和建模類型等內容。您也可以指定聚合透過...分組如果您希望在資料進入 JMP 之前對資料進行匯總,請使用列。
還有一個樣本此面板中的選項卡用於在伺服器上產生資料的隨機樣本,適用於支援採樣的資料庫。 - 這查詢預覽該區域中的選項卡會自動更新,以顯示您的查詢在執行時將傳回的資料的快照。 這SQL選項卡顯示的 SQL查詢產生器正在根據當前選擇生成。這查詢後腳本選項卡可讓您指定將在查詢完成後執行的 JSL 腳本。這查詢狀態選項卡顯示在背景執行的查詢的狀態並允許您取消它們。
- 這過濾器面板可讓您指定過濾資料的條件(建立 WHERE 子句)並將篩選器轉換為每次執行查詢時執行的提示。
- 這訂購方式面板可讓您指定用於對傳回的行進行排序的列(ORDER BY 子句)。
新增列
每個查詢都需要一些列。使用下列任一方法將列新增至查詢:
- 點選全部添加按鈕新增查詢中所有表中的所有可用列
- 從中選擇特定列可用列列出並單擊添加或將它們拖過去。
- 按兩下其中的一列可用列列表。
對於這個查詢,我將添加電影_id ,標題, 和租金率來自電影桌子,類別_id和姓名來自類別表,以及演員 ID ,名, 和姓來自演員桌子。
圖 10:最初新增列後
使用JMP 名稱,建模類型和格式的列包含的列,我可以控制資料匯入JMP後每列的名稱、建模類型和格式。
圖 11:調整列詳細資料後
出於分析的目的,我還希望將演員姓名連接在單一列中,而不是分成單獨的列名和姓列。為了實現這一點,我可以添加一個計算列透過選擇新增計算列從紅色小三角選單可用列控制板。
這將會新增一個名為計算1到可用列列表,但我可以右鍵單擊它並使用重新命名列將其重命名為演員姓名,將其新增至查詢並刪除名和姓。以下是執行此操作後查詢預覽的外觀:
圖 12:計算列的查詢預覽
(這些 Actor Name 值可能看起來有點奇怪,但這些實際上是資料庫中的正確名稱。演員的名字似乎是透過隨機配對名字和姓氏而產生的。)
儲存查詢
此時,我在這個查詢上投入了足夠的時間,我想保存它,這樣我就不會失去我的工作。只需單擊節省按鈕位於右下角查詢產生器視窗保存查詢。系統將提示您提供文件名,其中包含文字查詢名稱預設提供框。我將命名查詢電影類別演員。螢幕左下角將會顯示一則訊息查詢產生器確認查詢已儲存的視窗:
儲存查詢會建立一個文件.jmpquery擴大。回到上查詢產生器窗口,你會注意到查詢名稱已更改為匹配文件名,所以現在是電影類別演員。
如果您需要建立另一個與您開啟的查詢類似的查詢,但您想要保留原始查詢,則可以使用另存為…按鈕以使用不同的名稱儲存副本。
執行查詢
此時,我還可以執行查詢來建立一個包含資料庫中所有行的 JMP 資料表。點選執行查詢按鈕位於底部查詢產生器視窗來執行查詢。 預設情況下,JMP 在背景執行查詢,以便您可以在查詢執行時繼續工作。使用查詢狀態視窗底部中心部分的標籤可查看仍在處理中的查詢的狀態查詢產生器窗口,或使用檢視 > 執行查詢查看目前在背景執行的所有查詢的狀態。這個特定的查詢只需要一兩秒,傳回 88,020 行:
圖 13:JMP 資料表中的查詢結果
請注意,產生的 JMP 資料表有 3 個腳本和一個SQL表變數定義:
回答問題
此時,我已經接近能夠回答我一直在尋求答案的原始問題了,但是我需要做出一個決定:我是想讓數據庫總結結果,還是想讓原始數據帶入數據庫?JMP 並讓JMP 來做這項工作嗎?If the raw data is not too large to fit in memory and does not take a prohibitively long time to import, then importing the raw data into JMP and doing the analysis there as many advantages – JMP is much more capable of analyzing data than a relational資料庫.
對於手邊的任務,使用分配平台上分類名稱和演員姓名, 使用租金率作為頻率多變的。如果我對結果直方圖進行排序計數升序,我得到的結果回答了我們兩個問題:
圖14:使用分發平台處理查詢結果
但是,如果引入所有原始資料的大小或經過的時間令人望而卻步,我可以作為替代方法使用聚合欄位中的包含的列面板讓資料庫匯總資料。然而,為此,我需要一次回答兩個問題。
回答以下問題哪些電影類型帶來的收入最多? , 我可以從查詢中刪除與演員資訊相關的列,並要求資料庫進行求和租金率分組依據分類名稱,然後我可以按總和對結果進行排序租金率。步驟如下:
- 點選聚合列為租金率並選擇和。
請注意透過...分組檢查所有沒有指定聚合的變數。一旦查詢中的任何列指定了聚合,查詢中的所有列都會執行聚合操作不是指定一個聚合必須是透過...分組列。 - 右鍵單擊變數名列為租金率並選擇訂購方式。
- 選擇SUM(t4.租金率)在裡面訂購依據面板並點擊向下箭頭按鈕 (降序)。
結果如下:
同樣,取出類別列並將演員列放回原位,我可以回答以下問題哪些演員帶來的收入最多? :
濾
讓我們回到查詢正在檢索所有原始資料並且我們正在使用的狀態分配回答我們收入問題的平台。在 JMP 中進行分析時,我們可以選擇的一種選擇是請求用於 JMP 分析的腳本:
然後我可以將該腳本貼到查詢後腳本小組的查詢產生器:
圖 15:新增查詢後 JSL 腳本
現在,每次執行查詢時都會執行該腳本。
現在,我想稍微完善一下我的問題。我可能不想查看資料庫中所有租賃的類別和演員收入,而是根據租賃電影的國家/地區、租賃電影的商店或特定日期範圍來查看它。
這出租表有租賃日期, 和客戶ID領域,所以我即將獲得我需要的東西。我們之前看到客戶ID是對的外鍵引用顧客桌子。來自顧客表中,我們可以取得客戶所在的國家/地區以及租借 DVD 的商店。
如果我點擊改變…按鈕在表格在查詢產生器面板中,我可以返回並向查詢添加更多表。要獲取國家/地區信息,我需要添加顧客,地址,城市, 和國家表到查詢。幸運的是,透過該資料庫管理員設定的關鍵關係,所有表都成功自動連線。
新增必要的附加表後,回到查詢產生器,我可以將所需的列新增到查詢:租賃日期,商店ID , 和國家。我還設定了友好的 JMP 名稱並更正了建模類型商店ID :
圖 16:新增租賃日期、商店 ID 和國家/地區欄位後
首先,讓我們過濾客戶所在的國家。我可以右鍵單擊t7.國家變數在包含的列面板並選擇濾。執行此操作後,國家/地區過濾器將出現在過濾器控制板:
圖 17:國家過濾器
此時,我可以簡單地向下滾動國家/地區列表並檢查我感興趣的國家/地區,然後運行查詢,並且僅包含來自這些國家/地區的行。
同樣,我可以添加過濾器商店ID和租賃日期,之後「過濾器」面板如下所示:
當我添加租賃日期過濾器,因為它是連續變量,所以我得到簡單比較預設過濾。我想要的是範圍篩選。使用旁邊的紅色小三角選單t1.租賃日期,我可以將過濾器類型變更為範圍:
現在過濾器為t1.租賃日期好像:
允許我指定日期範圍。因此,如果我想查找 2005 年下半年以來的所有租金,我可以這樣做:
圖 18:日期範圍過濾器
中的所有過濾器類型查詢產生器有一種方法可以讓您有效地停用它們,從而允許您向查詢添加多個過濾器,即使並非所有過濾器對於給定查詢都處於活動狀態。對於顯示值清單的分類過濾器,選擇(全部)頂部的項目禁用過濾器。對於請求數值的過濾器,將值設為遺失的(.)停用過濾器(或過濾器的一部分)。因此,如果我想要 2006 年 1 月 1 日以後的所有租金,我可以這樣做:
現在過濾器我的查詢面板看起來像圖19以下。
| 圖 19:使用 Missing 來停用濾鏡 | 圖 20:具有兩個 OR 組的過濾器 |
過濾器選擇如圖所示圖19 ,現在執行查詢將返回客戶所在國家/地區為法國或德國的行,並且該DVD 是在2006 年1 月1 日或之後在商店2 租用的。預設情況下,多個篩選器會透過AND 組合在一起,因此一行必須匹配所有篩選器過濾器出現在結果中。如果您需要 OR 過濾器,請按一下或者按鈕,這將建立另一個過濾器組,並且這兩個過濾器組將被或運算在一起。例如,如圖所示的過濾器圖20以上返回類別為的租金戲劇或者電影標題包含“桶” 。
提示過濾器
雖然很高興能夠在中指定過濾條件查詢產生器,您可能還想建立一個查詢供其他人使用,而這些人實際上並不需要提供整個查詢查詢產生器使用者介面,但您希望他們每次執行查詢時都能夠輸入不同的過濾條件。完成此操作的最簡單方法是選擇運行時全部提示從旁邊的紅色小三角選單過濾器:
這會將查詢中的所有篩選器變成提示過濾器。如果您只想提示某些過濾器而不提示其他過濾器,則可以使用其紅色小三角選單為每個單獨的過濾器開啟和關閉提示。
設定後運行時全部提示,當我執行此查詢時,系統會提示我按照我想要的方式設定過濾器值:
提示的預設設定將是在中選擇的任何設置查詢產生器(如果直接從文件執行查詢,則在已儲存的查詢文件中)在執行查詢之前。
您也可以自訂提示中使用的標籤。例如,假設不是“國家: “我想要提示說”客戶國家: 」。返回查詢產生器,使用紅色小三角選單t7.國家過濾、選擇設定提示。這會彈出一個對話框,允許您更改提示的標籤,也可以更改提供提示類別層級的表:
取樣
如果您的資料庫支援隨機抽樣,樣本頂部中心部分的選項卡查詢產生器將顯示您的資料庫支援的採樣選項。 我在本文中的範例中一直使用 PostgreSQL,它支援對指定行數進行簡單隨機取樣:
SQL Server 和 Oracle 支援不同的取樣選項,因此樣本選項卡將反映不同的選項:
| 圖 21:SQL Server 取樣選項 | 圖 22:Oracle 採樣選項 |
進行抽樣透過資料庫,在資料下載到 JMP 之前,因此這是限制從查詢檢索的行數的好方法,否則會檢索到大量的行。
編寫您自己的 SQL
我們認識到,盡可能多的功能查詢產生器現在或將來可能有,有時您可能需要一個查詢來執行以下操作查詢產生器不直接支援。此外,許多人已經編寫並精心調試了一些 SQL,這些 SQL 可以準確執行您需要 JMP 執行的查詢。查詢產生器有兩個選項可用於為查詢提供您自己的 SQL:
- 自訂過濾器表達式- 如果查詢產生器正在執行您需要的操作,即選擇表並指定要包含的列,但您只想將自訂 SQL 表達式作為過濾器的一部分包含在內,您可以選擇新增自訂表達式來自過濾器紅色小三角菜單:
| 圖 23:新增自訂過濾器表達式 | 圖 24:最終的過濾器 |
在其中輸入您想要的任何 SQL自訂表達框,只要它是查詢的有效 SQL。
如果一個自訂表達過濾器設定為提示過濾器,自訂表達式將出現在過濾器提示對話方塊中並且可以編輯。
- 將整個查詢轉換為自訂 SQL 查詢– 如果您只想為整個查詢編寫自己的 SQL,那麼在啟動後查詢產生器並指定資料連接,您可以使用左上角的紅色小三角選單查詢產生器旁邊的查詢名稱字段並選擇轉換為自訂 SQL :
圖 25:轉換為自訂 SQL
這查詢產生器視窗將切換到自訂 SQL 模式,給您一個大區域來輸入您自己的 SQL。如果您已開始以互動方式建立查詢,自訂SQL框將使用根據您目前所做的選擇產生的 SQL 進行初始化(請參閱圖26以下)。
圖 26:自訂 SQL 查詢
您可以根據需要編輯 SQL,或從其他來源貼上 SQL,然後按一下更新按鈕來更新查詢預覽。一些注意事項:
- 您無法使用自訂 SQL 查詢進行提示篩選。
- 將查詢轉換為自訂 SQL 並編輯 SQL 後,如果將查詢還原為互動式,您將遺失對 SQL 所做的任何自訂。 查詢產生器不會嘗試解釋 SQL。
第 4 部分:管理後台查詢
查詢產生器預設會在背景執行查詢,也可以從 JMP 腳本語言 (JSL) 在背景執行查詢(請參閱第 6 節)。JMP 提供兩種方式供您查看目前正在執行的後台查詢的列表,並在必要時停止執行查詢。
查詢狀態面板
在查詢產生器的底部中間部分,有一個查詢狀態標籤。啟動的任何後台查詢從該查詢生成器視窗將出現在該選項卡中:
如果您想停止正在執行的查詢,只需在清單中選擇它並點擊停止按鈕。如果已檢索到某些行,JMP 將開啟一個包含已檢索的行的資料表。資料表的名稱將反映出結果是部分的。
運行查詢視窗
來自看法主視窗或其他包含選單的 JMP 視窗上的選單,選擇執行查詢。這將打開一個看起來與查詢狀態的選項卡查詢產生器,但是執行查詢視窗將包含全部目前在背景執行的查詢,無論它們是如何呼叫的(查詢產生器視窗或 JMP 腳本語言):
再次選擇查詢並點擊停止阻止它運行,打開任何部分結果。
第 5 部分:共享查詢
在簡介中提到,開錶創建了難以共享的腳本,因為資料庫密碼包含在連接字串中。查詢產生器工作方式不同。 如果您儲存一個.jmpquery其連接需要密碼的查詢的文件,並且您在文字編輯器中打開該文件,您將看到如下內容:
您可以看到用戶名(使用者識別碼) 存在於連接字串中,但隨後您會看到密碼=%_PWD_% 。“%_PWD_%”不是密碼;它是查詢產生器放置的佔位符。當查詢產生器看到該佔位符時,它知道最初需要密碼,因此如果在使用者開啟該查詢時開啟該查詢尚未與該查詢建立連接Postgres dvdrental DSN、查詢產生器會知道提示使用者輸入密碼。
那麼 DSN 本身又如何呢?如果您將此 .jmpquery 檔案傳送給沒有名為 DSN 的 JMP 用戶,會怎麼樣? Postgres dvdrental在他們的機器上定義的?開錶在這種情況下無法繼續,但是查詢產生器將通知用戶這種情況,並讓他們有機會連接到不同的 DSN(可能連接到相同資料庫)或建立新的 DSN。
由於不同使用者可能在其電腦上定義不同的 DSN,因此一些組織已轉向無 DSN 連接。查詢產生器目前無法將基於 DSN 的連接字串轉換為無 DSN 的連接字串,但如果您變更查詢腳本中的連接字串,則不必指定數據服務網絡,它指定了一個司機和伺服器,查詢產生器將在其產生的任何腳本或 .jmpquery 檔案中傳播此無 DSN 連線。
第 6 節:從 JMP 腳本語言 (JSL) 執行查詢
查詢產生器建構的查詢也可以從下列位置執行JMP 腳本語言 (JSL)腳本。 最好的選擇是將查詢另存為.jmpquery文件,從 JSL 打開它,然後運行它。 例如,假設您有一個查詢保存在c:\使用者\公用\臨時資料夾名為pg_rentals.jmpquery 。您可以使用 JSL 中的查詢檔案執行下列操作:
打開( “c:\用戶\公共\臨時\pg_rentals.jmpquery” ) ;
詢問=打開( “c:\用戶\公共\臨時\pg_rentals.jmpquery” ,私人的) ;
詢問<<調整;
詢問<<跑步() ;
- 在前台執行查詢。 查詢完成後,產生的資料表將在 JMP 中開啟。 dtResult 將是對結果資料表的參考。
dt結果=詢問<<運作前台() ;
- 在前台執行查詢,但執行不是在 JMP 中開啟結果資料表;保密。dtResult 將是對結果資料表的參考。
dt結果=詢問<<運作前台(私人的) ;
- 在背景執行查詢。 查詢完成後,產生的資料表將在 JMP 中開啟。 執行後台無法傳回對結果資料表的引用,因為查詢只是在背景啟動。下面的範例展示如何在背景執行查詢時取得對結果資料表的參考。
詢問<<運行背景() ;
- 在背景執行查詢。 如果查詢成功,則對結果資料表呼叫分發平台(查詢結果是一個特殊的 JSL 變數運行完成時引用結果資料表的腳本)。 如果查詢被使用者取消或出現錯誤,請將訊息寫入 JMP 日誌。
詢問<<運行背景(
運行完成時(
查詢結果<<分配(名義分佈(柱子( :標題) ) ) ;
) ,
運行中取消(寫( “\!N查詢已取消!”) ) ,
出錯時(寫( “\!N執行查詢時出錯!”) ; )
) ;
- 在背景執行查詢。成功完成查詢後,呼叫 MyFunc 函數。 查詢結果資料表始終作為第一個參數傳遞給函數。
::我的函數=功能( { dt } , {預設本地} ,
寫( "\!n出租數量: " , N行( dt ) ) ;
dt <<分配(名義分佈(柱子( :標題) ) ) ;
) ;
詢問<<運行背景(運行完成時( ::我的函數) ) ;
如果從 JSL 腳本中的單獨 .jmpquery 檔案開啟查詢不令人滿意,您可以從 JSL 腳本左上角的紅色小三角選單取得用於建立查詢可編寫腳本物件的原始腳本。查詢產生器窗戶:
例如,調用將運行腳本儲存到腳本視窗對於一個簡單的查詢給我:
新的 SQL 查詢傳回一個 SQL 查詢可編寫腳本的對象,就像打開打開 .jmpquery 檔案時執行此操作,並且可以以所有相同的方式使用。
JMP 12.1 有哪些新增功能?
搜尋
我們交談過的許多人的資料庫中都有數百個架構、表和列中的大量資料。在 JMP 12.1 版本的查詢產生器中,我們新增了搜尋模式、表格和列清單中的方塊可協助您快速找到所需的內容:
所有這些搜尋框會在您鍵入時更新,並且您可以選擇使用常用表達優化您的搜尋。
新增相關表
在裡面選擇表進行查詢在對話方塊中,如果已新增至查詢的表具有對其他表的外鍵引用,則可以透過按一下新增相關表按鈕。
作為模板打開
通常,您需要建立一個與您已建置並儲存至 .jmpquery 檔案的另一個查詢非常相似的查詢。您始終可以開啟先前儲存的查詢,對其進行更改,然後使用另存為將其保存到不同的 .jmpquery 文件,但如果您不小心點擊了節省如果錯誤的話,您的原始查詢將被覆蓋。這作為模板打開存在功能可以防止這種情況發生。作為模板打開可從 Mac 和 Windows 上的 .jmpquery 檔案的主視窗上下文功能表中找到:
當您打開 .jmpquery 作為模板時,您實際上是在打開一個複製與磁碟上的 .jmpquery 檔案沒有關聯的原始查詢的內容。如果您已將查詢開啟為範本、進行了更改並意外點擊了節省按鈕,系統將提示您提供用於儲存查詢的檔案。
您也可以從 JMP 腳本語言 (JSL) 開啟 .jmpquery 檔案作為範本:
打開( “C:\Users\Public\Temp\rentals.jmpquery” ,作為模板) ;
編輯計算列公式
在 JMP 12.0 中,您可以為查詢新增計算列,該計算列將在資料庫伺服器上計算,並在查詢中傳回結果值。但是,如果您需要編輯先前建立的計算列的公式,則無法執行此操作。相反,您必須刪除計算列並新增一個新列,這可能需要您重新建立一個複雜的公式。在 JMP 12.1 中,您現在可以選擇編輯計算列。只需右鍵單擊該列即可可用列並選擇編輯公式:
Bug修復
正如您所期望的,我們修復了 JMP 12.1 中查詢產生器中的許多錯誤,其中一些是客戶報告的。如果您在使用查詢產生器時遇到問題,請透過 SAS 技術支援報告問題,以便我們解決。
結論
查詢產生器是 JMP 12 中的一項新功能(在 JMP 12.1 中更新),可協助您針對關聯式資料庫建立高度自訂的多表 SQL 查詢。目標是讓您能夠比以前更輕鬆地將資料以分析就緒形式更快地匯入 JMP,並更輕鬆地安全地共享您的查詢。我們希望您嘗試並向我們發送反饋( eric.hill@jmp.com )什麼對你有效,什麼對你無效。