feeder: define all joins (#38066)

* join with the dates table must be inner because we do not want to
see results for forms outside the dates table (every form must have a
receipt_time),
* all other joins must be left because form's schemas are dynamic and
dimension can be absent from older forms but we still want to count them.
This commit is contained in:
Benjamin Dauvergne 2019-11-28 19:54:05 +01:00
parent ba95cc7f28
commit f806b9d675
2 changed files with 43 additions and 21 deletions

View File

@ -82,19 +82,22 @@
"detail" : "date",
"master" : "receipt_time",
"name" : "receipt_time",
"table" : "dates"
"table" : "dates",
"kind": "right"
},
{
"detail" : "id",
"master" : "channel_id",
"name" : "channel",
"table" : "channel"
"table" : "channel",
"kind": "left"
},
{
"detail" : "id",
"master" : "formdef_id",
"name" : "formdef",
"table" : "formdef"
"table" : "formdef",
"kind": "left"
},
{
"detail" : "id",
@ -107,20 +110,22 @@
"detail" : "id",
"master" : "hour_id",
"name" : "hour",
"table" : "hour"
"table" : "hour",
"kind": "right"
},
{
"detail" : "id",
"master" : "generic_status_id",
"name" : "generic_status",
"table" : "status"
"table" : "status",
"kind": "left"
},
{
"detail" : "id",
"kind" : "inner",
"master" : "first_agent_id",
"name" : "agent",
"table" : "agent"
"table" : "agent",
"kind" : "left"
}
],
"json_field" : "json_data",
@ -290,69 +295,80 @@
"detail" : "date",
"master" : "receipt_time",
"name" : "receipt_time",
"table" : "dates"
"table" : "dates",
"kind" : "right"
},
{
"detail" : "id",
"master" : "channel_id",
"name" : "channel",
"table" : "channel"
"table" : "channel",
"kind" : "left"
},
{
"detail" : "id",
"master" : "formdef_id",
"name" : "formdef",
"table" : "formdef"
"table" : "formdef",
"kind" : "left"
},
{
"detail" : "id",
"kind" : "left",
"master" : "formdef.category_id",
"name" : "category",
"table" : "category"
"table" : "category",
"kind" : "left"
},
{
"detail" : "id",
"master" : "hour_id",
"name" : "hour",
"table" : "hour"
"table" : "hour",
"kind" : "right"
},
{
"detail" : "id",
"master" : "generic_status_id",
"name" : "generic_status",
"table" : "status"
"table" : "status",
"kind" : "left"
},
{
"detail" : "id",
"kind" : "inner",
"master" : "first_agent_id",
"name" : "agent",
"table" : "agent"
"table" : "agent",
"kind" : "left"
},
{
"detail" : "id",
"master" : "status_id",
"name" : "status",
"table" : "\"status_demande\""
"table" : "\"status_demande\"",
"kind" : "left"
},
{
"detail" : "id",
"master" : "\"function__receiver\"",
"name" : "function__receiver",
"table" : "role"
"table" : "role",
"kind" : "left"
},
{
"detail" : "id",
"master" : "\"field_item\"",
"name" : "item",
"table" : "\"formdata_demande_field_item\""
"table" : "\"formdata_demande_field_item\"",
"kind" : "left"
},
{
"detail" : "id",
"master" : "\"field_itemOpen\"",
"name" : "itemOpen",
"table" : "\"formdata_demande_field_itemOpen\""
"table" : "\"formdata_demande_field_itemOpen\"",
"kind" : "left"
}
],
"key" : "id",

View File

@ -121,18 +121,21 @@ class WcsOlapFeeder(object):
'table': 'dates',
'detail': 'date',
'master': 'receipt_time',
'kind': 'right',
},
{
'name': 'channel',
'table': 'channel',
'master': 'channel_id',
'detail': 'id',
'kind': 'left',
},
{
'name': 'formdef',
'table': 'formdef',
'master': 'formdef_id',
'detail': 'id',
'kind': 'left',
},
{
'name': 'category',
@ -146,19 +149,21 @@ class WcsOlapFeeder(object):
'table': 'hour',
'master': 'hour_id',
'detail': 'id',
'kind': 'right',
},
{
'name': 'generic_status',
'table': 'status',
'master': 'generic_status_id',
'detail': 'id',
'kind': 'left',
},
{
'name': 'agent',
'table': 'agent',
'master': 'first_agent_id',
'detail': 'id',
'kind': 'inner',
'kind': 'left',
},
],
'dimensions': [
@ -930,6 +935,7 @@ class WcsFormdefFeeder(object):
'table': quote(self.status_table_name),
'master': 'status_id',
'detail': 'id',
'kind': 'left',
})
cube['dimensions'].append({
'name': 'status',
@ -948,6 +954,7 @@ class WcsFormdefFeeder(object):
'table': 'role',
'master': quote(at),
'detail': 'id',
'kind': 'left',
})
cube['dimensions'].append({
'name': at,
@ -998,9 +1005,8 @@ class WcsFormdefFeeder(object):
'table': quote(table_name),
'master': quote('field_%s' % field.varname),
'detail': 'id',
'kind': 'left',
}
if not field.required:
join['kind'] = 'full'
dimension = {
'name': field.varname,
'label': field.label.lower(),