【问题标题】:Metabase Filters example元数据库过滤器示例
【发布时间】:2017-08-10 07:31:23
【问题描述】:

我正在使用与 Mysql 集成的元数据库进行报告。我浏览了文档,但找不到任何解释如何在基于 SQL 的问题中实现过滤器的示例。

我发现的唯一示例是关于日期范围和字段过滤器,而不是文本和数字。

谁能提供有关如何使用文本过滤器的文档或任何示例。

我正在使用元数据库版本 v0.24.2

我要运行的查询是这样的

 SELECT  @a:=@a+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  

【问题讨论】:

  • 过滤器中缺少列别名。变量 {{createdAt}}、{{id}} 和 {{cnic}} 未与它们各自的列进行比较。它应该是这样的: createdAt = {{created_at}} AND id = {{id}} [[AND ssk_transaction.customerMsisdn= {{msisdn}}]] AND cnic = {{cnic}} 但我假设变量匹配列名,因此您应该修复查询以使用正确的列。
  • 其余的变量设置为字段过滤器并且工作正常,只有文本给我一个问题

标签: java mysql metabase


【解决方案1】:

在您正在使用的版本号下的 github 页面上打开一个问题。 贡献者将帮助您进行查询,甚至提供所请求的文档/wiki。

也许这可以帮助你:

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

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

【讨论】:

  • 在发帖之前我已经在他们的 github 上打开了一个问题,那里也没有回复,我也尝试了你给的解决方案.. 仍然不起作用。
【解决方案2】:

要创建变量,只需编写查询并以 {{variablename}} 格式为变量定义占位符,当您这样做时,Metabase 将自动在右侧显示变量面板,您必须选择此变量的类型 (如果您提供默认值,也可以将变量标记为必需)。

您不应该在查询中转义变量占位符(这就是 CONCAT('%',{{variable}},'%') 不起作用的原因),您可以将整个表达式标记为可选,并用 double 包围它-括号。

下图给出了一个查询示例:

select * from pg_tables where schemaname = {{schemaname}} [[ and tablename = {{tablename}} ]]

在此示例中,如果您不为 tablename 变量提供值,则将忽略整个 tablename 过滤器。请注意,这两个变量都标有类型文本。

【讨论】:

  • 这个查询使用 Postgres 数据库。很抱歉没有给出使用 MySQL 的示例。
  • 让我试试这个,很快就会回复你
  • 如何邀请你聊天?我已经尝试过使用你的方式仍然遇到同样的问题,当我在过滤器中输入任何值时,它什么也没显示。这次我又试了一次,同样的问题……我有一张快照想给你看
  • 你能把你想参数化的查询粘贴到这里吗?
  • 在问题中添加了查询,因为这里复制粘贴太长了
【解决方案3】:

要对基于 sql 的(本机查询)问题添加过滤器,生成 sql 结果后,单击右下角的指南针,然后单击“分析此查询的结果”。过滤器选项将显示在顶部。

然后您可以将其保存为不同的问题,以便过滤屏幕始终显示。

【讨论】:

    【解决方案4】:

    了解ssk_transaction.customerMsisdn 是什么数据类型会很有帮助。 我想知道它是否是某种int 类型,在哪种类型转换中,您需要将其转换为text,然后才能将其与文本过滤器进行比较。

    [[ AND ssk_transaction.customerMsisdn::text = {{msisdn}} ]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-02
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多