Exemple #1
0
 table.fields.forEach(function(field) {
     score(field.description);
     score(field.special_type);
     if (isFK(field.special_type)) {
         score(field.target);
     }
 });
Exemple #2
0
 results.fields = filterFn(fields).filter((f) => !usedFields[f.id] && (!isFK(f.special_type) || !includeJoins));
Exemple #3
0
 results.fks = fields.filter((f) => isFK(f.special_type) && f.target).map((joinField) => {
Exemple #4
0
 isFK()        { return isFK(this.special_type); }
Exemple #5
0
 isID()        { return isPK(this.special_type) || isFK(this.special_type); }
Exemple #6
0
    return async (dispatch, getState) => {
        const { qb: { card, queryResult } } = getState();
        if (!queryResult) return false;

        // lookup the coldef and cell value of the cell we are taking action on
        var coldef          = queryResult.data.cols[columnIndex],
            value           = queryResult.data.rows[rowIndex][columnIndex],
            sourceTableID   = card.dataset_query.query.source_table,
            isForeignColumn = coldef.table_id && coldef.table_id !== sourceTableID && coldef.fk_field_id,
            fieldRefForm    = isForeignColumn ? ['fk->', coldef.fk_field_id, coldef.id] : ['field-id', coldef.id];

        if (isPK(coldef.special_type)) {
            // action is on a PK column
            let newCard = startNewCard("query", card.dataset_query.database);

            newCard.dataset_query.query.source_table = coldef.table_id;
            newCard.dataset_query.query.aggregation = ["rows"];
            newCard.dataset_query.query.filter = ["AND", ["=", coldef.id, value]];

            // run it
            dispatch(setCardAndRun(newCard));

            MetabaseAnalytics.trackEvent("QueryBuilder", "Table Cell Click", "PK");
        } else if (isFK(coldef.special_type)) {
            // action is on an FK column
            let newCard = startNewCard("query", card.dataset_query.database);

            newCard.dataset_query.query.source_table = coldef.target.table_id;
            newCard.dataset_query.query.aggregation = ["rows"];
            newCard.dataset_query.query.filter = ["AND", ["=", coldef.target.id, value]];

            // run it
            dispatch(setCardAndRun(newCard));

            MetabaseAnalytics.trackEvent("QueryBuilder", "Table Cell Click", "FK");
        } else {
            // this is applying a filter by clicking on a cell value
            let dataset_query = Utils.copy(card.dataset_query);

            if (coldef.unit && coldef.unit != "default" && filter === "=") {
                // this is someone using quick filters on a datetime value
                let start = moment(value).format("YYYY-MM-DD");
                let end = start;
                switch(coldef.unit) {
                    case "week": end = moment(value).add(1, "weeks").subtract(1, "days").format("YYYY-MM-DD"); break;
                    case "month": end = moment(value).add(1, "months").subtract(1, "days").format("YYYY-MM-DD"); break;
                    case "quarter": end = moment(value).add(1, "quarters").subtract(1, "days").format("YYYY-MM-DD"); break;
                    case "year": start = moment(value, "YYYY").format("YYYY-MM-DD");
                                 end = moment(value, "YYYY").add(1, "years").subtract(1, "days").format("YYYY-MM-DD"); break;
                }
                Query.addFilter(dataset_query.query, ["BETWEEN", fieldRefForm, start, end]);
            } else {
                // quick filtering on a normal value (string/number)
                Query.addFilter(dataset_query.query, [filter, fieldRefForm, value]);
            }

            // update and run the query
            dispatch(setQuery(dataset_query, true));

            MetabaseAnalytics.trackEvent("QueryBuilder", "Table Cell Click", "Quick Filter");
        }
    };
Exemple #7
0
 .filter(f => isFK(f.special_type) && f.target)
Exemple #8
0
 f => !usedFields[f.id] && (!isFK(f.special_type) || !includeJoins),