Overview
As an intermediate link for data access and visualization display, the DataSet provides users with the ability to create models, view data, process data, and share and reuse data, thereby providing effective data support for subsequent visualization display.
It allows business users who do not know SQL code to complete data production and processing at a low cost, greatly reducing the user's usage threshold; at the same time, users can use business models configured by others to help enterprises improve the circulation efficiency of data resources.
Create Business Models
According to business demands, users can create business models from various sources, mainly divided into three categories. The detailed process for creating models from each source can be found in the following:
View Business Models
The details page of a business model is in a read-only state. Users can view detailed data of the model and perform limited (within the selected conditions) filtering and analysis operations in the DataSet and visualization layers.
The retrospective state includes the following four parts, which provide the ability to quickly render viewable data in limited scenarios.
- Common Function Area
- Configuration Panel
- Data Filtering Area
- Chart Display Area
Common Function Area
The common function area is the common framework of the page, where all common information and functions of models in the DataSet are included, as shown in the figure below:
Please refer to the following table for detailed functional descriptions:
name | function | |
---|---|---|
1 | Configure Chart | Using this business model configuration to configure charts, you can choose to configure them to "existing reports" or "new reports". For details, please refer to:Create charts |
2 | Calculated fields | For the secondary processing of this model data and the supplementation of existing fields, please refer to: Create New Calculated Fields |
3 | More
|
|
4 | Go to analytical model | Quick path to initiate a query to re-edit and update the query rules of this business model |
5 | Edit business model | Re-edit and update the query rules of this business model, please refer to: Edit business model |
6 | Business model status information and managers | Show the update status of current data and collaborative management information |
7 | Mode switching | View detailed table mode while viewing the main model, please refer to: Results table details page Also use detailed table mode for data model concatenation, please refer to: Data Processing-Model Splicing |
Analysis configuration zone
The analysis configuration zone displays the query rules of this model, including data constraints when saving snapshots, as shown in the following figure:
Please refer to the following table for detailed functional descriptions:
Name | Function | |
---|---|---|
1 | Metric | The collection of all metrics and custom metrics included in this business model |
2 | Group | The collection of items classified by "event attributes, user attributes, user tags, user segments" in this business model |
3 | Display Items | Control the display and hide of "metrics" or "groups" in the data display area of this business model |
4 | Filter | Filtering conditions for global information in the data extraction rules of this business model |
5 | Time Granularity | The aggregation granularity of the time dimension |
6 | Other Configurations | Including the analysis subject, the timezone in which the analysis is located, etc. |
7 | Data Constraints | Controlled by the metadata permissions of the creator when the model is created The intersection of event table and user table data permissions does not allow the use of events corresponding to users without permissions in the "User Table" |
Data filtering area
The data filtering area can filter and display the data under the current model, while also displaying the data permissions of the current user, as shown in the following figure:
Please refer to the following table for detailed functional descriptions:
Name | Function | |
---|---|---|
1 | Data permissions | Display the data permission control that the current user is under when viewing this business model |
2 | Data update time | Update time of business model data |
3 | Preset Total Range | When in total mode, display the deduplication window for the total results of the current model |
4 | Data aggregation switch | Control whether the current business model displays detailed data results or aggregated data.
|
5 | Data filtering options | Filter and refine the display of time, grouping values, and metric values in the business model |
Chart display area
The chart display area presents the filtered data in the form of charts. At the same time,the current viewer is restricted by the viewing permissions assigned to the current business model, as shown in the following figure:
For a detailed description of the functionality, please refer to the table below:
Name | Function | |
---|---|---|
1 | Chart Functions | The functions supported in the current chart; for example, collapsing time, displaying growth rate, etc. |
2 | Data Export | Subject to the permission controls of data export, it supports exporting Excel data within the scope of user data export permissions. |
3 | Chart Switching | Can be switched to other chart display forms; different chart types are supported based on the source of the business model. |
4 | Data Display | The data range displayed in this area is controlled by the current user's data permission restrictions. |
Result Table Details Page
Each analysis model system compresses into a vector based on the time dimension, providing a detailed result table under the time, which can be freely switched and viewed. This result table is stored according to the analysis granularity of the business model.
For example, the event analysis model analyzes by day, so the result table is broken down and stored by day, as shown in the figure below:
Patterns | Details page display | |
---|---|---|
1 | Analysis Model | |
2 | Analysis Model-Result Table |
Data Processing
The existing data is missing the data needed for analysis and needs to be processed again;
For example, a user wants to determine whether the current contract amount belongs to a "large order" or a "small order", but the current data does not have a field of this type.
For example, the field names in the current model do not meet the business requirements and the user wants to modify them to display other names.
Calculated Field
The "Calculated Field" in the DataSet provides the ability to add calculated fields to achieve the capability of re-calculation on existing fields, thereby obtaining new fields. It is convenient to achieve the target field.Supports adding dimension calculated fields and metric calculated fields.
For example, the user uses a calculated field to add a new dimension field, where if the "contract amount" is greater than 1000000, it is a large order.
Supported Types
The following sources of DataSet support the ability to create calculated fields, as follows:
- Metric Analysis
- Events Analysis
- Standard Aggregation Mode
- Result Table Mode
- Sessions Analysis
- Standard Aggregation Mode
- Result Table Mode
- Funnels Analysis - Result Table Mode
- Retention Analysis - Result Table Mode
- Session Analysis - Result Table Mode
- Custom Query
- Data Table
Add Entry
The entry point for adding a calculated column is shown in the following figure:
- The "Calculated Field" entry is displayed on the Business Model Details page;
- This feature is controlled by "Management Permissions" and requires collaborative management permissions for the current model to be used.
Manage Calculated Fields
After entering the calculated field page, you can manage the current calculated fields:
- Search: Supports searching for the names of calculated columns to quickly locate the target calculated field;
- Create New: Supports creating new calculated fields. Each model has a limit on the number of new creations. If necessary, contact the operations team to adjust the limit;
- Calculated Column Name: The name of the current calculated field, and the calculated field in each model cannot be duplicated
- Type: The type of this calculated field
- Operations-Edit: Enter the edit interface of this calculated field and modify the name, function, and statement of this field.
Operations-Delete: Delete this field
Edit Calculated Field
Enter the edit interface of the calculated field, and the interface is introduced as follows:
- Edit/Modify the name of the calculated field;
- Quickly add commonly used operators;
- Formula Input Area;
- Functions supported in Calculated Fields;
- Basic Fields and Calculated Fields in this model;
- Function or field interpretation area, which supports parsing whether the current statement is correct and displays the reason for the statement error.
Function Composition
Function calculation consists of four parts:
Contents | Description | |
---|---|---|
1 | Function | A statement used to transform the values or content in a field |
2 | Field | Dimensions or metrics in the user data table |
3 | Operator | Indicates the symbol of the operation |
4 | Text Expression | Constant value represented by written content |
For example, suppose there is the following calculation: IF(Contract Amount>2000,"Large Order","Small Order");The corresponding calculation content is shown below:
Content | Description | |
---|---|---|
1 | Function | IF |
2 | Field | Contract Amount |
3 | Operator | > |
4 | Text Expression |
|
Function Formats and Supported List
The function needs to meet the target format during use, as shown in the figure below:
Area 1 is the function name, and area 2 is the parameter data type, implying the return data type. The main function descriptions are as follows:
Function Categories | Function Name | Syntax Description (Interface Name Syntax Remarks Area) | Parameter Data Type | Return Data Type |
---|---|---|---|---|
Aggregate Functions | SUM | sum(number) Example: | number | number |
Aggregate Functions | AVG | avg(number) Example: | number | number |
aggregate function | COUNT | count(exp) Example: | number; string; datetime; (bool) | number |
aggregate function | DISTINCT COUNT | distinctcount(exp) Example: | number; string; datetime; (bool) | number |
Aggregate Function | MAX | max(exp) returns the maximum value of all the values in the expression Example: max([sales]) | number | number |
Aggregate Function | MIN | min(exp) returns the minimum value of all the values in the expression Example: min([sales]) | number | number |
Logical Function | CASE | case <expr> when <value1> then <return1> when <value2> then <return2> ... [else <else>] end: evaluates the logical test and returns the corresponding value. The case function evaluates expr and compares it with a series of values (value1, value2, etc.) and then returns the result. case when <condition1> then <return1> when <condition2> then <return2> ... [else <else>] end: evaluates the logical test and returns the corresponding value. The case function returns the result based on the condition being true. Example: case when [City]="Shanghai" then [City] else null end | Depends on exp | |
logical function | WHEN | case <expr> when <value1> then <return1> when <value2> then <return2> ... [else <else>] end case when <condition1> then <return1> when <condition2> then <return2> ... [else <else>] end:Execute logical tests and return corresponding values. The case function is executed as true based on the condition and returns the result. Example: case when [City]="Shanghai" then [City] else null end | Depends on exp | |
logical function | THEN | case <expr> when <value1> then <return1> when <value2> then <return2> ... [else <else>] end case when <condition1> then <return1> when <condition2> then <return2> ... [else <else>] end:Execute logical tests and return corresponding values. The case function is executed as true based on the condition and returns the result. For example: case when [City]="Shanghai" then [City] else null end | Depends on exp | |
logical function | ELSE | case <expr> when <value1> then <return1> when <value2> then <return2> ... [else <else>] end case when <condition1> then <return1> when <condition2> then <return2> ... [else <else>] end:Execute logical tests and return corresponding values. The case function is executed as true based on the condition and returns the result. For example: case when [City]="Shanghai" then [City] else null end | Depends on exp | |
logical function | OR | case when <expr1> or <expr2> then <then1> [else <else>] end For example: case when ([Sales] < 0 or [Sales] = 0) then "No profit" | No | |
logical function | AND | case when <expr1> and <expr2> then <then1> [else <else>] end For example: case when(['Profit'] >100 and ['Profit'] <500) then "General profit" | ||
logical function | IIF | iif(condition, true, false) Example: | bool, exp1, exp2 | number string datetime (bool) |
Logical function | IFNULL | ifnull(expr1, expr2) Example: | Expression | Expression1 or Expression2 |
Using calculated fields
After creating a calculated column, you can preview and use it on the details page, as shown in the following figure:
- Calculated fields of the metric type are set in the "Display Items" of the metric;
- Dimension/group type calculated fields are set in the "Display Items" of the dimension/group;
- After confirming the selection, the target calculated field can be previewed in the data display area on the right.
Modify the display name
When the original field name does not meet the business requirements, you can modify the "Field Display Name" in the DataSet; the display name is set as the "Field Name" by default. After modifying the display name, all reports using this business model will display the modified field name uniformly.
For example, if the uploaded data table contains the fields "Country" and "City", but you want to display them as "国家" and "城市" in the configured report, you can modify the display name of the corresponding fields on the details page of the DataSet.
Supported types
In the DataSet, the following sources of business models support modifying the display name on the details page, and this function will be further improved in the future.
- Custom Query
- Data Table
Operation Entry
In the details page of the business model, go to the "Field Information" tab page to display the field name, field display name, field type, and other information in the current model. In the "Field Display Name" column, you can modify the display name of a field, as shown in the figure below:
Display name presentation
After modifying the field name, the details page of the DataSet and subsequent visual configuration and viewing processes will uniformly display the modified display name.
Display position | Display style |
---|---|
Business model details page | |
Visualization |
Edit Business Model
Edit Entry
Support the editing of business models that have already been created and used, quickly modify the counting rules of business models, eliminate the need for new processes, and enable business models to meet business responses more quickly.
The editing entry is located in the upper right corner of the general function area on the details page, as shown in the following figure:
Edit verification
When saving the business model, a permission snapshot was taken of the current creator's permission constraints, such as event attributes, user attributes, dimensions, indicators, etc.
When returning the analysis model from the details page for editing, if the user's current data constraints are different from the constraints of the mirror created earlier, a verification reminder will be triggered when "Edit Business Model" is triggered to avoid misoperation. As shown in the following figure:
save edits
After returning to the analysis model from the details page and modifying the query statements, the historical business model can be updated again or saved as a new business model.
- Save as: The steps and logic for creating a new business model are the same. Please refer to:New Business Model
- Update: Update query statements based on historical business models;
Update Query Statement
When returning from the business model to the analysis model for re-editing, the query statement will be verified and judged, which will be divided into two situations:
- Situation One: Query conditions have changed:
- Situation Two: Query conditions have not changed:
Situation One: Query conditions have changed:
- Step one: After clicking "Update", a pop-up window will appear to remind you "Updating may affect the configured visual charts, do you want to continue updating?", as shown below
- Step two: After confirming the update, the "Update Configuration Confirmation" message will be triggered to set the backup processing of historical data.
- Overwrite: Adapt the existing visualization configuration according to the new query conditions, and the historical data will not be retained.
- Update and backup historical data: Keep the historical data and migrate it to the backup storage of the business model below.
Situation Two: Query conditions have not changed::Query conditions have not changed:
- Step one: Click "Update"
- Step two: There is no pop-up setting for "Update Configuration Confirmation", and directly proceed to the configuration information settings
Update configuration information
After confirming the update in the above two situations, you will enter the configuration information setting page. In this panel, you can continue to update and modify a series of configuration items such as basic information, business settings, update methods, and permission settings of the current model, as shown below:
Configure execution time
After setting all the configuration information of the model, configure the execution time for this query update when "saving" it to the business market. Two methods are supported, as shown in the following figure:
- Execute immediately: When returning to the business market, execute this query update immediately
- Specify execution time: Update the task at the specified time point, with a selectable time range that is within 24 hours and is not supported when there is no available time before the next scheduled task
You can return to the business market and wait for the model to be updated after modification and editing, as shown in the following figure:
<style> .toc-macro { position: absolute; width: inherit; right: 20px; top: 100px; background: rgba(255, 255, 255, 1); overflow-wrap: normal; visibility: hidden; border-left: 1px solid #E0E6ED; overflow-y: auto; max-height: 80%; } .navigation ul { list-style-type: none; padding: 0px; } .navigation>ul { padding: 10px 10px 10px 0; } .navigation ul li { white-space: nowrap; padding: 2px 0px 4px 0px; } .navigation ul li a { height: 100%; padding: 0 12px 0 12px; font-weight: bold; display: inline-block; max-width: 200px; overflow: hidden; text-overflow: ellipsis; padding-left: 7px; border-left: 3px solid rgba(0, 0, 0, 0); } .navigation ul li ul li a { padding: 0 0 0 20px; font-weight: normal; } .navigation ul li ul li ul li a { padding: 0 0 0 30px; } .navigation ul li li { white-space: nowrap; } .navigation ul li span.active a { font-weight: bold; color: #04CB94; border-left: 3px solid #04CB94; } .navigation ul li a:link, .navigation ul li a:visited, .navigation ul li a:active, .navigation ul li a:hover, .navigation ul li a:focus { color: #475669; text-decoration: none; } .wiki-content .columnLayout .cell.aside { width: 15%; } div#footer { display: none; } div#main { overflow: hidden; } div#main-content { margin-right: 200px; overflow-y: auto; position: inherit !important; } ::-webkit-scrollbar { width: 6px; height: 6px } scrollbar-width: thin; scrollbar-color: #DFE1E4 rgba(0, 0, 0, 0); ::-webkit-scrollbar-track { background: rgba(0, 0, 0, 0); } ::-webkit-scrollbar-thumb { background-color: #DFE1E4; border-radius: 6px; } .sef-doc-tip-link { margin: 10px; padding: 6px 12px; border-radius: 3px; background-color: #00BF8A; color: #fff !important; display: inline-block; } .sef-doc-tip-link:hover { opacity: 0.8 !important; } .wiki-content .contentLayout2 { margin: 0; } </style> <script src="https://unpkg.com/@popperjs/core@2"></script> <script src="https://unpkg.com/tippy.js@6"></script> <script type="text/javascript"> //<![CDATA[ let kite = function (options) { var defaults = { namespace: 'kite', activeClass: 'active', animate: true, duration: 300, offset: 0, container: '#main-content', replaceState: false }; const contentBox = document.querySelector('#main-content'); const allTitle = [...document.querySelectorAll('#main-content h1[id],h2[id],h3[id],h4[id]')] allTitle.forEach((l) => { const content = l.id; l.removeAttribute('id'); l.setAttribute('data-id', content); }) options = jQuery.extend({}, defaults, options); var add = function (ex1, ex2) { return parseInt(ex1, 10) + parseInt(ex2, 10); }; var findElements = function (links) { var elements = []; for (var i = 0; i < links.length; i++) { var link = links[i]; var hash = $(link).attr("href"); var element = $("[data-id='" + hash.replace('#', '') + "']"); if (element.length > 0) { var top = Math.floor(element.offset().top - 200), bottom = top + Math.floor(element.outerHeight()); elements.push({ element: element, hash: hash, top: top, bottom: bottom }); } } return elements; }; var findLink = function (links, hash) { for (var i = 0; i < links.length; i++) { var link = $(links[i]); if (link.attr("href") === hash) return link; } }; var resetClasses = function (links) { for (var i = 0; i < links.length; i++) { var link = $(links[i]); link.parent().removeClass(options.activeClass); } }; var getActiveHeadingHash = function (elements) { var position = { top: $('#main-content').scrollTop(), left: $('#main-content').scrollLeft() }; var nearest = null; for (var i = 0; i < elements.length; i++) { var current = elements[i]; if (position.top >= current.top && position.top <= current.bottom) return current.hash; else if (position.top > current.bottom) { nearest = current.hash; } } return nearest; }; var scrollArea = ''; return this.each(function () { var element = this, container = $(options.container), links = $(element).find('a'); for (var i = 0; i < links.length; i++) { var link = links[i]; $(link).on("click", function (e) { var target = $(this).attr("href"), $target = document.querySelector("[data-id='" + target.replace('#', '') + "']"); var top = $target.offsetTop - 200; if (options.animate) { $('#main-content').animate({ scrollTop: top }, options.duration); } else { contentBox.scrollTo(0, top); } }); } resetClasses(links); var elements = findElements(links); var trackChanged = function () { var link; var hash = getActiveHeadingHash(elements); link = findLink(links, hash); if (link) { if (options.onChange && (scrollArea !== hash)) { options.onChange(current.element, $(element), position); scrollArea = hash; } if (options.replaceState) { history.replaceState({}, '', '/' + hash); } resetClasses(links); link.parent().addClass(options.activeClass); } if (!link && (scrollArea !== 'exit') && options.onExit) { options.onExit($(element), position); resetClasses(links); scrollArea = 'exit'; if (options.replaceState) { history.replaceState({}, '', '/'); } } }; container.bind('scroll.' + options.namespace, function () { trackChanged(); }); $(document).ready(function (e) { trackChanged(); }); }); }; jQuery.fn.extend({ kite }); var getMenuWidth = function () { var mainPadding = ($('#main').innerWidth() - $('#main').width()) / 2; var parentWidth = AJS.$(".toc-macro").parent().parent().outerWidth(); return parentWidth + mainPadding; }; function updateMenu() { clearTimeout(window.menuTimer) if (AJS.$("#nav").find('a').length) { var content_top = AJS.$('#content').offset().top; var max_width = AJS.$('.toc-macro').width(); AJS.$(".toc-macro") .css({ 'top': content_top + 10, 'visibility': 'visible', 'max-width': max_width || 300 }); AJS.$("#main-content") .css({ 'height': window.innerHeight - 200 }); AJS.$("#nav").kite(); const tocLinks = [...document.querySelectorAll('.toc-macro a')]; tocLinks.forEach((l) => { tippy(l, { content: l.innerText, placement: 'right' }) }); return; } window.menuTimer = setTimeout(updateMenu, 20) } AJS.$(window).load(function () { AJS.$(".toc-macro") .addClass('navigation') .attr('id', 'nav'); updateMenu() }); AJS.$(window).resize(function () { AJS.$("div#main-content") .css({ 'height': window.innerHeight - 200 }); }); const ob_2 = new ResizeObserver(entries => { const ele = document.querySelector('div#main-content'); if (ele) { try { ele.style.marginRight = (entries[0].contentBoxSize[0].inlineSize + 20) + 'px'; } catch (e) { console.log(e) } } } ); ob_2.observe(document.querySelector('.toc-macro')) </script>