2017-03-06 72 views
0

我正在構建一個電子表格,可用於導入並過濾wireshark capture .csv's。這個想法是 - 您將.csv導入到第二個選項卡中,並且在第一個選項卡上,您可以基於多個包含/排除過濾器來顯示數據。下面是參考一個虛設片:Google Sheet查詢函數中WHERE條件的動態數量

https://docs.google.com/spreadsheets/d/17TtZHRiXCaH1XClq5SGRdIuyLZnMOrl6Ygrbfo9BbfM/edit?usp=sharing

正如你可以在電子表格中看到的,我有四個可能的「包括」的值和四個可能的「排除」值,每個值被一個降的選擇來確定向下-list。目的是讓單元格A6中的QUERY()函數根據這些過濾器顯示數據。
Example of the filter at work

我知道如何使用WHERE做了一個過濾條件:

=查詢( '導入CSV這裏' 1:349 「選擇*其中(」 & B4 & 「=」 & B2 & 「)」)

而如何做到這一點對多過濾器條件:

=查詢( '導入CSV這裏' 1:349, 「選擇*,其中(」 & B4 & 「=」 & B2 & 「)和(」 & C4 & 「=」 & C2 & 「)」)

我無法弄清楚如何編寫QUERY函數,以便它只針對非空白過濾器列的WHERE條件(因此已從其下拉菜單中主動填充)。有沒有一種有效的方法來做到這一點?

+0

你試過'其中G是不爲空或H不null'或'一些其他類似形式不null'及B6和「不爲空,且‘&B8&’ –

+0

使用' 那裏(只是試圖」 「=」&B6&「」)' – vanscurvy

+0

我相信你可能有點查詢功能的意圖,它旨在返回多行。除非您在單元格外檢查所有行與公共值,否則通常不使用單個單元格So = query('Import CSV Here'!A1:Z349,「select * where B is not null」)將返回B有值的每一行,並將第一行作爲標題包括在內,而不管第一行B的值如何。嘗試簡化,看看你會得到什麼結果。然後再嘗試另一個測試並查看這些結果。測試完簡單的後再複雜一點。 –

回答

0

您可以將每個過濾器條件包裝在if子句中,並使用將某些評估爲true的東西(如果它爲空)。

=query(
    'Import CSV Here'!1:349, 
    "select * WHERE " & 
    IF(ISBLANK(B2), "1=1", B4 & "=" & B2) & 
    " and " & IF(ISBLANK(C2), "1=1", C4 & "=" & C2)) 
+0

這會返回一個分析錯誤。你可以在這樣的查詢中使用if函數嗎? – vanscurvy

+0

抱歉,您不能,if的字符串在外面計算,然後連接所有部分,請參閱我的更新回答 –

+0

完美工作!對我來說,好的教訓在concatencation ...謝謝! – vanscurvy