Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Search our knowledge base, curated by global Support, for answers ranging from account questions to troubleshooting error messages.
At Qonnections 2019 I hosted a session called "273367 Qlik Sense Visualizations, best practice and top tricks". Here's the app I used with all tips including test data. Tip titles, more details in app:
* Chart and UI *
Butterfly chart
Gantt chart
Grid chart
Dynamic charts
Map image background
Previous/next in selection
Cyclic groups
Dividers
Date search filters
Dynamic bookmark
Select null
* Add ons *
Above and below
Color above average
Bell curves
Trendlines
Accumulation
Top 5 lines
Offset measures
* Table *
Custom report
Change null color
Sum with null
Subtotals and empty rows
Indentation
Indicators and symbols
Traffic lights
Pajama striping
Sparklines
Link to app
There is also video available: https://www.youtube.com/watch?v=fIOcb_JGNb4&t=3s
I want to emphasize that many of the tips are discovered by others than me, I tried to credit the original author at all places when possible. Many of the tips have been published before on the Qlik Community, the app below can be viewed as my current top picks.
If you liked it, here's more in the same style:
Thanks,
Patric
When an On-Demand App Generation (ODAG) link is created in a selection app and the app is transferred to another owner, then the new owner can only see the option "Add to App Navigation" in the right-click context menu. Options "Edit" and "Delete" are missing.
The same issue happens when the selection app is duplicated by another user.
This is a known limitation of Qlik Sense and has been reported in defectQLIK-83203.
There are default security rules: CreateOdagLinks and ReadOdagLinks.
But no default rule for Update/ Delete of ODAG links.
A work-around solution at the moment is to create custom security rules that grants Update/ Delete access of ODAG links to the new app owner, similar to the followings:
ODAG links are meant to be managed similar to Data connections, where a connection created in one app can be used in other apps. However, while the QMC provides a Data connections tab to list down all connections and control related ownership/ permissions, such management GUI is not available for ODAG links. R&D is considering the ODAG link management page in future releases of the product.
Visualisation Bundle extensions that have been uploaded from a client-managed version of Qlik Sense are not updated automatically.
The expected new features are missing, and, when checking the extensions in the Management Console/Administration section, they have an old date.
Remove the manually-uploaded Visualisation Bundle extensions from the Management Console/Administration page, to use the ones that come with Qlik Cloud Analytics. Only the integrated extensions get updated automatically.
Visualisation Bundle extensions that have been manually uploaded to the tenant overwrite the ones integrated within the platform. The uploaded extensions won't be automatically updated.
When using Qlik REST connector to load data from API sources that return JSON or XML response, sometimes a huge data model with many tables is returned although the response contains only a single table.
For example, the following JSON message is parsed into 5 single-row tables instead of one table with 5 rows:
Environment:
The JSON response has a "nested" structure, i.e each data record is stored as a separated JSON object, which is not member of an array.
Qlik REST connector applies a standard strategy for parsing JSON response:
As a result, nested JSON response is parsed as multiple tables instead of a single flat table. You can find the same strategy in other JSON parsing tool, such as http://json2table.com/.
The same logic applies to nested XML responses.
Qlik REST connector does not yet support loading JSON/ XML responses with nested structure. There is an ongoing improvement request to support this structure in future releases of the connector.
Meanwhile, please consider the following work-around solution:
When changing the name of a dataset, the source name still stays the same. This can be seen by uploading a “firstname.qvd" and renaming it to “secondname.qvd”.
The dataset's detail will show "firstname.qvd" as the source.
As a consequence:
Trying to load “FROM [lib://DataFiles/secondname.qvd]” will produce a "(Connector error: File not found)" error.
This is not a defect, it's how the product is designed.
A dataset represents a data resource with its properties such as name. The value of that is that you are able to use more user-friendly names of datasets without having to change the source names, which can be useful when the dataset is pointing to a database table for instance.
In the future, there is a plan to add the possibility of calling the name of the datasets in the script.
When extracting data from AWS DynamoDB using ODBC connector, the following IAM policy can be configured for an IAM user and thus, pull data from only one table into Qlik i.e. viewing the expected table in "Select data" UI instead of providing access to all AWS DynamoDB database tables.
{
"Statement": [
{
"Action": [
"dynamodb:Scan",
"dynamodb:ListTables",
"dynamodb:DescribeTable"
],
"Effect": "Allow",
"Resource": "arn:aws:dynamodb:eu-west-2:*:table/my-table-name",
"Sid": "EcrDynamoDBReadAccess"
}
],
"Version": "2012-10-17"
}
However, with above IAM policy, select data is empty and the following error is displayed
error "(Connector error: ERROR [42S02] [Simba][SQLEngine] (31740) Table or view not found: ..my-table-name)"
When given access through DynamoDB UI console or AWS API, the above IAM policy is valid from AWS DynamoDB perspective. But, ODBC and JDBC drivers need access to fetch metadata, hence ListTables access is required. As ListTables is just read access, it should not be an issue.
Use the following reviewed IAM Policy
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListTablesAccess",
"Effect": "Allow",
"Action": [
"dynamodb:ListTables"
],
"Resource": "*"
},
{
"Sid": "SpecificTable",
"Effect": "Allow",
"Action": [
"dynamodb:DescribeTable",
"dynamodb:Get*",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": "arn:aws:dynamodb:*:*:table/<MyTable>"
}
]
}
Information provided on this defect is given as is at the time of documenting. For up to date information, please review the most recent Release Notes, or contact support with the ID QB-27013 for reference.
Product Defect ID: QB-27013
This is a basic example in order to get started with Advanced Analytics Integration in Qlik Sense using PYTHON.
This customization is provided as is. Qlik Support cannot provide continued support of the solution. For assistance, reach out to our Professional Services or engage in our active Integrations forum.
The architecture at a high-level looks like this:
With this new capability, it is possible to add syntax to a chart expression that tells Qlik Sense that a particular expression should not be evaluated on the Qlik Sense server, but instead, all the information and data needed to calculate that expression should be sent via the server side extension on to the back end Python system for calculation.
After the advanced analytic calculations are completed, the data is sent back to the Qlik Sense Server and to the client for visualization.
For an example with video that uses R-Server instead, see R Integration with Qlik Sense
In order to display a "Hello World" message in the Qlik Sense App, Perform the steps below:
Note: To obtain the latest HelloWorld example and other Python examples, see Python Examples in Qlik's Github repository. Make sure to check out the GetStarted.md documentation as well.
SSEPython.ScriptAggrStr('", ".join(args[0])' , HelloWorldData)
Eight script functions are automatically added to the functionality of the plugin. What is needed to be covered on the plugin side to fulfill
the functionality is to implement the Script aggregate rpc function.
The syntax of these functions is <EngineSSEName>.<FunctionName>(Script [,Parameter...])
where the Script is a Python script to be evaluated & Parameter is the data sent from Qlik's end.
Here, the ScriptAggrStr function is used which accepts argument of type String & returns a String after an aggregation. The 'join' function in Python method returns a string, which is the concatenation of the strings in the sequence seq. The separator between elements is the string providing this method. From Qlik side, we pass a field called HelloWorldData which contains the 2 strings as we have loaded.
To use SSE function(s) to load data via application load script, the Extension clause needs to be used. See additional information as well as an example under Load > Argument > Extension and Examples > Loading from Analytic connections via the following link: Script Regular Statements: Load.
Downloading a Tabular Reporting On-Demand report fails with:
There was an error downloading the report
For tabular reporting to be able to use a chart, the chart must be on a public sheet.
If the object is already in a public sheet, Tabular Reporting may not recognize the Qlik Sense theme used. To resolve this, change the currently used Qlik Sense Theme to, for example, the Horizon or Sense Classic theme and try again.
The current coverage of the built in location database in Qlik GeoAnalytics and Qlik Sense native mapchart. See attachments for an overview description and table with content per country.
Qlik Sense engine "Document Load: Long pre-generation time" warning may occur in Engine logs while an app is opening slower than expected.
10934 20210527T075324.538+0200 WARN VMQLIK System.Engine.Engine 185 b61ba19a-61c3-4248-8a4d-74asssc08afa ABC\QLIKSENSEPR Document Load: Long pre-generation time (>100% of open). Review expression dimension usage, and consider moving definitions to the load script. Pre-gen can be disabled at the cost of sheet calculation performance. 35d66cc9-d537-464c-bddc-42f3a9320dfe INTRA-TPG vazeille 20210527T075324.528+0200 6068 2784 e467645c-4f82-4d6e-a7e9-449609139743 6ccaa3ec-b5c2-4e7e-917f-a66f6c44da19 20210526T152424.000+0200 b61ba19a-61c3-4248-8a4d-74aacdc08afa
The root cause for this error is that the app has a noticeable amount of dimensions defined as expressions, instead of field references to the data model. By default, these expression-based dimensions will be evaluated during the initial app opening and added as Field-on-the-fly to the data model.
See Qlik Design Blog post below for more details about the Field-on-the-fly concept;
https://community.qlik.com/t5/
The pre-generation of Field-on-the-fly is most often not a noticeable part of the initial app opening, but some characteristics of the app may contribute to that the pre-generation takes a longer time;
The recommended approach to resolve the "Document Load: Long pre-generation time" warning in the engine log, is to review the related app and transform expression-based dimensions from the visualizations and master items into actual fields in the data model.
Calculated dimensions with logical comparisons can often be resolved into fields by moving the logic.
It is possible to disable the Pre-generation of Fields-on-the-Fly, by adding DisableFotfPreGen=1 in Engine settings.ini:
https://community.qlik.com/t5/
Notice, the setting applies to all apps opened on the Engine and may give negative run-time performance when users access sheets.
It is not possible to set up a Microsoft Office 365 email provider with OAuth 2.0 authentication.
The HAR file shows this message in Network:
{connectionFailed: true, message: "Error during email request", success: false}
connectionFailed: true
message: "Error during email request"
success: false
Configure the Mail.Send permission as it is described in this article.
This problem occurs when the Mail.Send permission has not been configured in the app registration.
More information about the Mail.Send permission can be found here.
At Qlik Connect in Orlando 2024 I hosted a session called "708769: What's New in Visualizations". Here's the slides and the app I used during the presentation.
Thanks,
Patric
At Qlik Connect 2024 I hosted a session called "Top 10 Visualization tips". Here's the app I used with all tips including test data.
Tip titles, more details in app:
I want to emphasize that many of the tips were discovered by others than me, I tried to credit the original author at all places when possible.
If you liked it, here's more in the same style:
Thanks,
Patric
When you download an object with table formatting, the downloaded file cannot be opened in Excel, and you will see this kind of error:
Excel cannot open the file XXX.xlsx because the file format or file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file.
Upgrade the Qlik Sense version to May 2023 or higher.
For more info, see Qlik Sense on Windows May 2023 Release Note
Qlik Sense Enterprise on Windows May 2023 and higher
Product Defect ID: QB-17850
Qlik Sense Enterprise on Windows Feb 2023 and earlier
When embedding a sheet in Single Configurator, the user notices a blank area on the top
This is working as designed and can't be changed. It is a limitation that the sheet tile cannot be exported. See Downloading a visualization.
Change the value in css file to reduce the padding size:
At QlikWorld 2023 I hosted a session called "Top 10 Visualization tips". Here's the app I used with all tips including test data.
Tip titles, more details in app:
I want to emphasize that many of the tips were discovered by others than me, I tried to credit the original author at all places when possible.
If you liked it, here's more in the same style:
Thanks,
Patric
Note: These instructions apply to Qlik Cloud. Qlik Sense Enterprise on Windows functions similarly. See How To Edit Published Qlik Sense Apps on Qlik Sense Enterprise on Windows.
Qlik Cloud offers two different spaces to work in. Shared Spaces and Managed Spaces. Apps previously published to a Managed Space e cannot be edited in place, and they will need to be replaced by an app modified on a personal or shared space.
This article covers publishing to both. For additional information on the available space types, see Working in spaces.
Apps are not published to Shared Spaces. They are moved to or uploaded to them. Apps in shared spaces can therefore be edited freely by anyone that has the correct permissions, like any other unpublished app. Please, check Developing and sharing apps with shared spaces on the help site.
Apps cannot be edited directly in managed spaces. The developer will have to modify the original app which is present in their own personal space, or in a shared space. The app is always left in its original place when the app gets published: the publishing process will make a copy of the app, and keep the original where it was.
If the original app was deleted at some stage, a published app can be unpublished using the REST API. The developer will then be able to edit the unpublished app.
If the system cannot identify a connection (for instance, if the modified app was actually redeveloped from scratch) you will need to manually the space and the exact name of the published app and prompt to replace the app.
Tabular Reporting events in the management console not showing for all the users in the tabular reporting recipient list
When section access is used in a Qlik App, ensure to add all required recipients/users to the section access load script
For example, users in the Recipient import file should ideally match the users entered to the Section Access load script of the app.
This generally permits users to view management console details such as 'Events' assuming those user also have the necessary 'view' permissions in the tenant in which the app exists
If some of the recipients in the tabular reporting recipient list do not have access to the Space/App - they won't be considered in the task execution because they fail the governance.
ie: Recipients/users that are not added to the load script will not have access to the app nor associated management console events.
This is expected behavior.
NPrinting report is hanging on preview or in a publish task preventing the report from generating as expected. In many cases with 'Carded' Qlik Sense themes, we are seeing this problem.
This is also seen when the extended sheet feature is used
"error=task SENSE_JS_PAINT_COVER_POINTS_TIMEOUT"
There is currently a fix coming to resolve 'carded' custom themes however this fix is still under investigation.
Information provided on this defect is given as is at the time of documenting. For up to date information, please review the most recent Release Notes, or contact support with the QB-24997 for reference.
Possible workarounds for this are:
NOTE: Extended or Custom sheet sizes are not fully supported. See Qlik Help page below for details
Qlik Sense custom and extended sheets
Many of the GeoAnalytics can be executed with a split input of the indata table. This article explains which and how to modify the code that the connector produces. Operations that cannot be Splittable are mostly the aggregating and hence not Splittable. When loadable tables are used for input, inline tables are created in loops and can be used for a quick way to split. Of course it's possible to write custom code to do the splitting instead.
Making calls with large indata tables often causes time outs on the server side, splitting is a way around that.
Splittable ops | Non-Splittable ops | Special ops, splittable |
---|---|---|
|
|
|
Bining and SpatialIndex differs from other operations, they are not placing any call to the server if the indata are internal geometries, ie lat ,ong points. The operations als produce the same type of results so the resulting tables can be concatenated.
The code as the connector produces it:
/* Generated by Idevio GeoAnalytics for operation Within ---------------------- */
Let [EnclosedInlineTable] = 'POSTCODE' & Chr(9) & 'Postal.Latitude' & Chr(9) & 'Postal.Longitude';
Let numRows = NoOfRows('PostalData');
Let chunkSize = 1000;
Let chunks = numRows/chunkSize;
For n = 0 to chunks
Let chunkText = '';
Let chunk = n*chunkSize;
For i = 0 To chunkSize-1
Let row = '';
Let rowNr = chunk+i;
Exit for when rowNr >= numRows;
For Each f In 'POSTCODE', 'Postal.Latitude', 'Postal.Longitude'
row = row & Chr(9) & Replace(Replace(Replace(Replace(Replace(Replace(Peek('$(f)', $(rowNr), 'PostalData'), Chr(39), '\u0027'), Chr(34), '\u0022'), Chr(91), '\u005b'), Chr(47), '\u002f'), Chr(42), '\u002a'), Chr(59), '\u003b');
Next
chunkText = chunkText & Chr(10) & Mid('$(row)', 2);
Next
[EnclosedInlineTable] = [EnclosedInlineTable] & chunkText;
Next
chunkText=''
Let [EnclosingInlineTable] = 'ClubCode' & Chr(9) & 'Car5mins_TravelArea';
Let numRows = NoOfRows('TravelAreas5');
Let chunkSize = 1000;
Let chunks = numRows/chunkSize;
For n = 0 to chunks
Let chunkText = '';
Let chunk = n*chunkSize;
For i = 0 To chunkSize-1
Let row = '';
Let rowNr = chunk+i;
Exit for when rowNr >= numRows;
For Each f In 'ClubCode', 'Car5mins_TravelArea'
row = row & Chr(9) & Replace(Replace(Replace(Replace(Replace(Replace(Peek('$(f)', $(rowNr), 'TravelAreas5'), Chr(39), '\u0027'), Chr(34), '\u0022'), Chr(91), '\u005b'), Chr(47), '\u002f'), Chr(42), '\u002a'), Chr(59), '\u003b');
Next
chunkText = chunkText & Chr(10) & Mid('$(row)', 2);
Next
[EnclosingInlineTable] = [EnclosingInlineTable] & chunkText;
Next
chunkText=''
[WithinAssociations]:
SQL SELECT [POSTCODE], [ClubCode] FROM Within(enclosed='Enclosed', enclosing='Enclosing')
DATASOURCE Enclosed INLINE tableName='PostalData', tableFields='POSTCODE,Postal.Latitude,Postal.Longitude', geometryType='POINTLATLON', loadDistinct='NO', suffix='', crs='Auto' {$(EnclosedInlineTable)}
DATASOURCE Enclosing INLINE tableName='TravelAreas5', tableFields='ClubCode,Car5mins_TravelArea', geometryType='POLYGON', loadDistinct='NO', suffix='', crs='Auto' {$(EnclosingInlineTable)}
SELECT [POSTCODE], [Enclosed_Geometry] FROM Enclosed
SELECT [ClubCode], [Car5mins_TravelArea] FROM Enclosing;
[EnclosedInlineTable] = '';
[EnclosingInlineTable] = '';
/* End Idevio GeoAnalytics operation Within ----------------------------------- */
The header and the call is moved inside of the loop. chunkSize decides how big each split is.
Note that the first inline table now comes after the first one, this to get the call inside of the iteration.
/* Generated by Idevio GeoAnalytics for operation Within ---------------------- */
Let [EnclosingInlineTable] = 'ClubCode' & Chr(9) & 'Car5mins_TravelArea';
Let numRows = NoOfRows('TravelAreas5');
Let chunkSize = 1000;
Let chunks = numRows/chunkSize;
For n = 0 to chunks
Let chunkText = '';
Let chunk = n*chunkSize;
For i = 0 To chunkSize-1
Let row = '';
Let rowNr = chunk+i;
Exit for when rowNr >= numRows;
For Each f In 'ClubCode', 'Car5mins_TravelArea'
row = row & Chr(9) & Replace(Replace(Replace(Replace(Replace(Replace(Peek('$(f)', $(rowNr), 'TravelAreas5'), Chr(39), '\u0027'), Chr(34), '\u0022'), Chr(91), '\u005b'), Chr(47), '\u002f'), Chr(42), '\u002a'), Chr(59), '\u003b');
Next
chunkText = chunkText & Chr(10) & Mid('$(row)', 2);
Next
[EnclosingInlineTable] = [EnclosingInlineTable] & chunkText;
Next
chunkText=''
Let numRows = NoOfRows('PostalData');
Let chunkSize = 1000;
Let chunks = numRows/chunkSize;
For n = 0 to chunks
Let [EnclosedInlineTable] = 'POSTCODE' & Chr(9) & 'Postal.Latitude' & Chr(9) & 'Postal.Longitude';
Let chunkText = '';
Let chunk = n*chunkSize;
For i = 0 To chunkSize-1
Let row = '';
Let rowNr = chunk+i;
Exit for when rowNr >= numRows;
For Each f In 'POSTCODE', 'Postal.Latitude', 'Postal.Longitude'
row = row & Chr(9) & Replace(Replace(Replace(Replace(Replace(Replace(Peek('$(f)', $(rowNr), 'PostalData'), Chr(39), '\u0027'), Chr(34), '\u0022'), Chr(91), '\u005b'), Chr(47), '\u002f'), Chr(42), '\u002a'), Chr(59), '\u003b');
Next
chunkText = chunkText & Chr(10) & Mid('$(row)', 2);
Next
[EnclosedInlineTable] = [EnclosedInlineTable] & chunkText;
[WithinAssociations]:
SQL SELECT [POSTCODE], [ClubCode] FROM Within(enclosed='Enclosed', enclosing='Enclosing')
DATASOURCE Enclosed INLINE tableName='PostalData', tableFields='POSTCODE,Postal.Latitude,Postal.Longitude', geometryType='POINTLATLON', loadDistinct='NO', suffix='', crs='Auto' {$(EnclosedInlineTable)}
DATASOURCE Enclosing INLINE tableName='TravelAreas5', tableFields='ClubCode,Car5mins_TravelArea', geometryType='POLYGON', loadDistinct='NO', suffix='', crs='Auto' {$(EnclosingInlineTable)}
SELECT [POSTCODE], [Enclosed_Geometry] FROM Enclosed
SELECT [ClubCode], [Car5mins_TravelArea] FROM Enclosing;
[EnclosedInlineTable] = '';
[EnclosingInlineTable] = '';
Next
chunkText=''
/* End Idevio GeoAnalytics operation Within ----------------------------------- */
The code as the connector produces it:
/* Generated by GeoAnalytics for operation AddressPointLookup ---------------------- */
Let [DatasetInlineTable] = 'id' & Chr(9) & 'STREET_NAME' & Chr(9) & 'STREET_NUMBER';
Let numRows = NoOfRows('data');
Let chunkSize = 1000;
Let chunks = numRows/chunkSize;
For n = 0 to chunks
Let chunkText = '';
Let chunk = n*chunkSize;
For i = 0 To chunkSize-1
Let row = '';
Let rowNr = chunk+i;
Exit for when rowNr >= numRows;
For Each f In 'id', 'STREET_NAME', 'STREET_NUMBER'
row = row & Chr(9) & Replace(Replace(Replace(Replace(Replace(Replace(Peek('$(f)', $(rowNr), 'data'), Chr(39), '\u0027'), Chr(34), '\u0022'), Chr(91), '\u005b'), Chr(47), '\u002f'), Chr(42), '\u002a'), Chr(59), '\u003b');
Next
chunkText = chunkText & Chr(10) & Mid('$(row)', 2);
Next
[DatasetInlineTable] = [DatasetInlineTable] & chunkText;
Next
chunkText=''
[AddressPointLookupResult]:
SQL SELECT [id], [Dataset_Address], [Dataset_Geometry], [CountryIso2], [Dataset_Adm1Code], [Dataset_City], [Dataset_PostalCode], [Dataset_Street], [Dataset_HouseNumber], [Dataset_Match]
FROM AddressPointLookup(searchTextField='', country='"Canada"', stateField='', cityField='"Toronto"', postalCodeField='', streetField='STREET_NAME', houseNumberField='STREET_NUMBER', matchThreshold='0.5', service='default', dataset='Dataset')
DATASOURCE Dataset INLINE tableName='data', tableFields='id,STREET_NAME,STREET_NUMBER', geometryType='NONE', loadDistinct='NO', suffix='', crs='Auto' {$(DatasetInlineTable)}
;
[DatasetInlineTable] = '';
/* End GeoAnalytics operation AddressPointLookup ----------------------------------- */
The header and the call is moved inside of the loop. chunkSize decides how big each split is.
/* Generated by GeoAnalytics for operation AddressPointLookup ---------------------- */
Let numRows = NoOfRows('data');
Let chunkSize = 1000;
Let chunks = numRows/chunkSize;
For n = 0 to chunks
Let [DatasetInlineTable] = 'id' & Chr(9) & 'STREET_NAME' & Chr(9) & 'STREET_NUMBER';
Let chunkText = '';
Let chunk = n*chunkSize;
For i = 0 To chunkSize-1
Let row = '';
Let rowNr = chunk+i;
Exit for when rowNr >= numRows;
For Each f In 'id', 'STREET_NAME', 'STREET_NUMBER'
row = row & Chr(9) & Replace(Replace(Replace(Replace(Replace(Replace(Peek('$(f)', $(rowNr), 'data'), Chr(39), '\u0027'), Chr(34), '\u0022'), Chr(91), '\u005b'), Chr(47), '\u002f'), Chr(42), '\u002a'), Chr(59), '\u003b');
Next
chunkText = chunkText & Chr(10) & Mid('$(row)', 2);
Next
[DatasetInlineTable] = [DatasetInlineTable] & chunkText;
[AddressPointLookupResult]:
SQL SELECT [id], [Dataset_Address], [Dataset_Geometry], [CountryIso2], [Dataset_Adm1Code], [Dataset_City], [Dataset_PostalCode], [Dataset_Street], [Dataset_HouseNumber], [Dataset_Match]
FROM AddressPointLookup(searchTextField='', country='"Canada"', stateField='', cityField='"Toronto"', postalCodeField='', streetField='STREET_NAME', houseNumberField='STREET_NUMBER', matchThreshold='0.5', service='default', dataset='Dataset')
DATASOURCE Dataset INLINE tableName='data', tableFields='id,STREET_NAME,STREET_NUMBER', geometryType='NONE', loadDistinct='NO', suffix='', crs='Auto' {$(DatasetInlineTable)}
;
[DatasetInlineTable] = '';
Next
chunkText=''
/* End GeoAnalytics operation AddressPointLookup ----------------------------------- */