diff --git a/src/metabase/models/field_values.clj b/src/metabase/models/field_values.clj
index 2cffb9b11342db9984d477b2951e83ee71260530..bca255ecb3e14577929741536e76731c56ab70c6 100644
--- a/src/metabase/models/field_values.clj
+++ b/src/metabase/models/field_values.clj
@@ -33,6 +33,7 @@
          (contains? field :base_type)
          (contains? field :special_type)]}
   (and (not= (keyword field_type) :sensitive)
+       (not (contains? #{:DateField :DateTimeField :TimeField} (keyword base_type)))
        (or (contains? #{:category :city :state :country} (keyword special_type))
            (= (keyword base_type) :BooleanField))))
 
diff --git a/test/metabase/models/field_test.clj b/test/metabase/models/field_test.clj
index 05bb383ab55ad1cf11b88e23d78484e4f178e88c..84542e578c55d4f4b48b1c297438de4574503f58 100644
--- a/test/metabase/models/field_test.clj
+++ b/test/metabase/models/field_test.clj
@@ -5,6 +5,63 @@
                              [field-values :refer :all])
             [metabase.test.data :refer :all]))
 
+
+;; field-should-have-field-values?
+
+;; sensitive fields should always be excluded
+(expect false (field-should-have-field-values? {:base_type    :BooleanField
+                                                :special_type :category
+                                                :field_type   :sensitive}))
+;; date/time based fields should always be excluded
+(expect false (field-should-have-field-values? {:base_type    :DateField
+                                                :special_type :category
+                                                :field_type   :dimension}))
+(expect false (field-should-have-field-values? {:base_type    :DateTimeField
+                                                :special_type :category
+                                                :field_type   :dimension}))
+(expect false (field-should-have-field-values? {:base_type    :TimeField
+                                                :special_type :category
+                                                :field_type   :dimension}))
+;; most special types should be excluded
+(expect false (field-should-have-field-values? {:base_type    :CharField
+                                                :special_type :image
+                                                :field_type   :dimension}))
+(expect false (field-should-have-field-values? {:base_type    :CharField
+                                                :special_type :id
+                                                :field_type   :dimension}))
+(expect false (field-should-have-field-values? {:base_type    :CharField
+                                                :special_type :fk
+                                                :field_type   :dimension}))
+(expect false (field-should-have-field-values? {:base_type    :CharField
+                                                :special_type :latitude
+                                                :field_type   :dimension}))
+(expect false (field-should-have-field-values? {:base_type    :CharField
+                                                :special_type :number
+                                                :field_type   :dimension}))
+(expect false (field-should-have-field-values? {:base_type    :CharField
+                                                :special_type :timestamp_milliseconds
+                                                :field_type   :dimension}))
+;; boolean fields + category/city/state/country fields are g2g
+(expect true (field-should-have-field-values? {:base_type    :BooleanField
+                                               :special_type :number
+                                               :field_type   :dimension}))
+(expect true (field-should-have-field-values? {:base_type    :CharField
+                                               :special_type :category
+                                               :field_type   :dimension}))
+(expect true (field-should-have-field-values? {:base_type    :TextField
+                                               :special_type :city
+                                               :field_type   :dimension}))
+(expect true (field-should-have-field-values? {:base_type    :TextField
+                                               :special_type :state
+                                               :field_type   :dimension}))
+(expect true (field-should-have-field-values? {:base_type    :TextField
+                                               :special_type :country
+                                               :field_type   :dimension}))
+
+;; NOT field_type = senstive
+;; NOT base_type = date, datetime, time
+;; (required) special_type = category, city, state, country OR base_type = boolean
+
 ;; Check that setting a Field's special_type to :category will cause a corresponding FieldValues to be created asynchronously
 (expect
     [nil