Project Transaction cube from custom fields
This is an example on how Project Transaction cube can be build based on SERP data.
This cube definition contains these sections:
Defining Project transaction dimensions
Binding project transaction to dimensions
Defining Project transaction measures
Note: Cube name is given a name when you import first Custom field
![](../__attachments/10893164601/Screenshot%202023-10-31%20at%2016.00.00.png?inst-v=e770ba47-494b-488e-94fe-8369e8f7cb21)
Note: to see re- used standard Dimensions see sections “ for_standard_dimensions”, to see new dimension setup see sections “ for_custom_dimension”
Idea: With Javascript you can manipulate values during import and use them in a different way , see sections “ javascript_code"
#### Start of project transactions cube ####
#Defining Project transaction dimensions
#--------------------------
[TBIVVc.date]
name = 'Project Transaction Date'
dimension_name = 'Project Transaction'
cube_name = "HansaWorld Project Transactions"
rest_api_field = 'TransDate'
data_type = 'date'
for_standard_dimension = "Time"
import_sort_date = true
[TBIVVc.code]
name = 'Project Transaction Code'
for_custom_dimension = 'Project Transaction'
dimension_name = 'Project Transaction'
cube_name = "HansaWorld Project Transactions"
rest_api_field = 'SerNr'
key_field = true
[TBIVVc.name]
name = 'Project Transaction Name'
for_custom_dimension = 'Project Transaction'
dimension_name = 'Project Transaction'
cube_name = "HansaWorld Project Transactions"
rest_api_field = 'PRName'
name_field = true
[TBIVVc.item_type]
name = 'Project Transaction Item Type'
dimension_name = 'Project Transaction'
cube_name = "HansaWorld Project Transactions"
rest_api_field = 'ItemType'
dimension = true
javascript_code = '''
switch(doc.ItemType) {
case "0":
doc.ItemType = "Plain";
break;
case "1":
doc.ItemType = "Stocked";
break;
case "3":
doc.ItemType = "Service";
break;
case "5":
doc.ItemType = "Materials";
break; }
'''
[TBIVVc.transaction_surce]
name = 'Project Transaction Source'
dimension_name = 'Project Transaction'
cube_name = "HansaWorld Project Transactions"
rest_api_field = 'oVc'
dimension = true
javascript_code = '''
switch(doc.oVc) {
case "1":
doc.oVc = "Timesheet";
break;
case "2":
doc.oVc = "Purchase inv.";
break;
case "3":
doc.oVc = "Expense";
break;
case "4":
doc.oVc = "Delivery";
break;
case "5":
doc.oVc = "Activity";
break;
case "6":
doc.oVc = "Ret. goods";
break;
case "7":
doc.oVc = "Depreciation";
break;
}
'''
[TBIVVc.invoice_status]
name = 'Project Transaction Invoice Statuss'
dimension_name = 'Project Transaction'
cube_name = "HansaWorld Project Transactions"
skip_request = true
dimension = true
javascript_code = '''
if (doc.Invoice) {
doc.invoice_status = 'Invoiced'
}
else {
doc.invoice_status = 'Not Invoiced'
}
'''
[TBIVVc.objects]
name = 'Objects'
dimension_name = 'Project Transaction'
cube_name = "HansaWorld Project Transactions"
rest_api_field = 'Objects'
for_extra_dimension_type = "Object types"
#Binding project transaction to dimensions
#--------------------------
[TBIVVc.invoice_code]
name = 'Project Transaction Invoice Code'
cube_name = "HansaWorld Project Transactions"
for_standard_dimension = 'Invoice'
bind_field_name = 'code'
rest_api_field = 'Invoice'
[TBIVVc.invoice_item_position]
name = 'Project Transaction Invoice Item Position'
cube_name = "HansaWorld Project Transactions"
for_standard_dimension = 'Invoice'
for_standard_dimension_level = 'Invoice Item'
bind_field_name = 'position'
skip_import = true
javascript_code = '''
doc.invoice_item_position = "-1"
'''
[TBIVVc.currency_code]
name = 'Project Transaction Currency Code'
cube_name = "HansaWorld Project Transactions"
for_standard_dimension = 'Currency'
bind_field_name = 'currency'
rest_api_field = 'CurncyCode'
[TBIVVc.project_code]
name = 'Project Transaction Project Code'
cube_name = "HansaWorld Project Transactions"
for_standard_dimension = 'Project (Job)'
for_standard_dimension_level = "Project"
bind_field_name = 'code'
rest_api_field = 'PRCode'
[TBIVVc.project_item_position]
name = 'Project Transaction Project Item Position'
cube_name = "HansaWorld Project Transactions"
for_standard_dimension = 'Project (Job)'
for_standard_dimension_level = 'Project Item'
bind_field_name = 'position'
skip_import = true
javascript_code = '''
doc.project_item_position = "-1"
'''
[TBIVVc.item_code]
name = 'Project Transaction Item Code'
cube_name = "HansaWorld Project Transactions"
for_standard_dimension = 'Item'
bind_field_name = 'code'
rest_api_field = 'ArtCode'
[TBIVVc.person_code]
name = 'Project Transaction Person Code'
cube_name = "HansaWorld Project Transactions"
for_standard_dimension = 'Person'
bind_field_name = 'code'
rest_api_field = 'EMCode'
#Defining Project transaction measures
#--------------------------
[TBIVVc.quantity]
name = "Project Transaction Quantity"
cube_name = "HansaWorld Project Transactions"
dimension_name = 'Project Transaction'
measure = true
cubes_for_measure_sharing = ["HansaWorld Invoices"]
rest_api_field = "Qty"
[TBIVVc.gross_profit]
name = "Project Transaction Gross Profit"
cube_name = "HansaWorld Project Transactions"
dimension_name = 'Project Transaction'
cubes_for_measure_sharing = ["HansaWorld Invoices"]
measure = true
rest_api_field = "GP"
[TBIVVc.cost]
name = "Project Transaction Cost"
cube_name = "HansaWorld Project Transactions"
dimension_name = 'Project Transaction'
measure = true
cubes_for_measure_sharing = ["HansaWorld Invoices"]
skip_request = true
javascript_code = '''
if (doc.CostPrice) {
doc.cost = String(doc.CostPrice * doc.Qty)
}
'''
[TBIVVc.sum]
name = "Project Transaction Amount"
cube_name = "HansaWorld Project Transactions"
dimension_name = 'Project Transaction'
measure = true
rest_api_field = "Sum"
cubes_for_measure_sharing = ["HansaWorld Invoices"]
javascript_code = '''
doc._source_id = doc.SerNr;
'''
#### End of project transactions cube ####