2017-08-10 82 views
14

enter image description here我正在使用與Mysql集成的元數據庫進行報告。我瀏覽了文檔,但無法找到任何解釋如何在基於SQL的問題中實現過濾器的示例。元數據庫過濾器示例

我發現的唯一例子是關於日期範圍和字段過濾器,但不是文本和數字。

任何人都可以提供有關如何使用文本過濾器的文檔或任何示例。

我使用的元數據庫版本v0.24.2

查詢我試圖運行是這個

SELECT @a:[email protected]+1 "Serial Number", ssk_transaction.transactionId AS "TranId", 
t2.typeName AS "Transaction Type", 
ssk_transaction.createdTime AS "GenDate", t3.deviceName AS "Machine Name", 
t3.deviceLocation AS "Machine Location", t9.eventApiName AS 'API Name' , 
t8.vendorResultCode AS 'Last API Response', 
(SELECT createdTime FROM ssk_transaction_event_detail t4 WHERE t4.transactionId 
= ssk_transaction.transactionId ORDER BY id DESC LIMIT 1) AS "Last API Called", 
(SELECT IFNULL(SUM(t5.itemName * t4.itemCount), 0) FROM 
ssk_transaction_cash_detail t4 
LEFT JOIN ssk_inventory_item t5 ON (t4.itemId = t5.itemId) 
LEFT JOIN ssk_inventory_category t10 ON (t5.categoryId = t10.categoryId) 
WHERE t4.transactionId = ssk_transaction.transactionId AND t10.categoryName = 'acceptor') "Cash In", 
(SELECT IFNULL(SUM(t5.itemName * t4.itemCount), 0) FROM  ssk_transaction_cash_detail t4 
LEFT JOIN ssk_inventory_item t5 ON (t4.itemId = t5.itemId) 
LEFT JOIN ssk_inventory_category t10 ON (t5.categoryId = t10.categoryId) 
WHERE t4.transactionId = ssk_transaction.transactionId AND t10.categoryName = 'dispenser') "Cash Returned", 
IFNULL((SELECT "Cash In"), 0) - IFNULL((SELECT "Cash Returned"), 0) AS "Amount of Activity", 
(SELECT t8.vendorResultCode FROM ssk_transaction_event_detail t8 WHERE  t8.transactionId = ssk_transaction.transactionId AND t8.eventId = 6 ORDER BY id  DESC LIMIT 1) AS "Sim Status", 
'Completed' AS "Transaction Status", 
ssk_transaction.customerMsisdn AS MSISDN, 
ssk_transaction.customerCNIC AS CNIC 
FROM (SELECT @a:=0) initvars, ssk_transaction 
LEFT JOIN ssk_transaction_type t2 ON (ssk_transaction.typeId = t2.typeId) 
LEFT JOIN ssk_device t3 ON (ssk_transaction.deviceUUID = t3.deviceUUID) 
LEFT JOIN ssk_transaction_cash_detail t6 ON (ssk_transaction.transactionId =  t6.transactionId) 
LEFT JOIN ssk_inventory_item t7 ON (t6.itemId = t7.itemId) 
LEFT JOIN ssk_transaction_event_detail t8 ON (ssk_transaction.transactionId = t8.transactionId AND t8.eventId = 10) 
LEFT JOIN ssk_transaction_event t9 ON (t9.eventId = t8.eventId) 
WHERE {{created_at}} AND {{id}} [[AND ssk_transaction.customerMsisdn=  {{msisdn}}]] AND {{cnic}} and t2.typeId = 3 AND t8.eventId = 10 AND  t8.vendorResultCode = '405000000' 
GROUP BY ssk_transaction.transactionId 
ORDER BY ssk_transaction.createdTime ASC 
+0

它缺少過濾器中的列別名。變量{{createdAt}},{{id}}和{{cnic}}不會與其各自的列進行比較。它應該是這樣的: createdAt = {{created_at}} AND id = {{id}} [[AND ssk_transaction.customerMsisdn = {{msisdn}}]] AND cnic = {{cnic}} 但是,假設變量與列名稱匹配,所以您應該修復查詢以使用正確的列。 – fgasparini

+0

其餘的varialbles被設置爲字段過濾器,並正在正常工作只有文本的人給我一個問題 – Anas

回答

4

公開賽下GitHub的版本號頁面中的問題你正在使用。 貢獻者將幫助您查詢,甚至提供所需的文檔/維基。

也許這可以幫助你:

try to use CONCAT('%',{{variable}},'%') such as: 

WHERE 1=1 [[ AND test LIKE CONCAT('%',{{variable}},'%') ]] 
+0

我已經在他們的github上發佈之前在這裏發佈的問題,沒有答覆那裏以及我也試過你的解決方案給你..仍然沒有工作。 – Anas

2

要創建一個變量只寫你的查詢,並在格式定義的變量佔位符{{VARIABLENAME}},當你做這個配置數據庫會自動顯示變量面板,您必須選擇此變量的類型(如果您提供默認值,您還可以根據需要標記該變量)。

你不應該在你的查詢中轉義變量佔位符(這就是爲什麼CONCAT('%',{{variable}},'%')不起作用),你可以將整個表達式標記爲可選雙括號。

圖像波紋管給出了查詢的一個例子:

SELECT * FROM pg_tables其中SCHEMANAME = {{SCHEMANAME}} [[和表名= {{表名}}]]

在這個例子中,如果你沒有爲tablename變量提供一個值,整個表名過濾器將被忽略。並注意這兩個變量都標有文本類型。

sql query with variable

+0

,這個查詢使用Postgres數據庫,所以很抱歉沒有給出一個使用MySQL的例子。 – fgasparini

+0

讓我試試這個,很快就會回覆給您 – Anas

+0

我如何邀請您聊天?我已經嘗試過使用你的方式仍然得到同樣的問題,當我把任何價值的過濾器,它什麼也沒有顯示。我再次嘗試這次以及相同的問題...我有一個快照,我想顯示你 – Anas