Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6d9d29b786 | ||
|
|
6f176b35e1 | ||
|
|
d342e51241 | ||
|
|
57e8a6e975 | ||
|
|
9666ca3300 | ||
|
|
6fa1b4f6ba |
@@ -22,11 +22,3 @@ Button info as follows:
|
||||
|Update Licence Key| Link to the screen for providing a new Data Controller licence key|
|
||||
|Export DC Library DDL|COMING SOON!! <br>Exports the data controller control library in DB specific DDL (eg SAS, PGSQL, TSQL) and allows an optional schema name to be included|
|
||||
|
||||
## Licence Key Screen
|
||||
|
||||
The licence key screen is where you apply or update your Data Controller licence key. The following features are available:
|
||||
|
||||
* **Paste both keys at once** - if you have received a combined key, simply paste it into the licence key field and both the licence key and activation key fields are filled in automatically. You can toggle between the combined-key input and the traditional two-field layout.
|
||||
* **Preview before applying** - as soon as both fields are populated, the key details (expiry date, number of users, active features) are displayed so you can confirm the key is correct before clicking Apply.
|
||||
* **Protocol warning** - if you paste a key that was generated for a different connection type than the one you are using (http vs https), a warning is shown and the Apply button is blocked, preventing a key that will not work from being saved.
|
||||
|
||||
|
||||
@@ -39,10 +39,6 @@ Note that since the CAS connection is using a shared account, the CASUSER librar
|
||||
|
||||
It can happen that a CAS table is configured in Data Controller but not loaded into memory. In this case, when a user selects the table, it will be automatically loaded.
|
||||
|
||||
### REPLACE Load Type
|
||||
|
||||
The REPLACE load type (which replaces all rows in the target table with the staged data) is supported on CAS tables. This works the same way as it does for regular SAS datasets - see [MPE_TABLES](/dcc-tables/#loadtype) for general REPLACE documentation.
|
||||
|
||||
## Unloading
|
||||
|
||||
After an approval, the in-memory version of the CAS Table will be updated. To apply this to the underlying file on disk, the following code must be executed (eg in a POST APPROVE HOOK):
|
||||
|
||||
@@ -60,7 +60,7 @@ Formulas use column names, not cell references, so there is no need to know the
|
||||
Each row calculates its own result - the PRICE in row 1 is multiplied by the VOLUME in row 1, the PRICE in row 2 by the VOLUME in row 2, and so on.
|
||||
|
||||
!!! note
|
||||
Each column name in the formula must be surrounded by spaces (eg ` PRICE ` not `PRICE`) so it is recognised as a column reference rather than part of a function name. Text inside quotes is left as-is.
|
||||
Each column name in the formula must be surrounded by spaces (eg ` PRICE ` not `PRICE`) so it is recognised as a column reference rather than part of a function name. For example, `=MATCH( PRICE )` resolves the column reference, but `=MATCH(PRICE)` does not - PRICE is left unrecognised and the formula will error rather than using the column's value. Text inside quotes is left as-is.
|
||||
|
||||
### HARDFORMULA vs SOFTFORMULA
|
||||
|
||||
@@ -77,7 +77,7 @@ Each row calculates its own result - the PRICE in row 1 is multiplied by the VOL
|
||||
|
||||
Formulas can reference three special values that are resolved at runtime:
|
||||
|
||||
* `DC.ROW_STATUS` - the current state of the row: `M` (Modified), `A` (Added), `D` (Deleted), or `U` (Unchanged).
|
||||
* `DC.ROW_STATUS` - the current state of the row: `M` (Modified), `A` (Added), `D` (Deleted), or `U` (Unchanged). A newly-added row is `A` from the moment it is created - there is no transient state before that.
|
||||
* `DC.USER_NAME` - the logged-in user id.
|
||||
* `DC.ORIG_VALUE` - the original cell value before the current edit.
|
||||
|
||||
|
||||
+1
-15
@@ -130,20 +130,6 @@ Now the services are deployed (including the service which creates the staging a
|
||||
* Admin Group - the members of this group will have full access to Data Controller
|
||||
* Compute Context - the context configured in Step 1
|
||||
|
||||
!!! note
|
||||
On the first-launch configuration screen, the **Groups** dropdown shows your own groups first, the **Contexts** dropdown groups contexts by their batch user, and a **Verify** button lets you confirm the startup service is running before continuing. If no admin groups are found, a clear message is shown instead of the screen hanging silently.
|
||||
|
||||
!!! note
|
||||
The login page provides input contrast and validation. Submitting empty fields does not produce an infinite spinner.
|
||||
|
||||
### Deploy Checks
|
||||
|
||||
The deploy process runs additional checks during installation to catch configuration issues early. For larger Viya environments, the deploy script is chunked for reliability. The compute context is also automatically corrected during deploy if needed.
|
||||
|
||||
!!! note
|
||||
A debug comment is added to the compute context during deploy. This is permanent - it is not removed by subsequent deploys.
|
||||
|
||||
|
||||
### Optimisation
|
||||
|
||||
At this point, every DC request will read the `services/public/settings.sas` file to get the DC library (and other) settings. To avoid these API calls (which will speed up the app) we can simply move this code to the autoexec. Steps as follows:
|
||||
@@ -189,4 +175,4 @@ It is possible to embed a Data Controller table within SAS Visual Analytics by s
|
||||
|
||||
To make the portlet more visually appealing, the Data Controller title bar can be removed by adding `?embed=true` to the URL. When opening in a new window, the title bar will be gone.
|
||||
|
||||
For a deeper VA integration - where report row selections drive filters and column visibility in the Data Controller editor - append `?embed=va` instead. See the [SAS Visual Analytics Embed](/embed-va/) page for details on filter modes, configuration, and debugging.
|
||||
For a deeper VA integration - where report row selections drive filters and column visibility in the Data Controller editor - append `?embed=va` instead. See the [SAS Visual Analytics Embed](/embed-va/) page for details on filter modes, configuration, and debugging.
|
||||
|
||||
+9
-68
@@ -20,76 +20,9 @@ When features are requested, we will describe the work to be performed in the se
|
||||
|
||||
The following features are currently requested:
|
||||
|
||||
* Additional Validations
|
||||
* Ability to set 'number of approvals' to zero, enabling instant updates (4 days)
|
||||
* Ability to make automated submissions using an API
|
||||
|
||||
### Additional Validations
|
||||
|
||||
The following additional features are necessary:
|
||||
|
||||
* ~~Frontend Formulae~~ - **Delivered** in v7.13.0. See [Formula Rules](/dcc-validations/#formula-rules).
|
||||
* Regex Rules - **Delivered**. See [Regex Rules](/dcc-validations/#regex-rules).
|
||||
|
||||
The above rules will apply only at frontend, and will be configurable in the MPE_VALIDATIONS table. The values will appear as part of the [editors/getdata](https://code.datacontroller.io/getdata_8sas_source.html) service response in the `dqrules` object.
|
||||
|
||||
**Frontend Formulae**
|
||||
|
||||
The plan here will be to introduce [hyperformula](https://hyperformula.handsontable.com/guide/demo.html) into HandsOnTable. It will allow a library of ~400 functions and advanced excel-like behaviour. It integrates natively [as a plugin with HandsOnTable](https://handsontable.com/docs/javascript-data-grid/formula-calculation/#available-functions).
|
||||
|
||||
The initial challenge will be that HyperFormula requires cell references to operate, eg:
|
||||
|
||||
|ITEM|PRICE|VOLUME|REVENUE|
|
||||
|---|---|---|---|
|
||||
|PAPER|4.20|100|`= B1 * C1`|
|
||||
|PEN|61.02|1,971|`= B2 * C2`|
|
||||
|
||||
Whereas end users cannot know these references ahead of time. Therefore the references will be made using variable names, eg:
|
||||
|
||||
|
||||
|ITEM|PRICE|VOLUME|REVENUE|
|
||||
|---|---|---|---|
|
||||
|PAPER|4.20|100|`= PRICE * VOLUME`|
|
||||
|PEN|61.02|1,971|`= PRICE * VOLUME`|
|
||||
|
||||
|
||||
The frontend can then perform replacement of the variables for each Formula cell. For instance, replacing ` PRICE ` with ` B1 ` and ` VOLUME ` with ` C1 ` in the first row (and with ` B2 ` and ` C2 ` in the second row respectively).
|
||||
|
||||
To avoid clashes with names that match function names (eg, `MATCH()`) each named variable **must have a leading and trailing blank**, and we should be sure to ignore variables inside of single or double quoted strings - eg ` ITEM & " string ITEM "` (would resolve to `A1 & "string ITEM "`).
|
||||
|
||||
There would be two types applied:
|
||||
|
||||
* `HARDFORMULA` -> Column is readonly
|
||||
* `SOFTFORMULA` -> Column can be changed by the user
|
||||
|
||||
To enable conditional logic (eg, show the current user id if row is changed), we also need a new column in the EDIT grid, to show the edit status (Modified, Added, Deleted, Unchanged). This should be the first column, and should NOT be submitted to backend. We could display these values as icons, rather than letters.
|
||||
|
||||
These properties can be accessed using the following literals:
|
||||
|
||||
* DC.ROW_STATUS - replaced at runtime with the cell reference, eg A1 or A2. Values would be M, A, D, or U.
|
||||
* DC.USER_NAME - replaced at runtime with the logged-in user id
|
||||
* DC.ORIG_VALUE - replaced at runtime with the original cell value
|
||||
|
||||
An example of a rule value that intends to show the current user id if the row is changed:
|
||||
|
||||
```
|
||||
RULE_VALUE= if( DC.ROW_STATUS != 'U', DC.USER_NAME, DC.ORIG_VALUE )
|
||||
```
|
||||
|
||||
Which would translate to the following formula, after the page is loaded:
|
||||
|
||||
```
|
||||
=if(A1!='U',"sasdemo","sasinstaller")
|
||||
```
|
||||
|
||||
**Regex Rules**
|
||||
|
||||
There are two types of rule we can apply in the form of regular expressions:
|
||||
|
||||
* `HARDREGEX` -> If the value fails the rule, the data cannot be submitted (turns red)
|
||||
* `SOFTREGEX` -> If the value fails the rule we change the cell colour to yellow (as a warning), but can still submit
|
||||
|
||||
|
||||
### Set Approvals to Zero
|
||||
|
||||
The following changes are necessary to implement this feature:
|
||||
@@ -236,4 +169,12 @@ It is now possible to restore any change by heading to the particular staged dat
|
||||
|
||||
This will submit a NEW change (which must first be approved) that will revert the table to state it was in just prior to the selected upload.
|
||||
|
||||
Note that Data Controller can only track (and revert) changes that are made using the Data Controller tool itself! It does not / cannot track changes made externally to a table, by other tools.
|
||||
Note that Data Controller can only track (and revert) changes that are made using the Data Controller tool itself! It does not / cannot track changes made externally to a table, by other tools.
|
||||
|
||||
### Frontend Formulae
|
||||
|
||||
Delivered in v7.13.0. Formula columns (HARDFORMULA / SOFTFORMULA) are computed live in the editor using HyperFormula, with variable-name references resolved to row-relative cell references. See [Formula Rules](/dcc-validations/#formula-rules).
|
||||
|
||||
### Regex Rules
|
||||
|
||||
Delivered. HARDREGEX (blocking) and SOFTREGEX (warning) rules validate cell values against a Perl-style regular expression. See [Regex Rules](/dcc-validations/#regex-rules).
|
||||
Reference in New Issue
Block a user