feeder: create measure for integer fields (#43546)

This commit is contained in:
Benjamin Dauvergne 2020-06-03 10:06:41 +02:00
parent e4e8779661
commit afb70fe986
3 changed files with 39 additions and 16 deletions

View File

@ -287,13 +287,6 @@
"name": "stringCaseSensitive-é",
"type": "string",
"value": "\"field_stringCaseSensitive-é\""
},
{
"filter": true,
"label": "8th field integer",
"name": "integer",
"type": "string",
"value": "\"field_integer\""
}
],
"fact_table" : "\"formdata_demande\"",
@ -416,6 +409,12 @@
"label" : "localisation géographique",
"name" : "geolocation",
"type" : "point"
},
{
"name": "sum_integer",
"label": "total du champ « 8th field integer »",
"type": "integer",
"expression": "SUM({fact_table}.\"field_integer\")"
}
],
"name" : "formdata_demande",

View File

@ -622,6 +622,10 @@ class WcsOlapFeeder(object):
self.formdata_json_index.append(varname)
def has_digits_validation(field):
return field.validation and field.validation.get('type') == 'digits'
class WcsFormdefFeeder(object):
def __init__(self, olap_feeder, formdef, do_feed=True):
self.olap_feeder = olap_feeder
@ -675,7 +679,10 @@ class WcsFormdefFeeder(object):
elif field.type == 'bool':
field_def = 'boolean'
elif field.type == 'string':
field_def = 'varchar'
if has_digits_validation(field):
field_def = 'integer'
else:
field_def = 'varchar'
else:
continue
columns[field.varname] = {
@ -838,7 +845,13 @@ class WcsFormdefFeeder(object):
v = self.get_item_id(field, raw)
else:
v = None
elif field.type in ('string', 'bool'):
elif field.type == 'string':
if has_digits_validation(field):
if raw is not None:
v = int(raw)
else:
v = raw
elif field.type == 'bool':
v = raw
# unstructured storage of field values
@ -1074,13 +1087,23 @@ class WcsFormdefFeeder(object):
'filter': True,
}
elif field.type == 'string':
dimension = {
'name': dimension_name,
'label': dimension_label,
'type': 'string',
'value': quote(field_name),
'filter': True,
}
if has_digits_validation(field):
# we will define a SUM measure instead
cube['measures'].append({
'name': 'sum_' + dimension_name,
'label': 'total du champ « %s »' % dimension_label,
'type': 'integer',
'expression': 'SUM({fact_table}.%s)' % quote(field_name),
})
continue
else:
dimension = {
'name': dimension_name,
'label': dimension_label,
'type': 'string',
'value': quote(field_name),
'filter': True,
}
else:
continue
if join:

View File

@ -202,6 +202,7 @@ class Field(BaseObject):
varname = None
in_filters = False
anonymise = None
validation = {}
class Schema(BaseObject):