Solution Design Guidelines
This section describes how we document projects in the Solution Design, aka SD.
The goal of the solution design is:
-
It allows us to quickly understand the setup of client platform, e.g. when there is a support request after months of silence, or when a new team member starts working on a project
-
It provides clients with a single PDF file containing the core tech documentation about their setup.
The solution design is written in English. The solution designs can be found in the client documentation under the respective client folders.
The solution design always documents the current state of the solution. This is distinct from the description in the planio order (see Create Order). The order describes the incremental changes needed for a client, given what he already has. See also Transaction vs Positions.
Structure
The solution design contains at least 3 files:
- organization.md,
- solution-overview.md,
- and one file for each perspective, e.g. project.md.
The files contain these sections:
- Organization
- Introduction
- Key People
- Solution Overview
- Background
- Data Sources
- Data Lineage
- Perspectives
- Workspaces
- Semantic Models
- Reports
- For each Perspective
- Introduction
- Entities
- Processes
- Semantic Model
- Reports
- KPIs
The following sections describe the contents of each of the three files of the solution design.
Organization
Introduction
This is an introduction to the company. We describe:
- Activities
- Company Structure
- Divisions
- Legal Entities
Key People
These are bullet point lists with key people both at the client and with pwrp.
Solution Overview
Background
A short introduction to the different artifacts we have built for the client.
Data Sources
Here, we describe the source systems, such as:
- ERP and ERP modules
- CRM
- Excel
Again, a table is good enough:
Example
| Source | System | Version | Access | Refresh | Other Remarks |
|---|---|---|---|---|---|
| Business Central | On prem | On prem, 21.0 | Via HCM | Daily, some tables are incremental | This is managed by Christiaens |
| Invoice Line History | Excel on Teams | Via Power BI Connector | Daily | Contains the legacy INVOICE_LINE | |
| Client History | Excel on Teams | " | " | Contains the legacy CLIENT |
Data Lineage
Data lineage refers to the process of understanding, recording, and visualizing the journey of data as it travels from its source to its destination.
A brief overview of:
-
the data sources
-
the overall lineage
Example
graph LR
BC[fa:fa-cloud BC]
ILH[fa:fa-file-excel Invoice Line History]
CH[fa:fa-file-excel Client History]
BS[fa:fa-folder Blob Storage]
DWH[fa:fa-database DWH<br>SQL Server]
AF((fa:fa-chevron-circle-right<br>Azure<br>Function))
ADF((fa:fa-chevron-circle-right<br>Azure<br>Data<br>Factory))
SMS((fa:fa-star-of-life<br>Semantic<br>Model<br>Sales))
SML((fa:fa-star-of-life<br>Semantic<br>Model<br>Stock))
RS1(fa:fa-chart-pie Sales<br>Report)
RS2(fa:fa-chart-pie Supplier<br>Report)
PDFS(fa:fa-file Stock<br>PDF)
RL(fa:fa-chart-pie Stock<br>Report)
ILH-->BS
CH-->BS
BC-->AF-->ADF
BS-->ADF-->DWH
DWH-->SMS
DWH-->SML
SMS-->RS1
SMS-->RS2
SMS-->PDFS
SML-->RL
style DWH fill:#007fff
style BS fill:#007fff
style AF fill:#007fff
style ADF fill:#007fff
style SMS fill:#FFD700,color:#000
style SML fill:#FFD700,color:#000
style RS1 fill:#FFD700,color:#000
style RS2 fill:#FFD700,color:#000
style PDFS fill:red,color:#fff
style RL fill:#FFD700,color:#000
Legend
Again, don't overdo it. A simple overview is worth more than a super-detailed picture that is out of date.
The directions of the Arrows depict flow of data.
Perspectives
A table containing the perspectives.
Example
| Perspective | KPQ |
|---|---|
| Project | Which projects are profitable? |
Entities
This is a simple table of entities that are used for this perspective.
Example
| Entity | System | Description | Count |
|---|---|---|---|
| COUNTERPARTY | BC | Counterparties are both clients and suppliers. They are discriminated by the Type flag | 3700 |
| ARTICLE | BC | Articles have a SKU code which identifies them. A challenge is that articles are replaced by newer models, and then we would like to report on a consolidated basis. | 1000, plus 2000 historic |
| PRICE_LIST | BC | Price Lists are virtual objects that are combined by business logic from a variety of sources. | |
| OFFER | BC | There is no sale without an offer. Offers have multiple versions. | |
| ORDER | BC | Each Order is linked to an Offer version. | |
| INVOICE | BC | Typically, there is a single invoice per Order, but there are exceptions. Sometimes, there are multiple invoices per order. Sometimes, an invoice is sent on multiple orders. | ~15k INVOICE_LINES/mth |
| CHANNEL | BC | A channel is similar to a distributor, but not exactly the same thing. They are modelled as financial dimensions in BC. |
Many entities are typically appearing in multiple perspectives. For this reason, we provide a single table for all perspectives.
The terms we use are in the client's language, both in the sense of EN, NL, or DE, but also in the sense of using the client's terminology.
One goal of this is precisely to understand the client
-
does he call it Item or Article or Product?
-
are clients and suppliers separate, or are they all together in a single counterparty table?
-
does he work with work orders?
-
etc.
Workspaces
A table containing the workspaces and who is using them.
Example
| Workspace | Users | Access |
|---|---|---|
| Project Managers | Project Managers, e.g. Philipp | Users added to WS individually |
| Accounting | Accounting, e.g. Manuel | AD Group Accounting |
Semantic Models
A table containing all the semantic models.
Example
| Workspace | Description | Access |
|---|---|---|
| Operations | Operations stuff, e.g. Isabelle | Isabelle |
| OperationsEmbedded | Embed Capacity Workspace for the paginated timelog run |
Files
A table containing the pbix and rdl files.
Example
| File Name | Workspace | Description |
|---|---|---|
| time_reporting.pbix | Operations | |
| pax8 dashboard.pbix | Operations |
For Each Perspective
Introduction
This is a brief description of the Perspective, specifically
-
Who are the stakeholders
-
Why is this important
-
What are we trying to achieve
Perspectives describe how we look at the data, who is addressed with the reports.
Often, a perspective is a view on the business by a specific team (e.g. sales), a stakeholder (e.g. directors) or from a certain angle (e.g. finance).
Examples of perspectives are:
- Sales
- Finance
- HR
- Clients
There is typically one Workspace in PBIS per perspective. Often, we have a Semantic Model per perspective, but sometimes the same Semantic Model is shared by multiple reports on different perspectives.
Below, we will have one section per perspective, so this is just a very brief overview.
Processes
Here, we describe (on a very high level) the business processes relevant for this perspective.
The typical methodology we use is a bullet list. Pay attention to highlight the Actors, the Entities and the Systems.
We use the following formatting:
-
The Actor is bold
-
The ENTITY is all-caps
-
The System is italic
Sometimes, you may want to use an enhanced sequence diagram for visualisation, but usually this takes too much time.
Example
- The Sales Agent signs the DEAL in Sales Force
- The basic PROJECT parameters are synced to Business Central
- In the weekly collab meeting, the PROJECT is assigned to a Project Manager
- etc.
Tip
Keep it short!
Semantic Model
The Semantic Model (formerly called ADM, analytic data model) has different meanings. What we mean here is essentially the Star Schema.
Again, we keep it simple and define only the key attributes.
If there exists a standard Semantic Model that is documented, refer to it and highlight differences.
Again, we use Mermaid to document.
See also Development Guidelines for naming conventions.
Example
erDiagram
FactAmount {
id TransactionNumber
eur Amount "signed amount (+/-)"
}
DimCalendar {
date Date
etc etc
}
DimAccount {
int AccountCode "3402"
txt AccountName
txt etc "Add any level of groups, categories, etc."
}
DimRealisationType {
code RealisationTypeCode "R, P"
txt RealisationTypeName "Realised, Planned"
}
DimAccountingType {
code AccountingTypeCode "AC, AL"
txt AccountingTypeName "Accounting, Allocation"
}
DimDivision {
code DivisionCode
txt Divisionname
}
DimCompany {
code CompanyCode
txt CompanyName
}
DimCalendar ||--o{ FactAmount: refs
DimAccount ||--o{ FactAmount: refs
DimRealisationType ||--o{ FactAmount: refs
DimAccountingType ||--o{ FactAmount: ref
DimDivision ||--o{ FactAmount: ref
DimCompany ||--o{ FactAmount: ref
KPIs
Here, we define the formulas used to calculate values.
This is hard, for various reasons:
- it is difficult to find the right level of detail
- it is difficult to formalise time, lags, etc
You will find some help and guidance in the Theory section, specifically:
Important
While this is hard, it is also very important.
To make things easier, it is crucial to follow some standards.
The two most important standards are:
- Use the variable names as defined in sd-cheat-sheet
- Use the standard notation with Latex formulas: latex