With the change of indentation handling, only one indentation is required (and necessary).
Code examples are right.
As of 24/09/2024, when indenting too much, we get an unclear compilation error in the IDE: "Found number/text/etc. but expected end-of-line.". In this case, reduce the number of indentations to 1 only.
- Regular percentage with 2 digits: excelFormatPercent = "0.00%"
- Percentage with 6 digits (for example: fillrate display): excelFormatFR = "0.000000%"
- Percentage with 6 digits and plus sign for positive values (for example: fillrate increase display): excelFormatFRIncrease = "+0.000000%;-0.000000%;0%"
- Price in dollars: excelFormatUSD = "[$$-409] #,##0.00"
- Price in dollars (accounting): excelFormatAccountingUSD = "_-\[$$-409]* # ##0.00_ ;_-\[$$-409]* -# ##0.00\ ;_-\[$$-409]* -_ "
Property:
seriesLegendTooltip
Description:
Sets the tooltip of the series (in the legend)
Available in (that I know of):
linechart > series
chart > block > plotxy > series
chart > block > plot > series
chart > block > scatter > series
*Property:*
seriesLegendTooltip
*Description:*
Sets the tooltip of the series (in the legend)
*Available in (that I know of):*
linechart > series
chart > block > plotxy > series
chart > block > plot > series
chart > block > scatter > series
booleans
specifies the boolean rendering values for the boolean pipeline.
table T = with
[| as B |]
[| true |]
[| false |]
show table "" a1h3 with
T.B
T.B as "Ja/Nein" { booleans: "Ja/Nein" }
T.B as "Oui/Non" { booleans: "Oui/Non" }
T.B as "✔️/❌" { booleans: "✔️/❌" }
T.B as "True" { booleans: "True" }
T.B as "✔️" { booleans: "✔️" }
T.B as "Tru//e/N//A" { booleans: "Tru//e/N//A" }
T.B as "True///False" { booleans: "True///False" }
T.B as "True/False/Other" { booleans: "True/False/Other" }
As of 06/02/2024:
Files.ContentChangeDate
, Files.ContentChangeHour
and Files.ContentChangeMinute
represent the modify datetime (last date when the contents of the file were changed)
Files.AnyChangeDate
, Files.AnyChangeHour
and Files.AnyChangeMinute
represent the change datetime (last date when anything happened to the path, including moving or copying the file)
The former fields Files.ModifiedDate
, Files.ModifiedHour
and Files.ModifiedMinute
are equivalent to Files.AnyChangeDate
, Files.AnyChangeHour
and Files.AnyChangeMinute
and should be decommissioned soon.
As of 23/01/2024, filesUrl function is replaced by 2 functions:
/// Returns an URL for the file, identified by the hash, at the provided path in /files, and (if known at compile-time) remembers that said file is referenced by this script.
[restricted]
map fileUrl(hash: text, path: text) : text as "fileurl(txt,txt)"
/// Returns an URL for the folder at the provided path in /files, and (if known at compile-time) remembers that said folder is referenced by this script.
[restricted]
map folderUrl(path: text) : text as "folderurl(txt)"
/// Returns its argument as-is. If the path is known at compile-time and points to /files, remembers that said file is referenced by this script.
[restricted]
map downloadUrl(fullpath: text) : text as "downloadurl(txt)"
/// Returns an URL for the file with the provided hash, to be downloaded as the provided name.
[restricted]
map downloadUrl(hash: text, name: text) : text as "downloadurl(txt,txt)"
/// Returns an URL for the folder at the provided path in /files, and (if known at compile-time) remembers that said folder is referenced by this script.
[restricted]
map filesUrl(path: text) : text as "filesurl(txt)"
Other useful functions generating URLs are not listed in this documentation:
sliceUrl(slice: ordinal) -> text, pure function
Produces a link to the specified slice, in the current dashboard
sliceUrl(slice: ordinal, tab: text) -> text, pure function
Produces a link to the specified slice & tab, in the current dashboard
dashUrl() -> text, pure function
Produces an url towards the current project dashboard
dashUrl(tabSearch: text) -> text, pure function
Convert a tab name into an url to be used as a link to a specific dashboard tab in current project dashboard
dashUrl(project: number, tabSearch: text) -> text, pure function
Convert a project id and a tab name into an url to be used as a link to a specific dashboard tab
dashUrl(project: number) -> text, pure function
Convert a project id into an url to be used as a link to a dashboard
currentDashUrl() -> text, pure function
Produces an url towards the current run's dashboard.
"The returned text value that contains an URL can be rendered as a link through the StyleCode element {text: "link"}"
{text: link} is deprecated, {href: #(link)} or {href: #[T.Link]} should be used instead
sliceSearchUrl(sliceSearch: text) 🡒 text, pure function
Convert an inspector name search key into an url to be used as a link to a specific slice in current project dashboard
sliceSearchUrl(project: number, sliceSearch: text) 🡒 text, pure function
Convert a project id and an inspector name search key into an url to be used as a link to a specific dashboard slice
sliceSearchUrl(sliceSearch: text, tabSearch: text) 🡒 text, pure function
Convert an inspector name search key and a tab name into an url to be used as a link to a specific dashboard slice and tab in the current project dashboard
sliceSearchUrl(project: number, sliceSearch: text, tabSearch: text) 🡒 text, pure function
Convert a project id, an inspector name search key and a tab name into an url to be used as a link to a specific dashboard slice and tab
It is possible to have sanity checks in user defined functions and throw an error if the check is not passed.
Cf. https://docs.lokad.com/reference/abc/assertfail/
Sometimes, one needs to unfilter twice in a project based on different assumptions.
```
read "/sample/orders.csv" as Orders expect [date] with //dates in the past
"OrderDate" as date : date
Quantity : number
show linechart "Daily Orders" a1c2 {seriesType: "stack"} with
sum(Orders.Quantity)
group into Day // table 'Day' auto-created after 'expect [date]'
span date = [today()..today()+365] //dates in the future
...
```
The previous script fails because
span
is not allowed to drop lines, it can only add new lines.One must filter the
Day
table first to drop any existing data that would be outside the intended span.```
read "/sample/orders.csv" as Orders expect [date] with //dates in the past
"OrderDate" as date : date
Quantity : number
show linechart "Daily Orders" a1c2 {seriesType: "stack"} with
sum(Orders.Quantity)
group into Day // table 'Day' auto-created after 'expect [date]'
where date >= today() //filtering first the current Day table
span date = [today()..today()+365] //dates in the future
...
```