diff --git a/SQLBuilder/QueryBuilder.java b/SQLBuilder/QueryBuilder.java
index 9d28a14a34f27bee475ae71b1980e58ee66ef883..94b4f922b1e1036e7d8d76b823f8a4cb14ff8b0a 100644
--- a/SQLBuilder/QueryBuilder.java
+++ b/SQLBuilder/QueryBuilder.java
@@ -137,7 +137,7 @@ public class QueryBuilder {
                 break;
             case "Conversions":
                 // To do
-                query = null;
+                query = builder.filter(new String[] {"server_log"}, new String[] {"entry_date"}, start, end, new String[] {granulStment + "entry_date) AS granularity", "COUNT(conversion)"}, " AND conversion = 1 GROUP BY granularity");
                 break;
             case "Total Cost":
                 String impression_tbl = builder.selectStatement(new String[]{granulStment + "date) AS granularity", "SUM(impression_cost) AS impr_sum"}, new String[]{"impression_log"}, "", "GROUP BY granularity");
@@ -198,7 +198,7 @@ public class QueryBuilder {
                 break;
             case "Conversions":
                 // To do
-                query = null;
+                query = builder.filter(new String[] {"server_log"}, new String[] {"entry_date"}, start, end, new String[] {"COUNT(conversion)"}, " AND conversion = 1");
                 break;
             case "Total Cost":
                 query = builder.filter(new String[]{"impression_log"}, new String[]{"date"},start, end, new String[]{"ROUND(SUM(impression_cost)+("+ builder.selectStatement(new String[]{"SUM(click_cost)"}, new String[]{"click_log"}, "", "")+"),2)"}, "");
@@ -257,7 +257,7 @@ public class QueryBuilder {
                 break;
             case "Conversions":
                 // To do
-                query = null;
+                query = builder.filter(new String[] { builder.innerJoin("server_log", "impression_log", "server_log.user_id", "impression_log.user_id")}, filter, "impression_log", filterVal, new String[] { granulStment + "server_log.entry_date) as granularity", "COUNT(conversion)"}, " AND conversion = 1 GROUP BY granularity");
                 break;
             case "Total Cost":
                 String impression_tbl = builder.selectStatement(new String[]{granulStment+"impression_log.date) AS granularity", "SUM(impression_cost) AS impr_sum"}, new String[]{"impression_log"},
@@ -329,7 +329,7 @@ public class QueryBuilder {
                 break;
             case "Conversions":
                 // To do
-                query = null;
+                query = builder.filter(new String[] { builder.innerJoin("server_log", "impression_log", "server_log.user_id", "impression_log.user_id")}, filter, "impression_log", filterVal, new String[] {"COUNT(conversion)"}, " AND conversion = 1");
                 break;
             case "Total Cost":
                 query = builder.filter(new String[] {builder.innerJoin("click_log","impression_log","click_log.user_id","impression_log.user_id")},filter,"impression_log", filterVal, new String[]{"ROUND(SUM(impression_cost)+(SELECT SUM(click_cost) FROM click_log ),2)"}, "");
@@ -407,7 +407,9 @@ public class QueryBuilder {
     }
 
     private String[] buildConv() {
-        return null;
+        String conversions = builder.selectStatement(new String[] {"COUNT(conversion)"}, new String[] {"server_log"}, "WHERE conversion = 1", "");
+        String conversionsByGranularity = builder.selectStatement(new String[] { granulStment + "entry_date) AS granularity", "COUNT(conversion)"}, new String[] {"server_log"}, "WHERE conversion = 1", "GROUP BY granularity");
+        return new String[] { conversions, conversionsByGranularity };
     }
 
     private String[] buildBounces() {
diff --git a/src/DataViewScreen2.java b/src/DataViewScreen2.java
index 33c47e266d5b37c32208a7c05e9814c8061b0dc0..d06150b5cfe66a73cf7af2b657dcd35cfa9f26a4 100644
--- a/src/DataViewScreen2.java
+++ b/src/DataViewScreen2.java
@@ -24,7 +24,7 @@ public class DataViewScreen2 {
 
     private Scene fileSelectScene;
     private final List<Button> metricButtons;
-    private String currentFilter;
+    private Filter currentFilter;
     private Button selectedButton;
 
     // DO NOT REMOVE WHITESPACE IN THESE STRINGS
@@ -41,8 +41,6 @@ public class DataViewScreen2 {
     private final int APPLIED_FILTER_FONT_SIZE = 15;
     private final int GRANULARITY_HEADING_FONT_SIZE = 17;
 
-    //private final Axis yAxis = new NumberAxis();
-
     public DataViewScreen2(Stage stage, DatabaseController dbc, QueryExecutor queryExecutor, FontSizeHandler fontSizeHandler, WindowsHandler windowsHandler, Scene fileSelectScene) {
         this.stage = stage;
         this.dbc = dbc;
@@ -51,7 +49,6 @@ public class DataViewScreen2 {
         this.windowsHandler = windowsHandler;
         this.fileSelectScene = fileSelectScene;
         metricButtons  = new ArrayList<>();
-        currentFilter = "No Filter";
     }
 
     private void configureStage(BorderPane borderPane, VBox leftVBox, VBox topVBox) {
@@ -90,7 +87,6 @@ public class DataViewScreen2 {
         VBox topVBox = setupTopBorderPane();
 
         borderPane.setTop(topVBox);
-        //borderPane.setBottom(setupBottomBorderPane());
         borderPane.setLeft(leftVBox);
         borderPane.setRight(rightVBox);
         borderPane.setCenter(centreVBox);
@@ -100,11 +96,13 @@ public class DataViewScreen2 {
             fontSizeHandler.updateFontSize(fontSizeHandler.DATA_VIEW_SCREEN);
         }));
         granularityComboBox.valueProperty().addListener(((observableValue, oldValue, newValue) -> {
-            if (!currentFilter.equals("No Filter")) {
-                Platform.runLater(() ->
-                        filterUpdate(newValue, metricCount, appliedFilterLabel));
-                        //fontSizeHandler.updateFontSize(fontSizeHandler.DATA_VIEW_SCREEN);
-            } else {
+            if (currentFilter != null) {       // if filter == null ==> "No Filter" is selected
+                Platform.runLater(() -> {
+                    currentFilter.filter();
+                });
+                filterUpdate(newValue, metricCount, appliedFilterLabel);
+            }
+            else {
                 selectedButton.fire();
             }
         }));
@@ -227,29 +225,36 @@ public class DataViewScreen2 {
     // What to do when filters are updated
     private void filterUpdate(String newValue, Label metricCount, Label appliedFilters){
         if (newValue != null) {
-            currentFilter = newValue;
             switch (newValue) {
                 case "No Filter" -> {
                     Platform.runLater(() -> selectedButton.fire());
                     appliedFilters.setText("No filters applied.");
+                    currentFilter = null;
+                }
+                case "Date Range" -> {
+                    currentFilter = new DateFilter(queryExecutor, metricCount, getTableName(selectedButton.getText()), getColumns(selectedButton.getText()), this, selectedButton.getText(), CHART_FONT_SIZE);
+                    currentFilter.load();
                 }
-                case "Date Range" -> new DateFilter(queryExecutor, metricCount, getTableName(selectedButton.getText()), getColumns(selectedButton.getText()), this, selectedButton.getText(), CHART_FONT_SIZE);
                 case "Age" -> {
                     String[] ages = {"<25", "25-34", "35-44", "45-54", ">54"};
-                    new FilterController(queryExecutor, metricCount, ages, "Age", getTableName(selectedButton.getText()), getColumns(selectedButton.getText()), this, selectedButton.getText(), CHART_FONT_SIZE);
+                    currentFilter = new FilterController(queryExecutor, metricCount, ages, "Age", getTableName(selectedButton.getText()), getColumns(selectedButton.getText()), this, selectedButton.getText(), CHART_FONT_SIZE);
+                    currentFilter.load();
                 }
                 case "Context" -> {
                     String[] contexts = {"News", "Shopping", "Social Media", "Blog", "Hobbies", "Travel"};
-                    new FilterController(queryExecutor, metricCount, contexts, "Context", getTableName(selectedButton.getText()), getColumns(selectedButton.getText()), this, selectedButton.getText(), CHART_FONT_SIZE);
+                    currentFilter = new FilterController(queryExecutor, metricCount, contexts, "Context", getTableName(selectedButton.getText()), getColumns(selectedButton.getText()), this, selectedButton.getText(), CHART_FONT_SIZE);
+                    currentFilter.load();
                 }
                 case "Income" -> {
                     String[] incomes = {"High", "Medium", "Low"};
-                    new FilterController(queryExecutor, metricCount, incomes, "Income", getTableName(selectedButton.getText()), getColumns(selectedButton.getText()), this, selectedButton.getText(), CHART_FONT_SIZE);
+                    currentFilter = new FilterController(queryExecutor, metricCount, incomes, "Income", getTableName(selectedButton.getText()), getColumns(selectedButton.getText()), this, selectedButton.getText(), CHART_FONT_SIZE);
+                    currentFilter.load();
                 }
                 case "Gender" -> {
                     String[] genders = {"Male", "Female"};
-                    new FilterController(queryExecutor, metricCount, genders, "Gender",
+                    currentFilter = new FilterController(queryExecutor, metricCount, genders, "Gender",
                             getTableName(selectedButton.getText()), getColumns(selectedButton.getText()), this, selectedButton.getText(), CHART_FONT_SIZE);
+                    currentFilter.load();
                 }
             }
         }
diff --git a/src/DatabaseController.java b/src/DatabaseController.java
index 144fc5190231a43f5c65601b11b192bdb5feaf23..39810ed34b9f9f931d45f422febb2b4e5dd58bfc 100644
--- a/src/DatabaseController.java
+++ b/src/DatabaseController.java
@@ -180,6 +180,7 @@ public class DatabaseController {
             System.err.println("Query error: "+e);
         }
         // attempts to executes the query
+        System.out.println(query);
         try (ResultSet rs = statement.executeQuery(query)) {
             // creates an ArrayList of Arrays
             List<String[]> data = new ArrayList<String[]>();
diff --git a/src/DateFilter.java b/src/DateFilter.java
index 71a3dc00431694824cc6c1d8d1c1a880a3469513..f0050a0ff136967b0eaf33990ee84a0b69f1590d 100644
--- a/src/DateFilter.java
+++ b/src/DateFilter.java
@@ -38,7 +38,6 @@ public class DateFilter extends Filter {
         this.dvs = dvs;
         this.metricName = metricName;
         this.fontSize = fontSize;
-        load();
     }
 
     public void load (){
@@ -243,11 +242,22 @@ public class DateFilter extends Filter {
         this.endVal = null;
     }
 
+    @Override
+    public void setFilterValues(String[] filterValues) {
+        startVal = filterValues[0];
+        endVal = filterValues[1];
+    }
+
+    @Override
+    public String getFilterName() {
+        return "Date Range";
+    }
+
     private void setStart(DatePicker start) {
         startVal = start.getValue().format(DateTimeFormatter.ISO_LOCAL_DATE);
     }
 
-    private void setEnd (DatePicker end){
+    private void setEnd(DatePicker end){
         endVal = end.getValue().format(DateTimeFormatter.ISO_LOCAL_DATE);
     }
 
diff --git a/src/Filter.java b/src/Filter.java
index 7f0d1063bebabfd912c897bbc7f3374d09d67d4b..a669278ee7cb54460d92872c577657d2ddd50edb 100644
--- a/src/Filter.java
+++ b/src/Filter.java
@@ -14,6 +14,8 @@ abstract class Filter {
     public abstract void load(); // Need implementation
     public abstract void filter(); // Need implementation
     public abstract void tearDown(); // Need implementation
+    public abstract void setFilterValues(String[] filterValues);
+    public abstract String getFilterName();
 
     public Scene done() {
         BorderPane bp = new BorderPane();
diff --git a/src/FilterController.java b/src/FilterController.java
index a76437cb5d300e4e0bf028a440ecbe183e76f091..e8ca919171fe8f8b69d33b2bb4363ddd08684b72 100644
--- a/src/FilterController.java
+++ b/src/FilterController.java
@@ -5,7 +5,6 @@ import javafx.geometry.Pos;
 import javafx.scene.Scene;
 import javafx.scene.chart.*;
 import javafx.scene.control.Button;
-import javafx.scene.control.ComboBox;
 import javafx.scene.control.Label;
 import javafx.scene.layout.BorderPane;
 import javafx.scene.layout.HBox;
@@ -14,7 +13,6 @@ import javafx.scene.text.Font;
 import javafx.stage.Stage;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 public class FilterController extends Filter {
@@ -50,8 +48,7 @@ public class FilterController extends Filter {
         this.columns = columns;
         this.dvs = dvs;
         this.metricName = metricName;
-        this.fontSize=fontSize;
-        load();
+        this.fontSize = fontSize;
     }
 
     @Override
@@ -70,7 +67,7 @@ public class FilterController extends Filter {
             filterOptions.getChildren().add(filterButton);
             filterButton.setOnAction(
                     action -> {
-                        setFilterValue(filterButton.getText());
+                        setFilterValues(new String[] { filterButton.getText() });
                         filterStage.setScene(super.done());
                         try {
                             java.util.concurrent.TimeUnit.SECONDS.sleep(1);
@@ -123,36 +120,6 @@ public class FilterController extends Filter {
         String[] valArray = currentVal.split(" ");
         String granularity = dvs.getGranularity();
 
-        /*
-        if (metric.getText().contains("bounces")){
-            tableName = "server_log";
-            System.out.println(SQLCommands.filter(tableName, filterName.toLowerCase(), selectedValue, columns, " AND (viewed = '1' OR (JULIANDAY(exit_date) - JULIANDAY(entry_date)) * 60 * 60 * 24 < 30)"));
-            filiteredValue = db_ctrl.dbQuery(SQLCommands.filter(tableName, filterName.toLowerCase(), selectedValue, columns, " AND (viewed = '1' OR (JULIANDAY(exit_date) - JULIANDAY(entry_date)) * 60 * 60 * 24 < 30)"),1).get(0)[0];
-        } else {
-            System.out.println(SQLCommands.filter(tableName, filterName.toLowerCase(), selectedValue, columns, ""));
-            filiteredValue = db_ctrl.dbQuery(SQLCommands.filter(tableName, filterName.toLowerCase(), selectedValue, columns, ""),1).get(0)[0];
-        }
-
-        // Update Chart
-        //System.out.println(SQLCommands.filter(tableName, filterName.toLowerCase(), selectedValue, new String[]{"distinct date("+tableName+".date) AS uniq_date, COUNT("+tableName+".id)"}, " GROUP BY uniq_date"));
-        //List<String[]> filteredValues =  db_ctrl.dbQuery(SQLCommands.filter(tableName, filterName.toLowerCase(), selectedValue, new String[]{"distinct date("+tableName+".date) AS uniq_date, COUNT("+tableName+".id)"}, " GROUP BY uniq_date"),2);
-        //gets the columns from the given columns, not just counting the ID
-        /*
-        String[] initial;
-
-        if (metric.getText().contains("bounces")){
-            initial = new String[] {"distinct date(impression_log.date) AS uniq_date"};
-        } else {
-            initial = new String[] {"distinct date("+tableName+".date) AS uniq_date"};
-        }
-        String[] all = Arrays.copyOf(initial,initial.length + columns.length);
-        System.arraycopy(columns, 0, all, initial.length,columns.length);
-
-        //System.out.println(SQLCommands.filter(tableName, filterName.toLowerCase(), selectedValue, all, " GROUP BY uniq_date"));
-        List<String[]> filteredValues =  db_ctrl.dbQuery(SQLCommands.filter(tableName, filterName.toLowerCase(), selectedValue, all, " GROUP BY uniq_date"),2);
-        */
-
-
         List<List<String[]>> queryResponse = qry_exec.executeQuery(metricName,filterName.toLowerCase(),selectedValue,granularity);
         String filteredValue = queryResponse.get(0).get(0)[0];
         if (filteredValue == null)
@@ -184,7 +151,7 @@ public class FilterController extends Filter {
             } else {
                 for (int i = 0; i < filteredValues.size(); i++) {
                     String[] record = filteredValues.get(i);
-                    System.out.println(metric.getText() + " - " + record[1]);
+                    //System.out.println(metric.getText() + " - " + record[1]);
                     data.getData().add(new XYChart.Data(record[0], Double.valueOf(record[1])));
                 }
             }
@@ -271,15 +238,21 @@ public class FilterController extends Filter {
         return linechart;
     }
 
-    private void setFilterValue(String value) {
-        selectedValue = value;
-    }
-
     @Override
     public void tearDown() {
         this.selectedValue = null;
     }
 
+    @Override
+    public void setFilterValues(String[] filterValues) {
+        selectedValue = filterValues[0];
+    }
+
+    @Override
+    public String getFilterName() {
+        return filterName;
+    }
+
 //    public void initFonts(Button[] dataButtons,Button cancel, Label title){
 //        metric.setFont(new Font("Arial", fontSize));
 //        for(Button b : dataButtons){
diff --git a/src/MetricEventsHandler.java b/src/MetricEventsHandler.java
index 109d82a23b22ef3a82e8ce85c2a46daee2d8ff64..f93d188bb4c785a25f7263bdcf1967c65f5e32f5 100644
--- a/src/MetricEventsHandler.java
+++ b/src/MetricEventsHandler.java
@@ -182,12 +182,9 @@ public class MetricEventsHandler {
 
         XYChart.Series uniqueUsersChart = new XYChart.Series();
         uniqueUsersChart.setName("Unique users per day");
-        List<String[]> l1 = queryExecutor.executeQuery("Unique Users", granularity).get(1);
-        int i =0;
-        while(i<l1.size()){
-            uniqueUsersChart.getData().add(new XYChart.Data(l1.get(i)[0], Integer.parseInt(l1.get(i)[1])));
-            i++;
-
+        List<String[]> uniqueUsersQueryResult = queryExecutor.executeQuery("Unique Users", granularity).get(1);
+        for (int i = 0; i < uniqueUsersQueryResult.size(); i++) {
+            uniqueUsersChart.getData().add(new XYChart.Data(uniqueUsersQueryResult.get(i)[0], Integer.parseInt(uniqueUsersQueryResult.get(i)[1])));
         }
         List<XYChart.Series> series = new ArrayList<XYChart.Series>(){{ add(uniqueUsersChart); }};
 
@@ -278,12 +275,34 @@ public class MetricEventsHandler {
     private void conversionsClickEvent() {
         filtersComboBox.getSelectionModel().select(0);
         String granularity = granularityComboBox.getSelectionModel().getSelectedItem();
-        //String conversionsCount = ;
 
+        Thread thread = new Thread(() -> {
+            List<List<String[]>> result = queryExecutor.executeQuery("Conversions", granularity);
+            Platform.runLater(() -> {
+                    metricCount.setText("Conversions: " + result.get(0).get(0)[0]);
+                    XYChart.Series conversionsChart = new XYChart.Series();
+                    conversionsChart.setName("Number of Conversions");
 
-        centreVBox.getChildren().clear();
-        //centreVBox.getChildren().add();
-        //centreVBox.setVgrow(lineChart, Priority.ALWAYS);
+                    List<String[]> conversionsQueryResult = result.get(1);
+                    for (int i = 0; i < conversionsQueryResult.size(); i++) {
+                        conversionsChart.getData().add(new XYChart.Data(conversionsQueryResult.get(i)[0], Integer.parseInt(conversionsQueryResult.get(i)[1])));
+                    }
+
+                    List<XYChart.Series> series = new ArrayList<XYChart.Series>(){{ add(conversionsChart); }};
+
+
+                    Axis xAxis = new CategoryAxis();
+                    Axis yAxis = new NumberAxis();
+                    xAxis.setLabel("Day");
+                    yAxis.setLabel("Number Of Conversions");
+                    LineChart lineChart = buildLineChart(series, xAxis, yAxis, "Conversions");
+
+                    centreVBox.getChildren().clear();
+                    centreVBox.getChildren().add(lineChart);
+                    centreVBox.setVgrow(lineChart, Priority.ALWAYS);
+            });
+        });
+        thread.start();
 
         metricCount.setText("Not Yet Implemented");
     }
@@ -302,14 +321,14 @@ public class MetricEventsHandler {
                                 metricCount.setText("Total Cost:\n" + result.get(0).get(0)[0] + "p");
                                 XYChart.Series totalCost = new XYChart.Series();
                                 totalCost.setName("Total cost per day");
+
                                 List<String[]> totalCostQueryResult = result.get(1);
-                                int i = 0;
                                 double cumulativeCost = 0;
-                                while (i < totalCostQueryResult.size()) {
+                                for (int i = 0; i < totalCostQueryResult.size(); i++) {
                                     cumulativeCost += Double.parseDouble(totalCostQueryResult.get(i)[1]);
                                     totalCost.getData().add(new XYChart.Data(totalCostQueryResult.get(i)[0], cumulativeCost));
-                                    i++;
                                 }
+
                                 List<XYChart.Series> series = new ArrayList<XYChart.Series>(){{ add(totalCost); }};
 
                                 Axis xAxis = new CategoryAxis();
diff --git a/src/SQLCommands.java b/src/SQLCommands.java
deleted file mode 100644
index c42298252695a87f3814e647f817b85477029109..0000000000000000000000000000000000000000
--- a/src/SQLCommands.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package src;
-
-public class SQLCommands {
-
-    // Counts
-    final static public String numberOfClicks = "SELECT COUNT(id) FROM click_log;";
-    final static public String numberOfImpressions = "SELECT COUNT(id) FROM impression_log;";
-    final static public String numberOfUniqueUsers = "SELECT COUNT(DISTINCT user_id) FROM click_log;";
-
-    // check that these are 100% correct
-    // a bounce is defined as a user viewing only 1 screen, or staying on that site for < 30 seconds
-    final static public String numberOfBounces = "SELECT COUNT(id) FROM server_log WHERE viewed = '1' OR (JULIANDAY(exit_date) - JULIANDAY(entry_date)) * 60 * 60 * 24 < 30;";
-    final static public String numberOfConversions = "SELECT SUM(conversion) FROM server_log;";
-    final static public String totalCost = "SELECT SUM(click_cost) FROM click_log;";
-    final static public String clickThroughRate = "SELECT COUNT(click_log.id) / COUNT(impression_log.id) FROM click_log, impression_log;";
-    final static public String costPerAcquisition = "SELECT SUM(impression_cost) / SUM(conversion) FROM impression_log, server_log;";
-    final static public String costPerClick = "SELECT SUM(click_cost) / COUNT(id) FROM click_log;";
-    final static public String costPerThousandImpressions = "SELECT 1000 * SUM(impression_cost) / COUNT(id) FROM impression_log;";
-    final static public String bounceRate = "SELECT (CAST (COUNT(server_log.id) AS float)) / (SELECT (CAST (COUNT(click_log.id) AS float)) FROM click_log) FROM server_log WHERE viewed = '1' OR (JULIANDAY(server_log.exit_date) - JULIANDAY(server_log.entry_date)) * 60 * 60 * 24 < 30;";
-
-    // Values
-    final static public String clickLogDates = "SELECT distinct date(date) AS uniq_date, COUNT(id) FROM click_log GROUP BY uniq_date"; // Number of clicks per date
-    final static public String impressionLogDates = "SELECT distinct date(date) AS uniq_date, COUNT(id) FROM impression_log GROUP BY uniq_date";// Number of impressions per date
-    final static public String uniqueUserDates ="SELECT distinct date(date) AS uniq_date, COUNT(DISTINCT user_id) FROM click_log GROUP BY uniq_date";// Number of unique users per date
-    final static public String totalCostDates ="SELECT  distinct date(date) AS uniq_date, SUM(impression_cost) FROM impression_log GROUP BY uniq_date";//Total Cost per day
-    final static public String bouncesPerDates = "SELECT distinct date(server_log.entry_date) AS uniq_date, COUNT(server_log.id) FROM server_log WHERE viewed = '1' OR (JULIANDAY(exit_date) - JULIANDAY(entry_date)) * 60 * 60 * 24 < 30 GROUP BY uniq_date;";
-    final static public String totalImpressionCostPerDates = "SELECT distinct date(date) AS uniq_date, SUM(impression_cost) FROM impression_log GROUP BY uniq_date;"; // total impression cost per day
-    final static public String totalClickCostPerDates = "SELECT distinct date(date) AS uniq_date, SUM(click_cost) AS total_click_cost FROM click_log GROUP BY uniq_date;"; // total click cost per day
-    final static public String totalConversionsPerDates = "SELECT distinct date(entry_date) AS uniq_date, SUM(conversion) FROM server_log GROUP BY uniq_date;";
-    final static public String totalClickCostDates="SELECT distinct date(date) AS uniq_date, SUM(click_cost), COUNT(id) FROM click_log GROUP BY uniq_date";
-
-    // Filters
-
-    /*
-     Filter a table between two dates
-     @param - tableName - Name of table to filter
-     @param - startDate - Start Date
-     @param - endDate - End Date
-     */
-    public static String filterByDateRange (String tableName, String startDate, String endDate, String[] columns, String extraParameters){
-        return "SELECT "+String.join(", ",columns)+" FROM "+tableName+" WHERE date BETWEEN '"+startDate+"' AND '"+endDate+"'"+extraParameters;
-    }
-
-    /*
-     Filter table
-     @param - tableName - Name of table to filter
-     @param - filter - Metric to filter (e.g. income, age, context)
-     @param - income - Category as string (e.g. Age: <25, 25-34, 35-44, 45-54, >54 or Income: High, Medium, Low)
-     @param - columns - List of column names to get
-     */
-    public static String filter (String tableName, String filter, String parameter, String[] columns, String extraParameters){
-
-        if (tableName.equals("impression_log")) {
-            System.out.println("SELECT "+String.join(", ",columns)+" FROM "+tableName+" WHERE impression_log."+filter+" = '"+parameter+"'"+extraParameters);
-            return "SELECT " + String.join(", ", columns) + " FROM " + tableName + " WHERE impression_log." + filter + " = '" + parameter + "'" + extraParameters;
-        }else {
-            System.out.println("SELECT "+String.join(", ",columns)+" FROM "+tableName+" INNER JOIN impression_log ON "+tableName+".user_id = impression_log.user_id WHERE impression_log."+filter+" = '"+parameter+"'"+extraParameters);
-            return "SELECT " + String.join(", ", columns) + " FROM " + tableName + " INNER JOIN impression_log ON " + tableName + ".user_id = impression_log.user_id WHERE impression_log." + filter + " = '" + parameter + "'" + extraParameters;
-        }
-    }
-
-    /*
-     Number of clicks by gender
-     @param - gender
-     */
-    public static String filterClicksByGender (String gender){
-        return "SELECT COUNT(DISTINCT click_log.user_id) FROM click_log INNER JOIN impression_log ON click_log.user_id = impression_log.user_id WHERE impression_log.gender = '"+ gender +"'";
-    }
-
-
-
-}