# Technical Overview: Cloud BI LookML Model
## Purpose
The purpose of this document is to provide a brief overview of the Cloud BI LookML Model. In this document, “LookML Model” will refer to all files (views, models, etc) related to this use case. In practice, this means all files in the Project. “Model file” will refer to the file “cloud_sales_bi.model.lkml”

# Model Overview
## Views
Views were created based on the philosophy for modeling Datacubes expressed in this document. At the moment, this is a bit overkill because the tables do not have as many columns as we originally expected. However, if we end up adding columns to these tables, it will be really helpful to have this structure.
There are currently two “main views”: revenue and account_meta. Each are extensions of several base views for each component entity. The nested domain fields in account_meta, are modeled as a separate view, as described in this document so that they can be unnested.

## Explores
The main Explore is called “revenue”. The base view is revenue, meaning that all queries will hit the table concord-prod.service_gcc.gcc_revenue_view, and any fields from concord-prod.service_gcc.account_meta will be obtained via a left join.

# Next Steps
## Recommendations for Editing Model
When you want to update this model, we recommend that you post to the room #lfc-code-review with the model name, your dev branch, and a list of all changes made. Once content is built, we recommend running the Content Validator before merging changes to ensure that content is not broken.

## Recommendations for New Data Sources
As new data tables are added (i.e., Bookings) we recommend creating a new folder under Views for each table. We recommend using the datacube modeling guidelines linked above to break out the business entities described by the table.
