2017-08-10 45 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