diff --git a/eda/eda_api/lib/services/query-builder/qb-systems/mySql-builder.service.ts b/eda/eda_api/lib/services/query-builder/qb-systems/mySql-builder.service.ts index 19f8124ae..18011b4ac 100644 --- a/eda/eda_api/lib/services/query-builder/qb-systems/mySql-builder.service.ts +++ b/eda/eda_api/lib/services/query-builder/qb-systems/mySql-builder.service.ts @@ -14,7 +14,6 @@ export class MySqlBuilderService extends QueryBuilderService { let o = tables.filter(table => table.name === origin).map(table => { return table.query ? table.query : table.name })[0]; let myQuery = `SELECT ${columns.join(', ')} \nFROM ${o}`; - /** SI ES UN SELECT PARA UN SELECTOR VOLDRÉ VALORS ÚNICS */ if (forSelector === true) { myQuery = `SELECT DISTINCT ${columns.join(', ')} \nFROM ${o}`; @@ -65,11 +64,15 @@ export class MySqlBuilderService extends QueryBuilderService { } else { out = false; } + if( col.rangesOrderExpression && col.rangesOrderExpression != undefined && col.ordenation_type !== 'No'){ + out = `${col.rangesOrderExpression} ${col.ordenation_type}` + } return out; }).filter(e => e !== false); const order_columns_string = orderColumns.join(','); + if (order_columns_string.length > 0) { myQuery = `${myQuery}\norder by ${order_columns_string}`; } else if (forSelector === true) { @@ -83,11 +86,31 @@ export class MySqlBuilderService extends QueryBuilderService { myQuery = myQuery.split(key).join(`\`${alias[key]}\``); } } - + + myQuery = this.queryAddedRange(this.queryTODO.fields, myQuery) return myQuery; }; + public queryAddedRange(fields, myQuery) { + + if(fields.find(field => field.ranges.length!==0)) { + + if(fields.find(field => field.aggregation_type === 'count_distinct' || field.aggregation_type === 'sum' || field.aggregation_type === 'count')) { + const fieldRango = fields.find(field => field.ranges.length!==0) + myQuery = fieldRango.withRanges + myQuery + fieldRango.orderRanges; + return myQuery + } else { + return myQuery + } + + } else { + return myQuery + } + + } + + public getFilters(filters, destLongitud, pTable): any { /** Si Tenemos Permisos Y No Hay Destino Lo Añado A Los Filtros */ diff --git a/eda/eda_api/lib/services/query-builder/query-builder.service.ts b/eda/eda_api/lib/services/query-builder/query-builder.service.ts index 2d606ba35..ccd2b9dac 100644 --- a/eda/eda_api/lib/services/query-builder/query-builder.service.ts +++ b/eda/eda_api/lib/services/query-builder/query-builder.service.ts @@ -62,8 +62,6 @@ export abstract class QueryBuilderService { /** joins per els value list */ let valueListJoins = []; - //console.log(this.queryTODO); - if (!this.queryTODO.queryMode || this.queryTODO.queryMode == 'EDA') { /** Reviso si cap columna de la consulta es un multivalueliest..... */ this.queryTODO.fields.forEach( e=>{ @@ -114,6 +112,9 @@ export abstract class QueryBuilderService { /** ..........................PER ELS VALUE LISTS................................ */ + // Verificando el Rango, si existe agrega los cambios sino el this.queryTODO queda igual. + this.queryTODO = this.verifyRange(this.queryTODO); + const filterTables = this.queryTODO.filters.map(filter => filter.filter_table); // Afegim a dest les taules dels filtres @@ -303,7 +304,6 @@ export abstract class QueryBuilderService { } }).filter(f=> ![ 'not_null' , 'not_null_nor_empty' , 'null_or_empty'].includes( f.filter_type)); - if (this.queryTODO.simple) { this.query = this.simpleQuery(columns, origin); return this.query; @@ -314,10 +314,135 @@ export abstract class QueryBuilderService { this.query = this.normalQuery(columns, origin, dest, joinTree, grouping, filters, havingFilters, tables, this.queryTODO.queryLimit, this.queryTODO.joinType, valueListJoins, this.dataModel.ds.connection.schema, this.dataModel.ds.connection.database, this.queryTODO.forSelector); + return this.query; } } + public verifyRange(queryTODO: any){ + // let columnRange = queryTODO.fields.find( c => c.ranges.length!==0); + + queryTODO.fields.forEach( (fieldsColumn:any, j: number) => { + + if(fieldsColumn.ranges===undefined) { + + queryTODO.fields[j]=fieldsColumn; + } else { + + if(fieldsColumn.ranges.length===0){ + queryTODO.fields[j]=fieldsColumn; + } else { + + fieldsColumn.computed_column = 'computed'; + fieldsColumn.column_type = 'text'; + + let columna = `${fieldsColumn.table_id}.${fieldsColumn.column_name}` + + let SQLexpression = "CASE\n"; + + // Primer caso: menor que el primer valor del rango + SQLexpression += `\tWHEN ${columna} < ${fieldsColumn.ranges[0]} THEN '< ${fieldsColumn.ranges[0]}'\n`; + + // Casos intermedios: entre cada par de valores en el rango + for (let i = 0; i < fieldsColumn.ranges.length - 1; i++) { + const lower = fieldsColumn.ranges[i]; + const upper = fieldsColumn.ranges[i + 1] - 1; + SQLexpression += `\tWHEN ${columna} >= ${lower} AND ${columna} <= ${upper} THEN ' ${lower} - ${upper}'\n`; + } + + // Último caso: mayor o igual al último valor del rango + SQLexpression += `\tWHEN ${columna} >= ${fieldsColumn.ranges[fieldsColumn.ranges.length - 1]} THEN '>= ${fieldsColumn.ranges[fieldsColumn.ranges.length - 1]}'\n`; + SQLexpression += "END"; + + fieldsColumn.SQLexpression = SQLexpression; + + // GENERANDO LA ORDENACIÓN + let rangesOrderExpression = "CASE\n"; + let rangesOrderExpressionNumber = 1; + + // Primer caso: + rangesOrderExpression += `\tWHEN ${columna} < ${fieldsColumn.ranges[0]} THEN ${rangesOrderExpressionNumber}\n`; + + // Casos intermedios: + for(let i = 0; i= ${lower} AND ${columna} <= ${upper} THEN ${rangesOrderExpressionNumber}\n`; + } + + // Ultimo caso: + rangesOrderExpression += `\tWHEN ${columna} >= ${fieldsColumn.ranges[fieldsColumn.ranges.length - 1]} THEN ${rangesOrderExpressionNumber + 1}\n`; + rangesOrderExpression += "END"; + fieldsColumn.rangesOrderExpression = rangesOrderExpression; + + queryTODO[j] = fieldsColumn; + + // ########################################################################################################################## + // Agregado de ceros y nulos para los campos que tengan agregaciones de: suma, cuenta de valores y valores diferentes + + let withRanges = "WITH ranges AS (\n"; + + withRanges += ` SELECT ' < ${fieldsColumn.ranges[0]}' as \`range\`\n`; + + for (let i = 0; i < fieldsColumn.ranges.length - 1; i++) { + withRanges += ` UNION SELECT ' ${fieldsColumn.ranges[i]} - ${fieldsColumn.ranges[i + 1] - 1}'\n`; + } + + withRanges += ` UNION SELECT '>= ${fieldsColumn.ranges[fieldsColumn.ranges.length - 1]}'\n`; + withRanges += ")\n"; + + let coalesceRanges = `SELECT\n`; + + let coalesceRangesAux = ''; + queryTODO.fields.forEach( col => { + if(col.ranges.length===0) { + if(col.column_type==='numeric') { + coalesceRangesAux += ` COALESCE(t.\`${col.display_name}\`, 0) AS \`${col.display_name}\`,\n` + } else if(col.column_type==='text') { + coalesceRangesAux += ` COALESCE(t.\`${col.display_name}\`, null) AS \`${col.display_name}\`,\n` + } else { + coalesceRangesAux += ` COALESCE(t.\`${col.display_name}\`, 0) AS \`${col.display_name}\`,\n` // Verificar las fechas + } + } else { + coalesceRangesAux += ` r.range AS \`${fieldsColumn.display_name}\`,\n`; + } + }) + + // Eliminando la ultima coma del salto de linea + const lastCommaIndex = coalesceRangesAux.lastIndexOf(',\n'); + if (lastCommaIndex !== -1) { + coalesceRangesAux = coalesceRangesAux.slice(0, lastCommaIndex) + coalesceRangesAux.slice(lastCommaIndex + 1); + } + + coalesceRanges = coalesceRanges + coalesceRangesAux + `FROM ranges r\nLEFT JOIN(\n`; + withRanges = withRanges + coalesceRanges + fieldsColumn.withRanges = withRanges; // agregando withRanges en field del campo que tiene un rango + + let orderRanges = `\n) t ON r.range = t.\`${fieldsColumn.display_name}\`\nORDER BY\n`; + orderRanges += ` CASE\n`; + orderRanges += ` WHEN r.range = '< ${fieldsColumn.ranges[0]}' THEN 1\n`; + + // Generar los casos intermedios + for (let i = 0; i < fieldsColumn.ranges.length - 1; i++) { + orderRanges += ` WHEN r.range = ' ${fieldsColumn.ranges[i]} - ${fieldsColumn.ranges[i + 1] - 1}' THEN ${i + 2}\n`; + } + + // Agregar el último caso para valores mayores o iguales al último elemento + orderRanges += ` WHEN r.range = '>= ${fieldsColumn.ranges[fieldsColumn.ranges.length - 1]}' THEN ${fieldsColumn.ranges.length + 1}\n`; + orderRanges += ` END;`; + + fieldsColumn.orderRanges = orderRanges; + + } + + } + + }) + + return queryTODO + } + public buildGraph() { const graph = []; //No fa falta treure les relacions ocultes per que les poso al array no_relations en guardar-ho @@ -489,7 +614,6 @@ export abstract class QueryBuilderService { } - /** esto se usa para las consultas que hacemos a bbdd para generar el modelo */ public simpleQuery(columns: string[], origin: string) { diff --git a/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html b/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html index ffad150cc..3078a23ff 100644 --- a/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html +++ b/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html @@ -10,13 +10,12 @@


-
+
- {{getAggName(aggregation.value)}} -
@@ -52,10 +51,10 @@

-
@@ -86,7 +85,7 @@

- +

@@ -138,7 +137,7 @@

@@ -155,85 +154,85 @@

- +
- +
- + - + - +
- +
- + - +
- + - +
- + - + - + - + - +
- +
- + - + - + - + - +
- +
- + - +
- +
- + - + defaultLabel="Selecciona Valor 1" [selectionLimit]="limitSelectionFields" id="float-input1"> - +
- +
- +
- +
- + - + defaultLabel="Selecciona Valor 2" [selectionLimit]="limitSelectionFields" id="float-input2"> - +
- +
- +
@@ -353,6 +352,74 @@

Suma acumulativa
+ + +

Formato

+ +
+ +
+ +
+
Rangos:
+ + + + + + + + +
+ + +
+ +
+ + + + + + +
+ + + + + + + • Rango: + + + +
+ +
+ +
+ +
+ +
+ + +
+

@@ -445,4 +512,4 @@

- \ No newline at end of file + diff --git a/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.ts b/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.ts index 329ab1416..806e1e41a 100644 --- a/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.ts +++ b/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.ts @@ -14,6 +14,7 @@ import * as _ from 'lodash'; import { aggTypes } from 'app/config/aggretation-types'; + @Component({ selector: 'app-column-dialog', templateUrl: './column-dialog.component.html', @@ -73,6 +74,19 @@ export class ColumnDialogComponent extends EdaDialogAbstract { public havingMessage: string = $localize`:@@havingMessage: Filtro sobre los resultados`; public textBetween: string = $localize`:@@textBetween:Entre` + + public ranges: number[] = []; + public rangeString: string; + public selectedRange: string = ''; + public showRange: boolean = false; + public availableRange: boolean = true; + public allowedAggregations: boolean = true; + public ptooltipViewTextRanges: string = $localize`:@@ptooltipViewTextRanges:Al configurar un Rango las agregaciones quedarán bloqueadas, Ejemplo de un rango válido - 12:18:50:100 `; + public ptooltipNotAvailableRanges: string = $localize`:@@ptooltipNotAvailableRanges:No es posible crear un rango nuevo por que ya existe uno configurado`; + public rangeDescriptionNumberError: string = $localize`:@@rangeDescriptionNumberError:El correcto orden de los límites del rango van de menor a mayor`; + public rangeDescriptionCharacterError: string = $localize`:@@rangeDescriptionCharacterError:El último caracter del rango debe ser un número`; + + constructor( private dashboardService: DashboardService, private chartUtils: ChartUtilsService, @@ -102,8 +116,9 @@ export class ColumnDialogComponent extends EdaDialogAbstract { const title = this.selectedColumn.display_name.default; const col = $localize`:@@col:Atributo`, from = $localize`:@@table:de la entidad`; this.dialog.title = `${col} ${title} ${from} ${this.controller.params.table}`; - + this.carregarValidacions(); + this.verifyRange(); const columnType = this.selectedColumn.column_type; @@ -125,6 +140,17 @@ export class ColumnDialogComponent extends EdaDialogAbstract { this.aggregationSelected = _.cloneDeep(agg); } } + if(this.controller.params.currentQuery.find( elemento => elemento.hasOwnProperty('ranges') && elemento.ranges.length!==0)) { + if(this.selectedColumn.hasOwnProperty('ranges') && this.selectedColumn.ranges.length!==0) { + this.availableRange = true; + } else { + this.availableRange = false; + } + } else { + this.availableRange = true; + } + + console.log('selectedColum', this.selectedColumn); } private carregarValidacions(): void { @@ -695,4 +721,97 @@ export class ColumnDialogComponent extends EdaDialogAbstract { } } + + addRange(rangeString: string) { + + const regexNumber = /^[0-9]/; + + if(regexNumber.test(rangeString[rangeString.length-1])){ + + const ranges = rangeString.split(":") + .map(item => parseFloat(item.replace(",", "."))); + + for (let i = 0; i < ranges.length-1; i++) { + // Verificar si el número actual es menor o igual al anterior + if (ranges[i] >= ranges[i + 1]) { + this.ranges=[]; + // console.log('El correcto orden de los límites del rango van de menor a mayor') + this.alertService.addError('El correcto orden de los límites del rango van de menor a mayor'); + return; + } + } + + this.ranges = ranges + this.showRange = true; + this.selectedRange = this.generarStringRango(this.ranges); // extraemos el rango seleccionado + this.rangeString = ''; + this.allowedAggregations = false; + + // Selección de Rango, genera que la agregación sea 'none' + const selectionAggregationRange = { value: 'none', display_name: 'No', selected: 'true' }; + this.addAggregation(selectionAggregationRange); + + // Encuentra la columna de turno y agrega el rango + const addAggr = this.findColumn(this.selectedColumn, this.controller.params.currentQuery); + addAggr.column_type = 'text'; + addAggr.ranges = this.ranges; + } + else { + // console.log('El último caracter del rango debe ser un número') + this.alertService.addError('El último caracter del rango debe ser un número'); + return; + } + + } + + removeRange() { + this.selectedRange=''; + this.showRange=false; + this.allowedAggregations = true; + const addAggr = this.findColumn(this.selectedColumn, this.controller.params.currentQuery); + addAggr.column_type = 'numeric'; + this.selectedColumn.column_type = 'numeric'; + this.rangeString = this.ranges.join(':'); + addAggr.ranges = []; + } + + generarStringRango(rango: number[]): string { + let resultado = ""; + + // Agregamos la primera condición + resultado += `< ${rango[0]}
`; + + // Creamos las condiciones intermedias + for (let i = 0; i < rango.length - 1; i++) { + resultado += `${rango[i]} - ${rango[i + 1] - 1}
`; + } + + // Agregamos la última condición + resultado += `>= ${rango[rango.length - 1]}`; + + return resultado; + } + + verifyRange() { + + if(this.selectedColumn.ranges !== undefined){ + + if(this.selectedColumn.ranges.length !==0){ + this.allowedAggregations = false; + this.showRange = true; + this.ranges = this.selectedColumn.ranges; + this.selectedRange = this.generarStringRango(this.ranges); + } + } + } + + validateInput(event: Event): void { + const inputElement = event.target as HTMLInputElement; + const validCharacters = /[1234567890.,:-]*/g; + inputElement.value = inputElement.value.match(validCharacters)?.join('') || ''; + // Si el input inicia con (. , :) no se habilitara el botón del rango ni se agregará el signo en el input. Se debe empezar con un número o con un signo (-) y un número para los negativos. + if(inputElement.value=== '.' || inputElement.value===',' || inputElement.value===':') inputElement.value = ''; + this.rangeString = inputElement.value; // Se actualiza ngModel + } + } diff --git a/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.ts b/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.ts index fe99b96a9..f50717d1e 100644 --- a/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.ts +++ b/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.ts @@ -454,6 +454,7 @@ export class EdaBlankPanelComponent implements OnInit { */ public buildGlobalconfiguration(panelContent: any) { + const modeSQL = panelContent.query.query.modeSQL; const queryMode = this.selectedQueryMode; /*SDA CUSTOM*/ this.showHiddenColumn = true; @@ -466,11 +467,13 @@ export class EdaBlankPanelComponent implements OnInit { if (queryMode == 'EDA2') { this.rootTable = this.tables.find((t) => t.table_name == this.rootTable); // Assert Relation Tables + const currentQuery = panelContent.query.query.fields; for (const column of currentQuery) { PanelInteractionUtils.assertTable(this, column); } PanelInteractionUtils.handleCurrentQuery2(this); + this.reloadTablesData(); PanelInteractionUtils.loadTableNodes(this); this.userSelectedTable = undefined; @@ -488,6 +491,7 @@ export class EdaBlankPanelComponent implements OnInit { } } + this.queryLimit = panelContent.query.query.queryLimit; PanelInteractionUtils.handleFilters(this, panelContent.query.query); PanelInteractionUtils.handleFilterColumns(this, panelContent.query.query.filters, panelContent.query.query.fields); @@ -512,6 +516,7 @@ export class EdaBlankPanelComponent implements OnInit { * Updates panel content with actual state */ public savePanel() { + this.panel.title = this.pdialog.getTitle(); if (this.panel?.content) { diff --git a/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/panel-charts/panel-chart.component.ts b/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/panel-charts/panel-chart.component.ts index 13490dc47..8b42868cd 100644 --- a/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/panel-charts/panel-chart.component.ts +++ b/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/panel-charts/panel-chart.component.ts @@ -709,7 +709,17 @@ export class PanelChartComponent implements OnInit, OnChanges, OnDestroy { tableColumns.push(new EdaColumnNumber({ header: r.display_name.default, field: label, description: r.description.default , decimals: r.minimumFractionDigits})) } else if (_.isEqual(r.column_type, 'text')) { - tableColumns.push(new EdaColumnText({ header: r.display_name.default, field: label, description: r.description.default })); + let rangeOption = false; + if(r.ranges === undefined) { + tableColumns.push(new EdaColumnText({ header: r.display_name.default, field: label, description: r.description.default })); + } else { + if(r.ranges.length > 0) { + rangeOption = true; + tableColumns.push(new EdaColumnText({ header: r.display_name.default, field: label, description: r.description.default, rangeOption: rangeOption })); + } else { + tableColumns.push(new EdaColumnText({ header: r.display_name.default, field: label, description: r.description.default, rangeOption: rangeOption })); + } + } } else if (_.isEqual(r.column_type, 'coordinate')) { tableColumns.push(new EdaColumnNumber({ header: r.display_name.default, field: label, description: r.description.default })); } diff --git a/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/panel-utils/panel-interaction-utils.ts b/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/panel-utils/panel-interaction-utils.ts index 2d134e1ec..578bab199 100644 --- a/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/panel-utils/panel-interaction-utils.ts +++ b/eda/eda_app/src/app/module/components/eda-panels/eda-blank-panel/panel-utils/panel-interaction-utils.ts @@ -357,7 +357,6 @@ export const PanelInteractionUtils = { c.column_name === contentColumn.column_name // && c.display_name.default === contentColumn.display_name ); - // console.log('assertColumn', contentColumn, column); if (!column && contentColumn) { if(columns.length > 0) { column = ebp.currentQuery.find((c: Column) => @@ -396,11 +395,17 @@ export const PanelInteractionUtils = { handleColumn.joins = contentColumn.joins || []; handleColumn.ordenation_type = contentColumn.ordenation_type; handleColumn.autorelation = contentColumn.autorelation || false; + handleColumn.ranges = contentColumn.ranges; + + // Si posee Rango el column_type debe ser de tipo 'text' + if(handleColumn.ranges.length!==0){ + handleColumn.column_type = 'text' + } const existsAgg = handleColumn.aggregation_type.find((agg) => agg.value === contentColumn.aggregation_type); if (existsAgg) existsAgg.selected = true; - if (handleColumn.column_type === 'text' && ![null, 'none'].includes(contentColumn.aggregation_type)) { + if (handleColumn.column_type === 'text' && ![null, 'none'].includes(contentColumn.aggregation_type)) { handleColumn.column_type = 'numeric'; handleColumn.old_column_type = 'text'; } diff --git a/eda/eda_app/src/app/module/components/eda-table/eda-columns/eda-column-text.ts b/eda/eda_app/src/app/module/components/eda-table/eda-columns/eda-column-text.ts index 95b3eef88..46d19d6d6 100644 --- a/eda/eda_app/src/app/module/components/eda-table/eda-columns/eda-column-text.ts +++ b/eda/eda_app/src/app/module/components/eda-table/eda-columns/eda-column-text.ts @@ -1,6 +1,9 @@ import { EdaColumn } from './eda-column'; export class EdaColumnText extends EdaColumn { + + rangeOption: boolean; // Opción si la cadena es una rango + constructor(init: Partial) { super(); Object.assign(this, init); diff --git a/eda/eda_app/src/app/module/components/eda-table/eda-table.component.css b/eda/eda_app/src/app/module/components/eda-table/eda-table.component.css index e30250ac9..71dddb8c7 100644 --- a/eda/eda_app/src/app/module/components/eda-table/eda-table.component.css +++ b/eda/eda_app/src/app/module/components/eda-table/eda-table.component.css @@ -50,4 +50,5 @@ th{ .p-datatable-auto-layout>.p-datatable-wrapper { overflow: hidden; -} \ No newline at end of file +} + diff --git a/eda/eda_app/src/app/module/components/eda-table/eda-table.component.html b/eda/eda_app/src/app/module/components/eda-table/eda-table.component.html index 6f83e5aae..071275a34 100644 --- a/eda/eda_app/src/app/module/components/eda-table/eda-table.component.html +++ b/eda/eda_app/src/app/module/components/eda-table/eda-table.component.html @@ -1,5 +1,5 @@
- @@ -59,14 +59,19 @@ +
{{ lodash.get(rowData, col.field) }}
-
+
{{ lodash.get(rowData, col.field) }}
+
+
+ diff --git a/eda/eda_app/src/app/module/components/eda-table/eda-table.component.ts b/eda/eda_app/src/app/module/components/eda-table/eda-table.component.ts index 043830563..e17cbd5f0 100644 --- a/eda/eda_app/src/app/module/components/eda-table/eda-table.component.ts +++ b/eda/eda_app/src/app/module/components/eda-table/eda-table.component.ts @@ -8,6 +8,8 @@ import es from '@angular/common/locales/es'; import * as _ from 'lodash'; import { StyleService } from '@eda/services/service.index'; import { EdaColumnChartOptions } from './eda-columns/eda-column-chart-options'; +import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; + @Component({ selector: 'eda-table', @@ -25,7 +27,7 @@ export class EdaTableComponent implements OnInit { public colors = {}; public styles = {}; - constructor(private elementRef: ElementRef, private styleService: StyleService) { + constructor(private elementRef: ElementRef, private styleService: StyleService, private sanitizer: DomSanitizer) { registerLocaleData(es); /** Definim les caracteristiques del gràfic dintre de la taula.......................... */ this.chartOptions = EdaColumnChartOptions; @@ -108,7 +110,6 @@ export class EdaTableComponent implements OnInit { }); }); - //console.log(limits); //Set ranges fields.forEach(field => { @@ -283,5 +284,86 @@ export class EdaTableComponent implements OnInit { return name.replace('%', 'percent').replace(/ /g, '').replace(/[^a-zA-Z0-9-_-\wáéíóúüñÁÉÍÓÚÜÑ ]/g, '').replace('_',''); } + formatValoresRango(rowData: any, colField: string): SafeHtml { + let valor = _.get(rowData, colField); + let str = ''; + + const regexNegative = /-\d+/g; + const regexPositive = /(?${valor}`; + } else { + if(negativos.length === 1) { + if(valor.includes('<')) { + valor = negativos[0]; + str = `< ${valor}`; + } + else if(valor.includes('>=')){ + valor = negativos[0]; + str = `>= ${valor}`; + } + else { + valor = negativos[0]; + str = ` ${valor} - ${positivos[0]} `; + } + } + else { + str = ` ${negativos[0]} - ${negativos[1]} `; + } + } + + return this.sanitizer.bypassSecurityTrustHtml(str); + + } + + extractNumberRange(input) { + const regex = /(?:<|<=|>|>=)?\s*(-?\d+)\s*(?:-|<|<=|>|>=)?\s*(-?\d+)?/; + const match = input.trim().match(regex); + + if (match) { + // Determina qué número extraer en base al formato del string + if (input.includes('<') || input.includes('>')) { + return parseInt(match[1], 10); // Extrae el primer número + } else { + return match[2] ? parseInt(match[2], 10) : null; // Extrae el segundo número si está presente + } + } + return null; // Si no hay coincidencia + } + + customSort(event, cols) { + + const actualField = event.field; + const actualCol = cols.find(col => col.field === actualField) + + event.data.sort((data1, data2) => { + let value1 = data1[event.field]; + let value2 = data2[event.field]; + let result = null; + + if (value1 == null && value2 != null) + result = -1; + else if (value1 != null && value2 == null) + result = 1; + else if (value1 == null && value2 == null) + result = 0; + else if (typeof value1 === 'string' && typeof value2 === 'string') { + if(actualCol.rangeOption) { + const match1 = this.extractNumberRange(value1) + const match2 = this.extractNumberRange(value2) + result = (match1 < match2) ? -1 : (match1 > match2) ? 1 : 0; + } else + result = value1.localeCompare(value2); + } + else + result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0; + + return (event.order * result); + }); + } } diff --git a/eda/eda_app/src/app/services/utils/query-builder.service.ts b/eda/eda_app/src/app/services/utils/query-builder.service.ts index 438689dfc..b670de83c 100644 --- a/eda/eda_app/src/app/services/utils/query-builder.service.ts +++ b/eda/eda_app/src/app/services/utils/query-builder.service.ts @@ -103,6 +103,7 @@ export class QueryBuilderService extends ApiService { col.whatif = select[i].whatif; col.joins = select[i].joins || []; col.autorelation = select[i].autorelation; + col.ranges = select[i].ranges || []; queryColumns.push(col); labels.push(select[i].column_name); } diff --git a/eda/eda_app/src/app/shared/directives/only-signs-and-numbers.directive.ts b/eda/eda_app/src/app/shared/directives/only-signs-and-numbers.directive.ts new file mode 100644 index 000000000..3c0f9bdb7 --- /dev/null +++ b/eda/eda_app/src/app/shared/directives/only-signs-and-numbers.directive.ts @@ -0,0 +1,23 @@ +import { Directive, HostListener } from '@angular/core'; + +@Directive({ + selector: '[appOnlySignsAndNumbers]' +}) +export class OnlySignsAndNumbersDirective { + + constructor() { } + + @HostListener('input', ['$event']) + onInput(event: any) { + + const valorFiltrado = event.target.value.replace(/[^0-9:.,]/g, ''); + + // Verificar si el valor ha cambiado después del filtrado + if (event.target.value !== valorFiltrado) { + // Si hay caracteres no permitidos, actualiza el valor y detiene el evento + event.target.value = valorFiltrado; + event.stopPropagation(); // Evitar que el evento se propague si se detectan caracteres no válidos + } + } + +} diff --git a/eda/eda_app/src/app/shared/models/dashboard-models/column.model.ts b/eda/eda_app/src/app/shared/models/dashboard-models/column.model.ts index d765dc511..7e8c6b33b 100644 --- a/eda/eda_app/src/app/shared/models/dashboard-models/column.model.ts +++ b/eda/eda_app/src/app/shared/models/dashboard-models/column.model.ts @@ -19,4 +19,5 @@ export interface Column { /* SDA CUSTOM */ hidden: number; autorelation: boolean; joins: string[]; + ranges: number[]; } diff --git a/eda/eda_app/src/app/shared/shared.module.ts b/eda/eda_app/src/app/shared/shared.module.ts index a3ae7aff0..a915ffbd5 100644 --- a/eda/eda_app/src/app/shared/shared.module.ts +++ b/eda/eda_app/src/app/shared/shared.module.ts @@ -6,6 +6,8 @@ import { PipesModule } from './pipes/pipes.module'; // Directives import { FocusOnShowDirective } from './directives/autofocus.directive'; +import { OnlySignsAndNumbersDirective } from './directives/only-signs-and-numbers.directive'; + // Components import { @@ -31,9 +33,11 @@ import { EdaContextMenuComponent, EdaInputComponent, FocusOnShowDirective, + OnlySignsAndNumbersDirective, EdaDatePickerComponent, CreateDashboardComponent, - EdaFieldComponent + EdaFieldComponent, + OnlySignsAndNumbersDirective ], imports: [ CoreModule, @@ -50,6 +54,7 @@ import { EdaContextMenuComponent, EdaInputComponent, FocusOnShowDirective, + OnlySignsAndNumbersDirective, EdaDatePickerComponent, CreateDashboardComponent, EdaFieldComponent diff --git a/eda/eda_app/src/locale/messages.ca.xlf b/eda/eda_app/src/locale/messages.ca.xlf index 560bb9ef9..d781ca930 100644 --- a/eda/eda_app/src/locale/messages.ca.xlf +++ b/eda/eda_app/src/locale/messages.ca.xlf @@ -4339,7 +4339,7 @@ • Eje numérico: Arrastre aquí solo los campos numéricos. • Eix numèric: Arrossegueu aquí només els camps numèrics. - + Filtro sobre todos los registros Filtre sobre tots els registres @@ -4359,6 +4359,34 @@ Agregación Agregació + + Al configurar un Rango las agregaciones quedarán bloqueadas, Ejemplo de un rango válido - 12:18:50:100 + Al configurar un rang les agregacions quedaran bloquejades. Exemple de rang vàlid: 12:18:50:100 + + + Rangos: + Rangs: + + + Añadir Rango + Afegeix un rang + + + Rango + Rang + + + El correcto orden de los límites del rango van de menor a mayor + L'ordre correcte dels límits del rang és de més petit a més gran + + + El último caracter del rango debe ser un número + El darrer caràcter del rang ha de ser numèric + + + No es posible crear un rango nuevo por que ya existe uno configurado + No és possible crear un rang nou perquè ja n'hi ha un de configurat + Entre Entre diff --git a/eda/eda_app/src/locale/messages.en.xlf b/eda/eda_app/src/locale/messages.en.xlf index ca7be45ad..79bcbc7c8 100644 --- a/eda/eda_app/src/locale/messages.en.xlf +++ b/eda/eda_app/src/locale/messages.en.xlf @@ -4333,6 +4333,34 @@ • Eje numérico: Arrastre aquí solo los campos numéricos. • Number Axis: Drag only numeric fields here. + + Al configurar un Rango las agregaciones quedarán bloqueadas, Ejemplo de un rango válido - 12:18:50:100 + When setting a range, the aggregations will be blocked. Example of a valid range: 12:18:50:100 + + + Rangos: + Ranges: + + + Añadir Rango + Add a range + + + Rango + Range + + + El correcto orden de los límites del rango van de menor a mayor + The correct order of the range limits is from smallest to largest + + + El último caracter del rango debe ser un número + The last character of the range must be a number + + + No es posible crear un rango nuevo por que ya existe uno configurado + It is not possible to create a new range because there is already one + Entre Between diff --git a/eda/eda_app/src/locale/messages.es.xlf b/eda/eda_app/src/locale/messages.es.xlf index 5b66208a7..a77fbda80 100644 --- a/eda/eda_app/src/locale/messages.es.xlf +++ b/eda/eda_app/src/locale/messages.es.xlf @@ -4362,6 +4362,34 @@ • Eje numérico: Arrastre aquí solo los campos numéricos. • Eje numérico: Arrastre aquí solo los campos numéricos. + + Al configurar un Rango las agregaciones quedarán bloqueadas, Ejemplo de un rango válido - 12:18:50:100 + Al configurar un rango las agregaciones quedarán bloqueadas. Ejemplo de rango válido: 12:18:50:100 + + + Rangos: + Rangos: + + + Añadir Rango + Añadir rango + + + Rango + Rango + + + El correcto orden de los límites del rango van de menor a mayor + El orden correcto de los límites del rango es de menor a mayor + + + El último caracter del rango debe ser un número + El último carácter del rango debe numérico + + + No es posible crear un rango nuevo por que ya existe uno configurado + No es posible crear un rango nuevo porque ya existe uno configurado + Entre Entre diff --git a/eda/eda_app/src/locale/messages.gl.xlf b/eda/eda_app/src/locale/messages.gl.xlf index fc7d40cb0..44395f6fb 100644 --- a/eda/eda_app/src/locale/messages.gl.xlf +++ b/eda/eda_app/src/locale/messages.gl.xlf @@ -4363,6 +4363,34 @@ • Eje numérico: Arrastre aquí solo los campos numéricos. • Eixe numérico: arrastra só campos numéricos aquí. + + Al configurar un Rango las agregaciones quedarán bloqueadas, Ejemplo de un rango válido - 12:18:50:100 + Ao configurar un rango, as agregacións bloquearanse. Exemplo dun rango válido: 12:18:50:100 + + + Rangos: + Rangos: + + + Añadir Rango + Engadir Rango + + + Rango + Rango + + + El correcto orden de los límites del rango van de menor a mayor + A orde correcta dos límites do rango é de menor a maior + + + El último caracter del rango debe ser un número + O último carácter do rango debe ser un número + + + No es posible crear un rango nuevo por que ya existe uno configurado + Non é posible crear un novo rango porque xa existe un configurado. + Entre Entre diff --git a/eda/eda_app/src/locale/messages.pl.xlf b/eda/eda_app/src/locale/messages.pl.xlf deleted file mode 100644 index 5eb7fbdfc..000000000 --- a/eda/eda_app/src/locale/messages.pl.xlf +++ /dev/null @@ -1,3990 +0,0 @@ - - - - - - Usuario - Użytkownik - - app/core/pages/login/login.component.html - 24 - - - - Contraseña - Hasło - - app/core/pages/login/login.component.html - 31 - - - - Recuérdame - Zapamiętaj - - app/core/pages/login/login.component.html - 38 - - - - Ingresar - Zaloguj się - - app/core/pages/login/login.component.html - 41 - - - - Contraseña - Hasło - - app/core/pages/register/register.component.html - 31 - - - - Confirma contraseña - Potwierdź hasło - - app/core/pages/register/register.component.html - 35 - - - - Estoy de acuerdo con los -términos - - zgadzam się na -warunki - - - app/core/pages/register/register.component.html - 42 - - - - - ¿Tienes una cuenta? - -Ingresa ahora - - - - Masz już konto? - -Login - - - -app/core/pages/register/register.component.html -54 - - - -Perfil -Profil - -app/shared/components/sidebar/sidebar.component.html -42 - - - -Gestión de Usuarios -Zarządzanie użytkownikami - -app/shared/components/sidebar/sidebar.component.html -47 - - - -Gestión de Grupos -Zarządzanie grupami - -app/shared/components/sidebar/sidebar.component.html -51 - - - -Cerrar sesión -Zamknij sesję - -app/shared/components/sidebar/sidebar.component.html -57 - - - - Mis informes - Moje raporty - -app/shared/components/sidebar/sidebar.component.html -68 - - - -Fuente de Datos -Baza danych - -app/shared/components/sidebar/sidebar.component.html -77 - - - -Nueva Fuente -Nowa baza danych - -app/shared/components/sidebar/sidebar.component.html -82 - - - -Editar Fuente -Edytuj bazę danych - -app/shared/components/sidebar/sidebar.component.html -87 - - - -Esta aplicación es una demo. -Aplikacja jest w wersji demo. - -app/core/pages/conditions/conditions.component.html -3 - - - -No ofrece ninguna garantía y no somos responsables del uso que se haga de la misma. -Brak gwarancji. Nie bierzemy odpowiedzialności za użytkowanie. - -app/core/pages/conditions/conditions.component.html -4 - - - -Usala bajo tu responsabilidad. -Użyj na własne ryzyko. - -app/core/pages/conditions/conditions.component.html -5 - - - -Cerrar -Zamknij - -app/core/pages/conditions/conditions.component.html -10 - - -app/module/pages/home/create-dashboard/create-dashboard.component.html -26 - - -app/module/pages/users-management/users-detail/users-detail.component.html -33 - - -app/module/pages/data-sources/data-source-detail/table-relations-dialog/table-relations-dialog.component.html -30 - - -app/module/pages/data-sources/data-source-detail/column-permissions-dialog/column-permission-dialog.component.html -27 - - -app/module/pages/data-sources/data-source-detail/calculatedColumn-dialog/calculated-column-dialog.component.html -28 - - -app/module/pages/data-sources/data-source-detail/mapsDialog/maps-dialog.component.html -81 - - - - Informe público EDA - Raport publiczny EDA - -app/module/pages/anonimous-login/anonymous-login.component.html -1 - - - -Agregaciones -Agregacje - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -7 - - - - - Ordenación - - - Sortowanie - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -27 - - - - - Filtrar - - - Filtr - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -47 - - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -6 - - - - - Tipos de filtro - - - Typy filtrów - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -62 - - - - - Fecha - - - Dane - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -78 - - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -38 - - - - - Valor a filtrar - - - Filtr wartości - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -97 - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -116 - - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -56 - - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -74 - - - - - Fecha inicio - - - Data rozpoczęcia - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -137 - - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -95 - - - - - Fecha final - - - Data zakończenia - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -153 - - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -111 - - - - - Valor 1 - - - Wartość 1 - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -176 - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -209 - - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -133 - - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -164 - - - - - Valor 2 - - - Wartość 2 - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -192 - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -229 - - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -147 - - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -184 - - - - - Opciones - - - Opcje - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -254 - - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -209 - - - -Añadir filtro - Dodaj filtr - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -273 - - - - - Formato - - - Format - - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -291 - - - -Confirmar -Przyjmij - -app/module/components/eda-panels/eda-blank-panel/column-dialog/column-dialog.component.html -364 - - -app/module/components/eda-panels/eda-blank-panel/chart-dialog/chart-dialog.component.html -54 - - -app/module/components/eda-panels/eda-blank-panel/table-dialog/table-dialog.component.html -18 - - -app/module/components/eda-panels/eda-blank-panel/maps-dialog/mapedit-dialog.component.html -35 - - - - - Tipos de filtro - - - Typy filtrów - - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -22 - - - -Añadir filtro -Dodaj filtr - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -228 - - - -Confirmar -Przyjmij - -app/module/components/eda-panels/eda-blank-panel/filter-dialog/filter-dialog.component.html -292 - - -app/module/components/eda-panels/eda-blank-panel/alert-dialog/alert-dialog.component.html -10 - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -360 - - -app/module/pages/home/create-dashboard/create-dashboard.component.html -25 - - -app/module/pages/profile/profile.component.html -37 - - -app/module/pages/data-sources/data-sources.component.html -94 - - -app/module/pages/data-sources/data-source-detail/table-relations-dialog/table-relations-dialog.component.html -26 - - -app/module/pages/groups-management/group-detail/group-detail.component.html -31 - - -app/module/pages/dashboard/filter-dialog/dashboard-filter-dialog.component.html -77 - - -app/module/pages/data-sources/data-source-detail/column-permissions-dialog/column-permission-dialog.component.html -26 - - -app/module/pages/data-sources/data-source-detail/calculatedColumn-dialog/calculated-column-dialog.component.html -25 - - -app/module/pages/data-sources/data-source-detail/mapsDialog/maps-dialog.component.html -79 - - - - - Colores - - - Kolory - - -app/module/components/eda-panels/eda-blank-panel/chart-dialog/chart-dialog.component.html -19 - - -app/module/components/eda-panels/eda-blank-panel/maps-dialog/mapedit-dialog.component.html -17 - - - -Cancelar -Odrzuć - -app/module/components/eda-panels/eda-blank-panel/chart-dialog/chart-dialog.component.html -58 - - -app/module/components/eda-panels/eda-blank-panel/table-dialog/table-dialog.component.html -22 - - -app/module/components/eda-panels/eda-blank-panel/maps-dialog/mapedit-dialog.component.html -38 - - - -¡Cuidado! -Uwaga! - -app/module/components/eda-panels/eda-blank-panel/alert-dialog/alert-dialog.component.html -3 - - - -La consulta que estás a punto de realizar es potencialmente pesada y puede tardar mas de lo normal en - ejecutarse. - -Zapytanie, które chcesz wykonać jest potencjalnie duże, przez co realizacja może potrwać dłużej niż zazwyczaj. - - -app/module/components/eda-panels/eda-blank-panel/alert-dialog/alert-dialog.component.html -4 - - - -Puedes añadir filtros o agregaciones para reducir el número de registros -Spróbuj dodać filtry lub agregacje, aby zmniejszyć ilość zapisów - -app/module/components/eda-panels/eda-blank-panel/alert-dialog/alert-dialog.component.html -7 - - - -¿Deseas continuar? -Czy chcesz kontynuować? - -app/module/components/eda-panels/eda-blank-panel/alert-dialog/alert-dialog.component.html -8 - - - -Cancelar -Odrzuć - -app/module/components/eda-panels/eda-blank-panel/alert-dialog/alert-dialog.component.html -14 - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -364 - - -app/module/pages/dashboard/filter-dialog/dashboard-filter-dialog.component.html -80 - - - - ¿Escala logarítmica? - Logarithmic scale? - -app/module/components/eda-panels/eda-blank-panel/maps-dialog/mapedit-dialog.component.html -29 - - - - - Entidades - - - Podmioty - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -41 - - - - - Atributos - - - Atrybuty - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -61 - - - - - Mostrar los siguientes atributos: - - - Pokaż następujące atrybuty: - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -86 - - - - - Filtrar los resultados por: - - - Filtruj wyniki według: - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -109 - - - - - Mi consulta - - - Moje zapytanie - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -131 - - - - - Resumen de atributos - - - Podsumowanie atrybutów - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -137 - - - - - Resumen de filtros del panel - - - Podsumowanie filtrów panelu - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -155 - - - - - Resumen de filtros del informe - - - Podsumowanie filtrów raportu - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -166 - - - -Expresión SQL -SQL Expression - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -182 - - - -Tabla origen -Origin table - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -187 - - - -Tablas -Tabele - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -191 - - -app/module/pages/dashboard/filter-dialog/dashboard-filter-dialog.component.html -39 - - - -Indicaciones -Wskazanie - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -198 - - - - Puedes realizar consultas SQL sobre el esquema definido en tu modelo. - Para ello introduce la consulta en el cuadro de texto y selecciona la tabla principal - (puede ser cualquiera de las que aparecen en la consulta). - Usaremos esta tabla para vincular la consulta a los filtros del informe. - You can perform SQL queries on the schema defined in your model. - To do this, enter the query in the text box and select the main table - (It can be any of those that appear in the query). - We will use this table to link the query to the report filters. - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -202 - - - - Limitaciones: - Ograniczenia: - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -206 - - - - - Solo es posible usar las tablas del esquema definido en el modelo (si lo hay) - -Możliwe tylko użycie tabel schematu zdefiniowanych w modelu (jeżeli są). - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -209 - - - - - Debes utilizar alias para todas las tablas de la consulta ( select a,b from tabla t where c ) - - - Musisz użyć skrótów dla wszystkich tabel w zapytaniu (select a, b from table t where c) - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -212 - - - - Puedes vincular los filtros del informe con la consulta - You can link the report filters with the query - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -218 - - - - Para hacerlo sólo tienes que añadir: - - AND - - - en la cláusula 'WHERE' de la consulta donde quieras inyectar el filtro - - Żeby to zrobić musisz dodać:: - - AND - - - in 'WHERE' clause from query - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -220 - - - - Si no has añadido ningúna cláusula WHERE, añádela a la - consulta y haz los joins necesarios, - junto con el filtro en el formato - - - - - If you haven't added any WHERE clause, add it to the query and make the necessary joins, - together with the filter in the format - - - - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -225 - - - -Si la tabla por la que filtramos no está en la consulta, recuerda que debes - añadir las cláusulas JOIN necesarias - para poder vicular la tabla del filtro con tu consulta - -If the table by which we filter is not in the query, remember that you must - add the necessary JOIN clauses - in order to link the filter table with your query - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -229 - - - -Consulta simple -Simple query - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -237 - - - -Consulta con los filtros del informe vinculados -Query with linked report filters - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -246 - - - - Tenemos un filtro en el informe para el campo 'city' de la tabla CUSTOMERS - We have a filter in the report for the 'city' field from CUSTOMERS table - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -248 - - - - Consulta sin filtros vinculados - Query without linked filters - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -249 - - - - Consulta con filtros vinculados - Query with linked filters - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -254 - - - - Tenemos un filtro en el informe para el campo 'office_id' de la tabla OFFICES - - We have a filter in the report for the field 'office_id' from OFFICES table - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -262 - - - - Consulta sin filtros vinculados - Zapytanie bez połączonych filtrów - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -265 - - - - Consulta con filtros vinculados - Zapytanie z połączonym filtrem - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -271 - - - - - - - - - - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -37 - - - -VISTA PREVIA -PODGLĄD - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -291 - - - -Ejecutar -Stwórz - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -356 - - - - Crear nuevo informe - - Stwórz nowy raport - - -app/module/pages/home/home.component.html -7 - - - - - PUBLICOS - - - PUBLICZNE - - -app/module/pages/home/home.component.html -20 - - -app/module/pages/home/home.component.html -44 - - -app/module/pages/data-sources/data-source-detail/calculatedColumn-dialog/calculated-column-dialog.component.html -3 - - - - - MIS GRUPOS - - - MOJE GRUPY - - -app/module/pages/home/home.component.html -68 - - - - - PRIVADOS - - - PRYWATNE - - -app/module/pages/home/home.component.html -101 - - - -Dame un nombre * -Nazwa raportu * - -app/module/pages/home/create-dashboard/create-dashboard.component.html -7 - - - -Buscar por nombre del informe - Szukaj po nazwie raportu - - -Buscar -Szukaj - - -Selecciona una fuente de datos * -Wybierz źródło danych * - -app/module/pages/home/create-dashboard/create-dashboard.component.html -11 - - - - Todas - Wszystko - -app/module/pages/dashboard/dashboard.component.html -36 - - - - Ayer - Wczoraj - -app/module/pages/dashboard/dashboard.component.html -38 - - - - Ésta semana - Ten tydzień - -app/module/pages/dashboard/dashboard.component.html -39 - - - - Éste mes - Ten miesiąc - -app/module/pages/dashboard/dashboard.component.html -40 - - - - Éste año - Ten rok - -app/module/pages/dashboard/dashboard.component.html -41 - - - -NUEVO PANEL - NOWY PANEL - -app/module/pages/dashboard/dashboard.component.html -130 - - - -NUEVO TEXTO -NOWY TEKST - -app/module/pages/dashboard/dashboard.component.html -137 - - - -NUEVO FILTRO -NOWY FILTR - -app/module/pages/dashboard/dashboard.component.html -144 - - - -RECARGAR INFORME -ODŚWIEŻ RAPORT - -app/module/pages/dashboard/dashboard.component.html -153 - - - -GUARDAR -ZAPSZ - -app/module/pages/dashboard/dashboard.component.html -160 - - - -DESCARGAR PDF -POBIERZ PDF - -app/module/pages/dashboard/dashboard.component.html -167 - - - -DESCARGAR IMAGEN -POBIERZ OBRAZ - -app/module/pages/dashboard/dashboard.component.html -174 - - - -Temas -Motywy - -app/module/pages/account-settings/account-settings.component.html -5 - - - -Con el menu claro -Jasny motyw - -app/module/pages/account-settings/account-settings.component.html -9 - - - -Con el menu oscuro -Ciemny motyw - -app/module/pages/account-settings/account-settings.component.html -17 - - - -Perfil del usuario -Profil użytkownika - -app/module/pages/profile/profile.component.html -6 - - - -Nombre de usuario -Nazwa użytkownika - -app/module/pages/profile/profile.component.html -10 - - -app/module/pages/profile/profile.component.html -14 - - - -Correo de usuario -Email użytkownika - -app/module/pages/profile/profile.component.html -18 - - -app/module/pages/profile/profile.component.html -23 - - - - - Fotografía del usuario - - Zdjęcie - -app/module/pages/profile/profile.component.html -48 - -Label del input imagen de usuario -Label Input Imagen - - -Actualizar Foto -Aktualizuj zdjęcie - -app/module/pages/profile/profile.component.html -63 - -Button actualizar foto profile -Button - - -Crear usuario -Stwórz użytkwnika -Crear usuario -Stwórz użytkownika - -app/module/pages/users-management/users-list/users-list.component.html -5 - - - -Nombre * -Nazwa * - -app/module/pages/users-management/users-detail/users-detail.component.html -4 - - -app/module/pages/users-management/users-detail/users-detail.component.html -5 - - -app/module/pages/data-sources/data-sources.component.html -8 - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -6 - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -53 - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -147 - - -app/module/pages/groups-management/group-detail/group-detail.component.html -6 - - -app/module/pages/data-sources/data-source-detail/calculatedColumn-dialog/calculated-column-dialog.component.html -10 - - - -Correo * -Email * - -app/module/pages/users-management/users-detail/users-detail.component.html -8 - - -app/module/pages/users-management/users-detail/users-detail.component.html -9 - - - -Contraseña * -Hasło * - -app/module/pages/users-management/users-detail/users-detail.component.html -12 - - -app/module/pages/users-management/users-detail/users-detail.component.html -13 - - -app/module/pages/data-sources/data-sources.component.html -85 - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -195 - - - -Seguridad * -Security * - -app/module/pages/users-management/users-detail/users-detail.component.html -16 - - - -Repite la contraseña -Wprowadź hasło ponownie - -app/module/pages/users-management/users-detail/users-detail.component.html -17 - - - -Grupo * -Grupa * - -app/module/pages/users-management/users-detail/users-detail.component.html -22 - - - -TIPO * -RODZAJ* - -app/module/pages/data-sources/data-sources.component.html -15 - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -157 - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -162 - - - -Selecciona un tipo -Wybierz rodzaj - -app/module/pages/data-sources/data-sources.component.html -17 - - - -SERVIDOR * -SERWER * - -app/module/pages/data-sources/data-sources.component.html -25 - - -app/module/pages/data-sources/data-sources.component.html -32 - - -app/module/pages/data-sources/data-sources.component.html -41 - - - -BASE DE DATOS * -BAZA DANYCH * - -app/module/pages/data-sources/data-sources.component.html -49 - - - -BASE DE DATOS * -BAZA DANYCH * - -app/module/pages/data-sources/data-sources.component.html -56 - - - -ESQUEMA -SCHEMAT - -app/module/pages/data-sources/data-sources.component.html -64 - - - -PUERTO * -PORT * - -app/module/pages/data-sources/data-sources.component.html -71 - - - -USUARIO * -UŻYTKOWNIK * - -app/module/pages/data-sources/data-sources.component.html -78 - - - -Modelo de datos -Model danych - -app/module/pages/data-sources/data-source-list/data-source-list.component.html -18 - -Titulo card -Titulo Card - - -Nombre técnico -Nazwa techniczna - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -11 - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -60 - - - - Descripción - Opis - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -16 - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -67 - - -app/module/pages/data-sources/data-source-detail/calculatedColumn-dialog/calculated-column-dialog.component.html -15 - - - -Esconder tabla -Ukryj tabelę - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -21 - - - -Tipo de tabla -Rodzaj tabeli - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -27 - - - -Añadir relación -Dodaj relacje - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -36 - - - - - Tipo de columna - - - Rodzaj kolumny - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -80 - - - - - Agregación - - - - Agregacja - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -90 - - - -Roles y permisos de fila -Row roles and permissions - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -102 - - - - Añadir permiso - Dodaj uprawnienie - - - - - Añadir permiso a nivel de modelo - Dodaj uprawnienia na poziomie modelu - - - -Esconder columna -Ukryj kulumnę - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -112 - - - - - Metadata - - - Metadane - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -142 - - - - - Conexión - - - Połączenie - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -153 - - - - - Host - - - Host - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -167 - - - - - Base de datos - - - Baza danych - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -174 - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -181 - - - - - Usuario - - - Użytkownik - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -188 - - - -Columna origen - -Origin column - -app/module/pages/data-sources/data-source-detail/table-relations-dialog/table-relations-dialog.component.html -8 - - - -tabla destino -Destination table - -app/module/pages/data-sources/data-source-detail/table-relations-dialog/table-relations-dialog.component.html -14 - - - -Columna destino -destination column - -app/module/pages/data-sources/data-source-detail/table-relations-dialog/table-relations-dialog.component.html -19 - - - -Columna con el id -Kolumna z id - - -Columna con la descripción -Kolumna z opisem - - -Crear grupo -Stwórz grupę - -app/module/pages/groups-management/group-list/group-list.component.html -5 - - - -Cerrar -Zamknij - -app/module/pages/groups-management/group-detail/group-detail.component.html -32 - -cerrarBtn - - - - ¿Aplica a todos los paneles? - -Dotyczy wszytskich paneli? - - -app/module/pages/dashboard/filter-dialog/dashboard-filter-dialog.component.html -5 - - - - - Paneles para los que aplica el filtro - - Panele, których dotyczy filtr - - -app/module/pages/dashboard/filter-dialog/dashboard-filter-dialog.component.html -14 - - - - - Filtrar por - - - - Filtruj według - - -app/module/pages/dashboard/filter-dialog/dashboard-filter-dialog.component.html -30 - - - -Atributos -Atrybuty - -app/module/pages/dashboard/filter-dialog/dashboard-filter-dialog.component.html -46 - - - -Añadir permiso -Dodaj uprawnienie - -app/module/pages/data-sources/data-source-detail/column-permissions-dialog/column-permission-dialog.component.html -3 - - - -Propiedades del mapa -Map properties - -app/module/pages/data-sources/data-source-detail/mapsDialog/maps-dialog.component.html -6 - - -app/module/pages/data-sources/data-source-detail/mapsDialog/maps-dialog.component.html -51 - - - - Subir archivo GeoJson (JSON) -Upload GeoJson file (JSON) - -app/module/pages/data-sources/data-source-detail/mapsDialog/maps-dialog.component.html -9 - - - -Campo a usar para vincular el modelo con el mapa -Field to link datamodel to the map - -app/module/pages/data-sources/data-source-detail/mapsDialog/maps-dialog.component.html -14 - - - -Nombre del mapa -Nazwa mapy - -app/module/pages/data-sources/data-source-detail/mapsDialog/maps-dialog.component.html -19 - - - - Centro del mapa (Latitud, Longitud) - Środek mapy (Latitude, Longitude) - -app/module/pages/data-sources/data-source-detail/mapsDialog/maps-dialog.component.html -26 - - - -Mapas disponibles -Dostępne mapy - -app/module/pages/data-sources/data-source-detail/mapsDialog/maps-dialog.component.html -33 - - - -Vincular columnas al mapa -Połącz kolumny z mapą - -app/module/pages/data-sources/data-source-detail/mapsDialog/maps-dialog.component.html -47 - - - -Columnas -Kolumny - -app/module/pages/data-sources/data-source-detail/mapsDialog/maps-dialog.component.html -57 - - - - -Borrar -Usuń - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -124 - - - -Comprobar conexión -Sprwdź połączenie - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -203 - - - -Borrar modelo de datos -Usuń model danych - -app/module/pages/data-sources/data-source-list/data-source-list.component.html -20 - - - -Actualizar modelo de datos desde la base de datos origen para buscar nuevas tablas y columnas -Zaktualizuj model danych ze źródłowej bazy danych, aby znaleźć nowe tabele i kolumny - -app/module/pages/data-sources/data-source-list/data-source-list.component.html -15 - - - -Guardar modelo de datos -Zapisz model danych - -app/module/pages/data-sources/data-source-list/data-source-list.component.html -12 - - - -Refrescar modelo de datos -Odśwież model danych - -app/module/pages/data-sources/data-source-list/data-source-list.component.html -9 - - - -Cargando informe... -Ładownie raportu... - - - Añadir relación - Dodaj relacje - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -36 - - - -Añadir columna calculada -Dodaj sklalkulowaną kolumnę - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -41 - - - - -Destino -Target - - - -Origen -Origin - - - -USUARIO -UŻYTKOWNIKs - - - -VALOR -WARTOŚĆ - - - -Editar - -Edytuj - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -3 - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -50 - - -app/module/pages/data-sources/data-source-detail/data-source-detail.component.html -140 - - - -Modo EDA -Tryb EDA - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -344 - - - -Modo SQL -Tryb SQL - -app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html -345 - - - -Editar consulta -Edytuj zapytanie - - - -Editar opciones del gráfico -Edytuj opcje wykresu - - - -Exportar a Excel -Eksportuj do Excela - - -Eliminar panel -Usuń panel - - -Duplicar panel -Duplikuj panel - - -Duplicar columna -Duplikuj kolumna - - -Tabla de Datos -Tabela - - -Tabla Cruzada -Tabela krzyżowa - - -Gráfico de Pastel -Diagram kołowy - - -Gráfico de Área Polar -Wykres biegunowy - - -Gráfico de Barras -Wykres słupkowy - - -Histograma -Histogram - - -Texto Dinámico -Tekst dynamiczny - - -Un texto dinámicos requiere de un único valor NO numérico -Tekst dynamiczny wymaga pojedynczej wartości nienumerycznej - - -Gráfico de Barras Apliadas -Skumulowany wykres słupkowy - - -Gráfico de Barras Horizontales -Poziomy wykres słupkowy - - -Gráfico de Piramide -Wykres piramidy - - -Gráfico Solar -Wykres słońca - - -Gráfico de Lineas -Wykres liniowy - - -Gráfico de Áreas -Wykres warstwowy - - -Mixto: Barras y lineas -Mieszany: słupkowy i liniowy - - -Mapa de coordenadas -Coordinates map - - -Mapa de Capas -Mapa warstwowa - - - -Velocímetro -Wykres mierników - - - -IGUAL A (=) -RÓWNA SIĘ (=) - - -NO IGUAL A (!=) -NIE RÓWNA SIĘ (!=) - - -MAYOR A (>) -WIĘKSZE NIŻ (>) - - -MENOR A (<) -MNIEJSZE NIŻ (<) - - -MAYOR o IGUAL A (>=) -WIĘKSZE LUB RÓWNE (>=) - - -MENOR o IGUAL A (<=) -MNIEJ LUB RÓWNE (<=) - - -ENTRE (between) -POMIĘDZY - - -DENTRO DE (in) - TYLKO WYBRANE - - -FUERA DE (not in) - ODRZUCONE - - -PARECIDO A (like) -PODOBNE - - -NO PARECIDO A (not like) -NIEPODOBNE - - -VALORES NO NULOS (not null) -WARTOŚĆI NIEZEROWE - - - -AÑO -ROK - - -TRIMESTRE -TRYMESTR - - -MES -MIESIĄC - - -DIA -DZIEŃ - - -NO -NO - - -SEMANA -SETMANA - - -DIA DE LA SEMANA -DZIEŃ TYGODNIA - - - -FECHA COMPLETA -TIMESTAMP - - - -DIA HORA -DZIEŃ GODZINA - - -DIA HORA MINUTO -DZIEŃ GODZINA MINUTA - - -PROPIEDADES DEL gráfico -WŁAŚCIWOŚCI WYKRESU - - - -Nuevo Panel -Nowy Panel - - -Nuevo Panel -Nowy Panel - - - - Mapas - Mapy - - app/module/pages/data-sources/data-source-detail/data-source-detail.component.html - 210 - - - -Esquema -Schemat - - app/module/pages/data-sources/data-source-detail/data-source-detail.component.html - 181 - - - - -Relaciones -Relacje - - app/module/pages/data-sources/data-source-detail/data-source-detail.component.html - 33 - - - - COMUNES - WSPÓLNE - - app/module/pages/home/home.component.html - 44 - - - - -Nueva Contraseña (Si no quieres modificar tu contraseña actual deja el campo en blanco) -Nowe hasło - - app/module/pages/profile/profile.component.html - 27 - - - -password -hasło - - app/module/pages/profile/profile.component.html - 28 - - - -Repite la nueva contraseña -Potwierdź hasło - - app/module/pages/profile/profile.component.html - 31 - - - -newPassword -nowe hasło - - app/module/pages/profile/profile.component.html - 32 - - - - -EMAIL -EMAIL - - -GRUPOS -GRUPY - - -NOMBRE -NAZWA - - -ROLE -ROLA - - - -Repite la contraseña -Potwierdź hasło - - app/module/pages/profile/profile.component.html - 32 - - - - -Dirección Email -Email - - app/core/pages/login/login.component.html - 22 - - - - -Contraseña -Hasło - - app/core/pages/login/login.component.html - 28 - - - - -Información general -Informacje ogólne - - app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html - 202 - - - - -Vincular consulta con los filtros del panel -Połącz zapytanie z filtrami panelu - - app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html - 221 - - - - -Ejemplos -Przykłady - - app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html - 242 - - - - -Repite la contraseña -Powtórz hasło - - app/module/pages/users-management/users-detail/users-detail.component.html - 17 - - - - -Añadir permiso -Dodaj uprawnienie - - app/module/pages/data-sources/data-source-detail/column-permissions-dialog/column-permission-dialog.component.html - 3 - - - - - -Definir un listado de valores posibles -Zdefiniuj listę możliwych wartości - - - -Tabla y columna asociadas -Powiązana tabela i kolumna - - - -Tabla: -Tablica: - - - -Tabla que contiene los valores posibles para el filtro asociado a esta columna -Tabela zawierająca możliwe wartości dla filtra powiązanego z tą kolumną - - - -Tabla relacionada -powiązana tabela - - - -Id de la columna relacionada -Identyfikator powiązanej kolumny - - - -Id Columna -kolumna identyfikatora - - - -Descripción de la columna relacionada -Powiązany opis kolumny - - - -Columna descripción -Opis kolumny - - - - Nueva columna calculada - Nowa skalkulowana kolumna - - app/module/pages/data-sources/data-source-detail/calculatedColumn-dialog/calculated-column-dialog.component.html - 3 - - - - -Si desconoces las coordenadas del centro las calcularemos automáticamente -Jeżeli nie znasz środkowych współrzędnych, zostaną wykalkulowane automatycznie - - app/module/pages/data-sources/data-source-detail/mapsDialog/maps-dialog.component.html - 27 - - - - -Expresión SQL - Wyrażenie SQL - - app/module/pages/data-sources/data-source-detail/data-source-detail.component.html - 74 - - - - -Expresión SQL (Debe incluir la agregación) -Wyrażenia SQL (Musi zawierać agregacje) - - app/module/pages/data-sources/data-source-detail/data-source-detail.component.html - 103 - - - - - - -Suma -Suma - - -Media -AVG - - -Màximo -Max - - -Mínimo -Min - - -Cuenta Valores -Licz - - -Valores Distintos -Count Distinct - - -Común -Wspólny - - -Grupo -Grupowy - - -Privado -Prywatny - - - - -Atributo -Atrybuty: - - -de la entidad -. Encja: - - - -Añadir columna calculada a la tabla -Dodaj kolumnę obliczeniową do tabeli - - -Añadir relación a la tabla -Dodaj relację do tabeli - - - -Los datos seleccionados no permiten utilizar este gráfico. -Wykres niedostępny dla bieżących danych. - - -Un KPI necesita un único número. -Do uzyskania wskaźnika KPI wymagana jest tylko jedna liczba. - - -Un gráfico de barras necesita una o más categorías y una série numéricas. -Wykres słupkowy wymaga jednej lub więcej kategorii i jednej serii liczbowej. Jeśli istnieją również dwie serie, dane liczbowe powinny zostać zagregowane. - - - Un gráfico combinado necesita una categoría y dos séries numéricas. -Wykres mieszany wymaga jednej kategorii i dwóch, lub więcej serii numerycznych. - - -Un gráfico de línea necesita una o más categorías y una série numérica. -Wykres liniowy wymaga jednej, lub więcej kategorii i jedną serię numeryczną. Jeżeli są dwie serie numeryczne, dane powinny być zagregowane. - - -Un gráfico de areas necesita una o más categorías y una série numérica. Además, si hay mas de una série los datos numéricos deben agregarse. -Wykres warstwowy wymaga jednej, lub więcej kategorii i jedną serię numeryczną.Jeżeli są dwie serie numeryczne, dane powinny być zagregowane . - - -Un gráfico de barras necesita una o más categorías y una série numérica. -Wykres słupkowy wymaga jednej, lub więcej kategorii i jedną serię numeryczną. Jeżeli są dwie serie numeryczne, dane powinny być zagregowane. - - -Un gráfico de barras necesita una o más categorías y una série numérica. -Wykres słupkowy wymaga jednej, lub więcej kategorii i jedną serię numeryczną. Jeżeli są dwie serie numeryczne, dane powinny być zagregowane. - - -Un gráfico polar necesita una categoría y una série numérica. -Wykres biegunowy wymaga jednej kategorii i jednej serii numerycznej. - - -Un gráfico de pastel necesita una categoría y una série numérica. -Wykres kołowy wymaga jednej kategorii i jednej serii numerycznej. - - -Una tabla cruzada necesita dos o más categorías y una série numérica. -Tabela krzyżowa wymaga dwóch lub więcej kategorii i jednej serii numerycznej. - - -Es necesario que los dos primeros campos sean de tipo coordenada. -Dwa pierwsze pola muszą być skoordynowane. - - -Puedes añarir un campo de tipo métrica y uno de tipo etiqueta en este orden o cualquiera de los dos por separado. -Dodaj pole metryki i pole etykiety w tej kolejności lub każde z nich osobno. - - -Es necesario un campo vinculado a un archivo GeoJson y un campo de tipo numérico. -Potrzebne jest pole połączone GeoJson i pole numeryczne. - - -Los datos seleccionados no permiten utilizar este gráfico. -Wykres niedostępny dla bieżących danych. - - -Un gráfico de burbujas necesita una categorías y una série numérica. -Wykres bąbelkowy wymaga jednej kategorii i jednej serii numerycznej. - - - - - - Demasiados valores - - Za dużo wartości - - app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html - 332 - - - - - - No Disponible - - Niedostępne - - app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html - 335 - - - -Mapas -Mapy - - - -Hay demasiados valores para este gráfico. Agrega o filtra los datos para poder visualizarlos mejor. -Za dużo wartości dla tego wyresu. Zagreguj lub filtruj dane, aby były lepiej widoczne. - - - - Tipo - Rodzaj - - app/module/pages/data-sources/data-source-detail/data-source-detail.component.html - 157 - - - - Mapas - Mapy - - app/module/pages/data-sources/data-source-detail/data-source-detail.component.html - 206 - - - - - Hay cambios sin guardar... - Nie zapisano zmian... - - app/module/pages/dashboard/dashboard.component.html - 205 - - - - -Informe guardado correctamente -Raport zapisany prawidłowo - - - -Fuente de datos: -Źródło danych: - - - -Creada correctamente -Stworzono prawidłowo - - - -Ha ocurrido un error -Wystąpił problem - - - -Consulta correcta -Zapytanie prawidłowe - - - -Consulta incorrecta -Zapytanie nieprawidłowe - - - -Debes incluir la agregación (distinct, sum, max, min, etc) -Musi zawierać agregację (distinct, sum, max, min, etc) - - - -Conexión establecida -Nawiązano połączenie - - - -Datos de conexión incorrectos -Nieprawidłowe dane dotyczące połączenia - - - -¿Estás seguro? -Jesteś pewny? - - - -Estás a punto de borrar el modelo de datos y todos los dashboards asociados, el cambio es irreversible -Model danych oraz raporty z nim powiązane zostaną usuniętne nieodwracalnie. - - - -Si, ¡Eliminalo! -Tak, usuń! - - - -¡Eliminado! -Usunięto! - - - -Modelo eliminado correctamente. -Model usunięty prawidłowo. - - - -Modelo actualizado correctamente -Model zaktualizowany prawidłowo - - - -Usuario borrado -Usunięto użytkownika - - - -El usuario a sido eliminado correctamente -Użytkownik został usunięty pomyślnie - - - -Imagen Actualizada -Zaktualizowano zdjęcie - - - -No se pudo obtener ningún registro -Nie udało się uzyskać żadnego rekordu - - - -Recuerde rellenar los campos obligatorios -Pamiętaj, aby wypełnić wymagane pola - - - -Formulario incorrecto. Revise los campos obligatorios. -Nieprawidłowa forma. Sprawdź wymagane pola. - - - -Importante -Ważne - - - -Debe de aceptar las condiciones -Musisz zaakceptować warunki - - - -Usuario creado -Stworzono użytkownika - - - -Error al registrarse -Bład rejestracji - - - -Solo puedes añadir filtros cuando todos los paneles están configurados -Możesz dodać filtry tylko wtedy, gdy wszytkkie panele są skofigurowane - - - -Puedes borrar los paneles en blanco o configurarlos -Możesz usunąć puste panele lub je skofigurować - - - -Entendido -OK - - - -ELIMINAR GRUPO -UNUŃ GRUPĘ - - - -Eliminarás todos los elementos relacionados con este grupo, ¿Deseas continuar? -Usuniesz wszytskie elementy powiązane z tą grupą. Czy chcesz kontynuować? - - - -Si, ¡Eliminalo! -Tak, usuń! - - - -Cancelar -Odrzuć - - - -Estás a punto de borrar el informe: -Raport zostanie usunięty: - - - -Informe eliminado correctamente. -Raport usunięty prawidłowo. - - - -USUARIO -UŻYTKOWNIK - - - -GUARDAR -ZAPISZ - - - -Usuario actualizado -Zaktualizowano użytkowanika - - - -Las contraseñas no coinciden -Niezgodne hasła - - - -Usuario creado -Stworzono użytkownika - - - -El archivo seleccionado no es una imagen -Wybrany plik nie jest obrazem - - - -No se puede borrar el usuario -Nie można usunąć użytkownika - - - -No se puede borrar a si mismo -Nie można usunąć samego siebie - - - -Estás a punto de borrar el usuario -Użytkownik zostanie usunięty - - - -Si, ¡Bórralo! -Tak, usuń! - - - -OPCIONES DE LA FILA -OPCJE WIERSZY - - - -EDITAR -EDYTUJ - - - -ELIMINAR -USUŃ - - - -FILTROS DEL INFORME -FILTRY RAPORTU - - - -CREAR NUEVO USUARIO -STWÓRZ NOWEGO UŻYTKOWNIKA - - - - - - registros - - - rekordy - - - app/module/components/eda-table/eda-table.component.html - 110 - - - - - - - - registros - - - rejestry - - app/module/components/eda-table/eda-table.component.html - 112 - - - - -EDITAR CONSULTA -EDYCJA ZAPYTANIA - - -EDITAR CONSULTA SQL -EDYCJA ZAPYTANIA SQL - - - -Todas -Wszystko - - -Ayer -Wczoraj - - -Antes de ayer -Przed wczoraj - - -Ésta semana -Ten tydzień - - -La semana pasada -Zeszły tydzień - - -La semana pasada completa -Cały zeszły tydzień - - -Éste mes -Ten miesiąc - - -El mes pasado -Ostatni miesiąc - - -El mes pasado completo -Wszytsko z zeszłego miesiąca - - -Éste mes del año pasado -Ten miesiąc w zeszłym roku - - -Éste mes al completo del año pasado -Ten miesiąc w zeszłym roku - - -Éste año -Ten rok - - -El año pasado -Zeszły rok - - - Últimos 7 días -Ostatnie 7 dni - - - Últimos 3 días -Ostatnie 3 dni - - - Últimos 15 días -Ostatnie 15 dni - - - Últimos 30 días -Ostatnie 30 dni - - - Últimos 60 días -Ostatnie 60 dni - - - Últimos 120 días -Ostatnie 120 dni - - - Fecha nula - Data zerowa - - -Selecciona un rango -Wybierz zakres - - -Puerto -Port - - app/module/pages/data-sources/data-source-detail/data-source-detail.component.html - 181 - - - - -Filtrar -Filtr - - - - - Generar alerta - Stwórz komunikat - - app/module/components/eda-panels/eda-blank-panel/kpi-dialog/kpi-dialog.component.html - 15 - - - - - Cambiar Color - Zmień kolor - - app/module/components/eda-panels/eda-blank-panel/dynamicText-dialog/dynamicText-dialog.component.html - 11 - - - - - - Operador - Operator - - app/module/components/eda-panels/eda-blank-panel/kpi-dialog/kpi-dialog.component.html - 29 - - - - Color - Kolor - - app/module/components/eda-panels/eda-blank-panel/kpi-dialog/kpi-dialog.component.html - 49 - - - - Alertas - Komunikaty - - app/module/components/eda-panels/eda-blank-panel/kpi-dialog/kpi-dialog.component.html - 60 - - - - Añadir alerta -Dodaj komunikat - - app/module/components/eda-panels/eda-blank-panel/kpi-dialog/kpi-dialog.component.html - 77 - - - app/module/components/eda-panels/eda-blank-panel/kpi-dialog/kpi-dialog.component.html - 76 - - - - -Cuando el valor del kpi sea (=, <,>) que el valor definido cambiará el color del texto - Gdy wartość kpi jest (=, <,>) niż zdefiniowana wartość, kolor tekstu ulegnie zmianie - - - - Generar vista - Generuj widok - - app/module/pages/data-sources/data-source-detail/viewDialog/view-dialog.component.html - 31 - - - - - - Vista - Widok - - app/module/pages/data-sources/data-source-detail/data-source-detail.component.html - 23 - - - - - Vistas - Widoki - - app/module/pages/data-sources/data-source-detail/data-source-detail.component.html - 246 - - - - - - Añadir vista - Dodaj widok - - app/module/pages/data-sources/data-source-detail/data-source-detail.component.html - 250 - - - - - Añadir Vista - Dodaj widok - - - - Borrar vista - Usuń widok - - app/module/pages/data-sources/data-source-detail/data-source-detail.component.html - 54 - - - - - Mostrar Top:   - - - - Show Top:   - - - - - app/module/components/eda-panels/eda-blank-panel/eda-blank-panel.component.html - 131 - - - - Tipo de intersección: - rodzaj skrzyżowania: - - - - - Añadir tabla desde CSV - Dodaj tabele z CSV - - app/module/pages/data-sources/data-source-list/data-source-list.component.html - 26 - - - app/module/pages/data-sources/data-source-list/addCSV/add-csv.component.html - 14 - - - - - Nombre de la tabla - Nazwa tabeli - - app/module/pages/data-sources/data-source-list/addCSV/add-csv.component.html - 5 - - - - Separador - Separator - - app/module/pages/data-sources/data-source-list/addCSV/add-csv.component.html - 9 - - - - Generar tabla - Stwórz tabele - - app/module/pages/data-sources/data-source-list/addCSV/add-csv.component.html - 51 - - - - - Añadir Tabla - Dodaj tabele - - - - Tabla creada correctamente - Tabela utworzona pomyślnie - - - - Campo - Pole - - - Tipo - Typ - - - Formato - Format - - - - Extender el model - Rozszerzenie modelu - - - - Utilidades - Narzędzia - - - - Ocultar todas las tablas - Ukryj wszytskie tabele - - - Ocultar todas las columnas - Ukryj wszytskie kolumny - - - Ocultar todas las relaciones - Ukryj wszytskie relacje - - - - Subir archivo - Dodaj plik - - - - Filtros - Filtry - - - - Arrastre aquí los atributos que quiera ver en su panel - Przeciągnij tutaj atrybuty, które mają być widoczne w panelu. - - - - Arrastre aquí los atributos sobre los que quiera filtrar - Przeciągnij tutaj atrybuty, według których chcesz filtrować - - - - Posición de la leyenda - Pozycja legendy - - - - Informe a vincular - Połacz raport - - - - Campo del informe - Pole raportu - - - - Vincular con un informe - Połącz z rapotrem - - - - Vincular con otro informe - Połącz z innym raportem - - - - Sin Etiqueta - Bez Tagu - - - - Nueva etiqueta - Nowy tag - - - - AÑADIR ETIQUETA - DODAJ TAG - - - - Todos - Wszystko - - - - - Ninguno - Brak - - - - - Vinculado con - Połączono z - - - - Configurar nuevo orígen de datos - Nowe źródło danych - - - - Optimizar consultas - Optymalizacja zapytań - - - - Subir archivo de claves (json) * - Prześlij klucze (json) * - - - - Creada correctamente - Utworzono prawidłowo - - - - OPCIONES DEL PANEL - OPCJE PANELU - - - - Paneles filtrados - Panele filtrowane - - - - Paneles no relacionados - Panele niepowiązane - - - - Paneles no filtrados - Panele niefiltrowane - - - - Intervalo de recarga - Częstotliwość odświeżania - - - - Gestión de modelos - Zarządzanie modelami - - - - - Modelos - Modele - - - - Informes - Raporty - - - - Exportar Modelo - Eksportuj Model - - - - Exportar Informe - Eksportuj Raport - - - - Importar Modelo - Prześlij Model - - - - Importar Informe - Prześlij Raport - - - - Importar - Prześlij - - - - Se han encontrado inconsistencias en el informe, los siguientes elementos no existen en el modelo: - Znaleziono niespójności w bieżacym raporcie, następujące elementy nie isnieją w modelu: - - - - Se han encontrado inconsistencias en los siguientes informes: - Znaleziono niespójności w bieżącym raporcie: - - - - Modelo guardado correctamente - Model zapisany pomyślnie - - - - Descargar modelo - Pobierz model - - - - Descargar Informe - Pobierz raport - - - - Hay cambios sin guardar. ¿Seguro que quieres salir? - Nie zapisano zmian, czy chcesz kontynuować? - - - - Separador Decimal - Separator dziesiętny - - - - Vista generada correctamente - Widok wygenerowany poprawnie - - - - Establece un Top n para la consulta - Zdefiniuj Top n dla zapytania - - - - Límites - Ograniczenia - - - - Permisos de usuario - Uprawnienia użytkownika - - - - Permisos de grupo - Uprawnienia grupy - - - - Usuarios - Użytkownicy - - - Grupos - Grupy - - - - GRUPO - GRUPA - - - - Mi consulta SQL - Moje zapytanie SQL - - - - Abrir en modo SQL - Otwórz w trybie SQL - - - - Al cambiar de modo perderás la configuración de la consulta actual - Zmiana trybu zastąpi bieżącą konfigurację zapytań - - - - Ver consulta SQL - Wyświetl zapytanie SQL - - - - Sin estilo - Bez koloru - - - - Quitar totales de fila - Usuń sumy wierszy - - - Quitar subtotales de columna - Usuń wiersz z sumą częściową - - - Totales de fila - Suma - - - Subtotales de columna - Podsumy kolumn - - - Totales de columna - Suma - - - Quitar totales de columna - Usun wiersz z sumą - - - Sólo porcentajes - Tylko odsetki - - - Sólo valores - Tylko wartości - - - Valores y porcentajes - Wartości i odsetki - - - Tendencia - Trend - - - Quitar tendencia - Usuń trend - - - - Totales - Suma - - - Porcentajes - Procenty - - - Código de color - Kolor - - - Propiedades de la tabla - Właściości tabeli - - - SubTotales - Suma częściowa - - - - Código de color para la columna: - Kod koloru dla kolumny: - - - - Desvincular del informe: - Odłącz raport: - - - - Configurar caché del modelo - Caché configuration - - - - Caché eliminada correctamente - Pamięć podręczna usunięta poprawnie - - - - No ha sido posible eliminar la caché - Błąd podczas usuwania pamięci podręcznej - - - - Actualizar los datos del modelo cada: - Aktualizuj model danych co: - - - - Hora/s - Godzinę/godziny - - - - Día/s - Dzień/dni - - - - Sin caché - Brak pamięci podręcznej - - - - Borrar cache del modelo - Usuń pamięć podręczną modelu - - - - Envío de alertas por mail - Mail alerts - - - - Enviar mail de alerta cada: - Wysyłaj mail co: - - - - Destinatarios - Docelowa baza danych - - - - Contenido del mail: - Treść wiadomości: - - - - A las - At - - - - - No hay columnas válidas - No valid columns - - - - - Configuración de seguridad - Ustawienia bezpieczeństwa - - - - Ver configuración de seguridad - Zobacz ustawienia bezpieczeństwa - - - - Visibilidad de tablas - Widoczność tabeli - - - Visibilidad a nivel de modelo - Widoczność na poziomie modelu - - - No tiene permiso para ver esta tabla - Nie masz uprawnień do przeglądania tej tabeli - - - SI tiene permiso para ver esta tabla - Masz uprawnienia do przeglądania tej tabeli - - - - No tiene permiso para ver este modelo - Nie masz uprawnień do oglądania tego modelu - - - SI tiene permiso para ver este modelo - Masz uprawnienia do oglądania tego modelu - - - Los usuarios y grupos que pueden ver el modelo son SOLO los definidos explicitamente. - Użytkownicy i grupy, które mogą zobaczyć model, to TYLKO osoby wyraźnie zdefiniowane - - - Cualquier usuario puede ver el modelo. Los filtros de seguridad se definen a nivel de tabla y columna concreta. - Każdy użytkownik może zobaczyć model. Filtry bezpieczeństwa są definiowane na poziomie określonej tabeli i kolumny. - - - - - TABLAS - TABLICE - - - - PERMISOS - ZEZWOLENIA - - - - - VISIBLE - WIDOCZNY - - - - - COLUMNAS - KOLUMNY - - - - Gestión de alertas - Alert management - - - - - ALERTAS - POWIADOMIENIA - - - - Ir al informe - Go to dashboard - - - - Gestión de alertas - Zarządzanie komunikatami - - - - PANEL - PANEL - - - - INFORME - RAPORT - - - - Un Parallel Set necesita dos o más categorias y un campo numérico - Zestaw równoległy wymaga co najmniej dwóch kategorii i pola numerycznego - - - - Un Tree Map necesita un campo numérico y una o más categorias - Tree Map wymaga pola numerycznego i co najmniej jednej kategorii - - - - Un Scatter Plot necesita una categoria y dos o tres campos numéricos - Scatter Plot wymaga jednej kategorii i dwóch lub trzech pól numerycznych - - - - El velocímetro necesita uno o dos valores numéricos. En caso de disponer de dos valores el segundo se interpretará como límite - Gauge requires uno or two numeric values, if two values are provided second one is interpreted as a limit - - - Un histograma requiere una única columna de valores numericos de los que se calculará la frecuencia - Histogram wymaga pojedynczej kolumny wartości liczbowych, z których obliczana jest częstotliwość. - - - - Un embudo necesitar una categoría y un valor numérico - Lejek będzie wymagał kategorii i wartości liczbowej - - - - Credenciales correctas - Prawidłowe dane uwierzytelniające - - - - Un gráfico de piramide necesita de dos categorías y un valor numérico - Wykres piramidowy wymaga dwóch kategorii i wartości liczbowej - - - - Comprobar credenciales - Sprawdź dane uwierzytelniające - - - - Gestión de correo y envio de mails - Email i wysyłanie wiadomości - - - - Configuración guardada correctamente - Ustawienia zapisane pomyślnie - - - - Habilitar caché - Zezwalaj na pamięć podręczną - - - - Configurar Caché - Zarządzanie pamięcią podręczną - - - - Conexión - Połączenie - - - - CREA UN NUEVO INFORME - TWÓJ NOWY RAPORT - - - - CUENTA* - KONTO* - - - - CUENTA - KONTO - - - - Clique sobre un entidad para ver sus atributos. - Click on an entity to see its attributes - - - - Atributos de una entidad. Arrastre los atrubutos a la selección o los filtros para consultarlos. Haciendo click sobre el atributo se accede a sus propiedaes. - Attributes of an entity. Drag attributes onto selection or filters to view them. By clicking on the attribute you access its properties - - - - Para lanzar una consulta. Seleccione los atributos que desea ver, Clique sobre ellos para configurarlos y ejecute la consulta. Siempre podrá volver a esta vista. - To launch a query. Select the attributes you want to see, click on them to configure them and run the query. You can always go back to this view. - - - - Agregación - Agregacja - - - - Número de decimales - Decimal places - - - - Configuración del envío por email - Wysyłanie wiadomości email - - - - Enviar por email - Wyślij email - - - - Sin alertas de correo - Bez powiadomienia - - - - Envio de informes por email - Dashboards mail sending - - - - Suma acumulativa - Łączna suma - - - - Configurar alertas - Ustawienia powiadomień - - - - - Filtros - Filtery - - - - La función de comparar sólo se puede activar si se dispone de un campo de fecha agregado por mes y un único campo numèrico agregado - Compare function is only allowed in queries with one date field monthly or weekly aggregated and one numeric field - - - - - Si esta opción está seleccionada, sólo el propietario del informe y los administradores podrán guardar los cambios - Jeśli ta opcja jest zaznaczona, tylko właściciel raportu i administratorzy będą mogli zapisywać zmiany - - - Edición privada: - Edycja prywatna: - - - - Mostrar Etiquetas - Pokaż tagi - - - Mostrar Etiquetas en Porcentaje - Pokaż tagi w procentach - - - - Columnas - kolumny - - - - Mostrar o ocultar las etiquetas sobre los gráficos - Pokaż lub ukryj etykiety na wykresach - - - - Mostrar o ocultar las etiquetas en porcentaje sobre los gráficos - Pokaż lub ukryj etykiety procentowe na wykresach - - - - Elige cuantas columnas quieres mostrar - Wybierz ile kolumn chcesz wyświetlić - - - - La función de añadir tendencia sólo se puede activar en los gràficos de lineas - Funkcja trendu jest dozwolona tylko na wykresach liniowych - - - - Puedes añadir palabras separadas por comas, que se aplicarán como filtros de tipo LIKE a la hora de recuperar las tablas de tu base de datos - Można dodać słowa oddzielone przecinkami, które zostaną zastosowane jako filtry LIKE podczas pobierania tabel z bazy danych. - - - - Si activas ésta función se calculará la suma acumulativa - para los campos numéricos que eligas. Sólo se puede activar si la fecha está agregada por mes o dia. - Aktywacja tej funkcji spowoduje obliczenie sumy skumulowanej dla plików numerycznych. - Można go aktywować tylko wtedy, gdy pole danych jest agregowane według miesiąca, tygodnia lub dnia. - - - - La suma acumulativa sólo se puede aplicar si se dispone de una única serie no numérica. - Suma kumulatywna może być zastosowana tylko w jednej serii nienumerycznej. - - - - Puedes desactivar la función acumulativa en el campo de fecha o quitar una columna no numérica. - Wyłącz funkcję kumulacji w polu danych lub usuń jedno pole nienumeryczne. - - - - GUARDAR COMO... - ZAPISZ JAKO... - - - - GUARDAR COMO - ZAPISZ JAKO - - - - - EDITAR ESTILOS DEL INFORME - EDYCJA STYLU PANELU - - - - Título del informe - TYTUŁ RAPORTU - - - - Filtros - Filtry - - - - Título del panel - Tytuł panelu - - - - Contenido del panel - Treść panelu - - - - Tipo de fuente - Typ czcionki - - - - Tamaño de fuente - Rozmiar czcionki - - - - Color de la fuente - Kolor czcionki - - - - - Color del fondo - Kolor tła - - - - Color del panel - Kolor panelu - - - - EDITAR ESTILOS - EDYTUJ STYL - - - - Izquierda - Lewo - - - Centro - Po środku - - - Derecha - Prawo - - - - Volver a los valores por defecto - Ustaw domyślnie - - - - Previsualización - Podgląd - - - - Título del informe - Tytuł raportu - - - - Título del panel - Tytuł raportu - - - - Rango - Zakres - - - - Número de - Ilość - - - - en este rango - w tym zakresie - - - - -Si -Tak - - - -No -Nie - - - -Nombre columna duplicada: -Zduplikowana nazwa kolumny: - - - -Posición del filtro en el informe -Filtruj pozycję w raporcie - - - -Definir la visibilidad del filtro. Público: todos pueden usarlo. Deshabilitado: El resto de usuarios pueden ver el filtro pero no pueden modificarlo. Oculto: El resto de usuario no pueden ver el filtro. Pero se les aplica -Określ widoczność filtra. Publiczny: każdy może z niego korzystać. Wyłączone: Inni użytkownicy mogą zobaczyć filtr, ale nie mogą go modyfikować. Ukryty: Inni użytkownicy nie mogą zobaczyć filtra, ale to ich dotyczy - - - - VALORES NO NULOS NI VACÍOS (not null and != '') - WARTOŚCI NIE NULL LUB PUSTE (not null and != '') - - - - VALORES NULOS O VACÍOS (null or = '') - WARTOŚCI NULL LUB PUSTE (null or = '') - - - -Alias del filtro (opcional) -Alias ​​filtra (opcjonalnie) - - - - Este panel no está disponible por falta de permisos - Ten Panel nie jest dostępny ze względu na brak uprawnień - - - - Este panel no está disponible por falta de permisos en un filtro - Ten panel jest niedostępny ze względu na brak uprawnień do filtra - - - - El año pasado, completo - W zeszłym roku, kompletne - - - Filtro sobre todos los registros - Filtruj według wszystkich rekordów - - - Filtro sobre los resultados - Filtruj wyniki - - - Agregación - Zbiór - - - Aplicar - Stosować - - - Diseño de la tabla cruzada: - Projektowanie stołów krzyżowych: - - - Este eje debe contener al menos un elemento - Oś ta musi zawierać co najmniej jeden element - - - • Eje vertical: Arrastre aquí los campos. - • Eix vertical: Arrossegueu aquí els camps. - - - • Eje horizontal: Arrastre aquí los campos para el eje horizontal de la tabla cruzada. - • Eix horitzontal: Arrossegueu aquí els camps per a l'eix horitzontal de la taula creuada. - - - • Eje numérico: Arrastre aquí solo los campos numéricos. - • Eix numèric: Arrossegueu aquí només els camps numèrics. - - - Entre - Między - - - -