@lightdash/common 0.1468.0 → 0.1469.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -303,7 +303,11 @@ const convertTable = (adapterType, model, dbtMetrics, spotlightConfig, startOfWe
|
|
|
303
303
|
]));
|
|
304
304
|
const convertedDbtMetrics = Object.fromEntries(dbtMetrics.map((metric) => [
|
|
305
305
|
metric.name,
|
|
306
|
-
convertDbtMetricToLightdashMetric(metric, model.name, tableLabel,
|
|
306
|
+
convertDbtMetricToLightdashMetric(metric, model.name, tableLabel, {
|
|
307
|
+
...spotlightConfig,
|
|
308
|
+
default_visibility: model.meta.spotlight?.visibility ??
|
|
309
|
+
spotlightConfig.default_visibility,
|
|
310
|
+
}, model.meta.spotlight?.categories),
|
|
307
311
|
]));
|
|
308
312
|
const allMetrics = Object.values({
|
|
309
313
|
...convertedDbtMetrics,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type DbtMetric, type DbtModelNode, type V9MetricRef } from '../types/dbt';
|
|
2
2
|
import { type Table } from '../types/explore';
|
|
3
3
|
import { DimensionType } from '../types/field';
|
|
4
|
+
import type { LightdashProjectConfig } from '../types/lightdashProjectConfig';
|
|
4
5
|
type WarehouseCatalog = {
|
|
5
6
|
[database: string]: {
|
|
6
7
|
[schema: string]: {
|
|
@@ -82,4 +83,11 @@ export declare const MODEL_WITH_ADDITIONAL_DIMENSIONS: DbtModelNode & {
|
|
|
82
83
|
relation_name: string;
|
|
83
84
|
};
|
|
84
85
|
export declare const LIGHTDASH_TABLE_WITH_ADDITIONAL_DIMENSIONS: Omit<Table, 'lineageGraph'>;
|
|
86
|
+
export declare const SPOTLIGHT_CONFIG_WITH_CATEGORIES_AND_HIDE: LightdashProjectConfig;
|
|
87
|
+
export declare const MODEL_WITH_NO_CATEGORIES: DbtModelNode;
|
|
88
|
+
export declare const LIGHTDASH_TABLE_WITH_NO_CATEGORIES: Omit<Table, 'lineageGraph'>;
|
|
89
|
+
export declare const MODEL_WITH_MODEL_LEVEL_CATEGORIES: DbtModelNode;
|
|
90
|
+
export declare const LIGHTDASH_TABLE_WITH_MODEL_LEVEL_CATEGORIES: Omit<Table, 'lineageGraph'>;
|
|
91
|
+
export declare const MODEL_WITH_METRIC_LEVEL_CATEGORIES: DbtModelNode;
|
|
92
|
+
export declare const LIGHTDASH_TABLE_WITH_METRIC_LEVEL_CATEGORIES: Omit<Table, 'lineageGraph'>;
|
|
85
93
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LIGHTDASH_TABLE_WITH_ADDITIONAL_DIMENSIONS = exports.MODEL_WITH_ADDITIONAL_DIMENSIONS = exports.LIGHTDASH_TABLE_SQL_WHERE = exports.expectedModelWithType = exports.warehouseSchemaWithUpperCaseColumn = exports.warehouseSchemaWithMissingColumn = exports.warehouseSchemaWithMissingTable = exports.warehouseSchema = exports.LIGHTDASH_TABLE_WITH_CUSTOM_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_CUSTOM_TIME_INTERVAL_DIMENSIONS = exports.LIGHTDASH_TABLE_WITH_OFF_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_OFF_BOOLEAN_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_OFF_TIME_INTERVAL_DIMENSIONS = exports.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_SNOWFLAKE = exports.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_BIGQUERY = exports.MODEL_WITH_NO_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS = exports.LIGHTDASH_TABLE_WITH_METRICS = exports.MODEL_WITH_WRONG_METRICS = exports.MODEL_WITH_WRONG_METRIC = exports.MODEL_WITH_METRIC = exports.LIGHTDASH_TABLE_WITH_DBT_V9_METRICS = exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = exports.LIGHTDASH_TABLE_WITHOUT_AUTO_METRICS = exports.MODEL_WITH_NO_METRICS = exports.MODEL_WITH_SQL_FILTER = exports.MODEL_WITH_SQL_WHERE = exports.LIGHTDASH_TABLE_WITH_GROUP_BLOCK = exports.LIGHTDASH_TABLE_WITH_GROUP_LABEL = exports.MODEL_WITH_GROUPS_BLOCK = exports.MODEL_WITH_GROUP_LABEL = exports.BASE_LIGHTDASH_TABLE = exports.model = exports.DBT_V9_METRIC = exports.DBT_METRIC_DERIVED = exports.DBT_METRIC_WITH_CUSTOM_SQL = exports.DBT_METRIC_WITH_SQL_FIELD = exports.DBT_METRIC_WITH_FILTER = exports.DBT_METRIC = exports.INVALID_ID_COLUMN_NAMES = exports.VALID_ID_COLUMN_NAMES = void 0;
|
|
3
|
+
exports.LIGHTDASH_TABLE_WITH_METRIC_LEVEL_CATEGORIES = exports.MODEL_WITH_METRIC_LEVEL_CATEGORIES = exports.LIGHTDASH_TABLE_WITH_MODEL_LEVEL_CATEGORIES = exports.MODEL_WITH_MODEL_LEVEL_CATEGORIES = exports.LIGHTDASH_TABLE_WITH_NO_CATEGORIES = exports.MODEL_WITH_NO_CATEGORIES = exports.SPOTLIGHT_CONFIG_WITH_CATEGORIES_AND_HIDE = exports.LIGHTDASH_TABLE_WITH_ADDITIONAL_DIMENSIONS = exports.MODEL_WITH_ADDITIONAL_DIMENSIONS = exports.LIGHTDASH_TABLE_SQL_WHERE = exports.expectedModelWithType = exports.warehouseSchemaWithUpperCaseColumn = exports.warehouseSchemaWithMissingColumn = exports.warehouseSchemaWithMissingTable = exports.warehouseSchema = exports.LIGHTDASH_TABLE_WITH_CUSTOM_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_CUSTOM_TIME_INTERVAL_DIMENSIONS = exports.LIGHTDASH_TABLE_WITH_OFF_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_OFF_BOOLEAN_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_OFF_TIME_INTERVAL_DIMENSIONS = exports.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_SNOWFLAKE = exports.LIGHTDASH_TABLE_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS_BIGQUERY = exports.MODEL_WITH_NO_TIME_INTERVAL_DIMENSIONS = exports.MODEL_WITH_DEFAULT_TIME_INTERVAL_DIMENSIONS = exports.LIGHTDASH_TABLE_WITH_METRICS = exports.MODEL_WITH_WRONG_METRICS = exports.MODEL_WITH_WRONG_METRIC = exports.MODEL_WITH_METRIC = exports.LIGHTDASH_TABLE_WITH_DBT_V9_METRICS = exports.LIGHTDASH_TABLE_WITH_DBT_METRICS = exports.LIGHTDASH_TABLE_WITHOUT_AUTO_METRICS = exports.MODEL_WITH_NO_METRICS = exports.MODEL_WITH_SQL_FILTER = exports.MODEL_WITH_SQL_WHERE = exports.LIGHTDASH_TABLE_WITH_GROUP_BLOCK = exports.LIGHTDASH_TABLE_WITH_GROUP_LABEL = exports.MODEL_WITH_GROUPS_BLOCK = exports.MODEL_WITH_GROUP_LABEL = exports.BASE_LIGHTDASH_TABLE = exports.model = exports.DBT_V9_METRIC = exports.DBT_METRIC_DERIVED = exports.DBT_METRIC_WITH_CUSTOM_SQL = exports.DBT_METRIC_WITH_SQL_FIELD = exports.DBT_METRIC_WITH_FILTER = exports.DBT_METRIC = exports.INVALID_ID_COLUMN_NAMES = exports.VALID_ID_COLUMN_NAMES = void 0;
|
|
4
4
|
const field_1 = require("../types/field");
|
|
5
5
|
const table_1 = require("../types/table");
|
|
6
6
|
const timeFrames_1 = require("../types/timeFrames");
|
|
@@ -1377,3 +1377,116 @@ exports.LIGHTDASH_TABLE_WITH_ADDITIONAL_DIMENSIONS = {
|
|
|
1377
1377
|
},
|
|
1378
1378
|
},
|
|
1379
1379
|
};
|
|
1380
|
+
exports.SPOTLIGHT_CONFIG_WITH_CATEGORIES_AND_HIDE = {
|
|
1381
|
+
spotlight: {
|
|
1382
|
+
default_visibility: 'show',
|
|
1383
|
+
categories: {
|
|
1384
|
+
category_1: { label: 'Category 1' },
|
|
1385
|
+
category_2: { label: 'Category 2', color: 'red' },
|
|
1386
|
+
},
|
|
1387
|
+
},
|
|
1388
|
+
};
|
|
1389
|
+
exports.MODEL_WITH_NO_CATEGORIES = {
|
|
1390
|
+
...exports.MODEL_WITH_METRIC,
|
|
1391
|
+
meta: {
|
|
1392
|
+
spotlight: {
|
|
1393
|
+
visibility: 'hide',
|
|
1394
|
+
},
|
|
1395
|
+
},
|
|
1396
|
+
};
|
|
1397
|
+
exports.LIGHTDASH_TABLE_WITH_NO_CATEGORIES = {
|
|
1398
|
+
...exports.LIGHTDASH_TABLE_WITH_METRICS,
|
|
1399
|
+
metrics: {
|
|
1400
|
+
...{
|
|
1401
|
+
dbt_metric_1: {
|
|
1402
|
+
...exports.LIGHTDASH_TABLE_WITH_DBT_METRICS.metrics.dbt_metric_1,
|
|
1403
|
+
spotlight: {
|
|
1404
|
+
...exports.LIGHTDASH_TABLE_WITH_DBT_METRICS.metrics.dbt_metric_1
|
|
1405
|
+
.spotlight,
|
|
1406
|
+
visibility: 'hide',
|
|
1407
|
+
},
|
|
1408
|
+
},
|
|
1409
|
+
},
|
|
1410
|
+
...Object.fromEntries(Object.entries(exports.LIGHTDASH_TABLE_WITH_METRICS.metrics).map(([key, metric]) => [
|
|
1411
|
+
key,
|
|
1412
|
+
{
|
|
1413
|
+
...metric,
|
|
1414
|
+
spotlight: { ...metric.spotlight, visibility: 'hide' },
|
|
1415
|
+
index: (metric.index ?? 0) + 1,
|
|
1416
|
+
},
|
|
1417
|
+
])),
|
|
1418
|
+
},
|
|
1419
|
+
dimensions: exports.LIGHTDASH_TABLE_WITH_METRICS.dimensions,
|
|
1420
|
+
};
|
|
1421
|
+
exports.MODEL_WITH_MODEL_LEVEL_CATEGORIES = {
|
|
1422
|
+
...exports.MODEL_WITH_METRIC,
|
|
1423
|
+
meta: {
|
|
1424
|
+
spotlight: {
|
|
1425
|
+
visibility: 'hide',
|
|
1426
|
+
categories: ['category_1'],
|
|
1427
|
+
},
|
|
1428
|
+
},
|
|
1429
|
+
};
|
|
1430
|
+
exports.LIGHTDASH_TABLE_WITH_MODEL_LEVEL_CATEGORIES = {
|
|
1431
|
+
...exports.LIGHTDASH_TABLE_WITH_NO_CATEGORIES,
|
|
1432
|
+
metrics: Object.fromEntries(Object.entries(exports.LIGHTDASH_TABLE_WITH_NO_CATEGORIES.metrics).map(([key, metric]) => [
|
|
1433
|
+
key,
|
|
1434
|
+
{
|
|
1435
|
+
...metric,
|
|
1436
|
+
spotlight: {
|
|
1437
|
+
visibility: 'hide',
|
|
1438
|
+
categories: ['category_1'],
|
|
1439
|
+
},
|
|
1440
|
+
},
|
|
1441
|
+
])),
|
|
1442
|
+
};
|
|
1443
|
+
exports.MODEL_WITH_METRIC_LEVEL_CATEGORIES = {
|
|
1444
|
+
...exports.MODEL_WITH_MODEL_LEVEL_CATEGORIES,
|
|
1445
|
+
columns: {
|
|
1446
|
+
user_id: {
|
|
1447
|
+
name: 'user_id',
|
|
1448
|
+
data_type: field_1.DimensionType.STRING,
|
|
1449
|
+
meta: {
|
|
1450
|
+
metrics: {
|
|
1451
|
+
user_count: {
|
|
1452
|
+
type: field_1.MetricType.COUNT_DISTINCT,
|
|
1453
|
+
spotlight: {
|
|
1454
|
+
visibility: 'hide',
|
|
1455
|
+
categories: ['category_2'],
|
|
1456
|
+
},
|
|
1457
|
+
},
|
|
1458
|
+
},
|
|
1459
|
+
},
|
|
1460
|
+
},
|
|
1461
|
+
num_participating_athletes: {
|
|
1462
|
+
name: 'num_participating_athletes',
|
|
1463
|
+
data_type: field_1.DimensionType.NUMBER,
|
|
1464
|
+
meta: {
|
|
1465
|
+
dimension: {
|
|
1466
|
+
sql: 'num_participating_men + num_participating_women',
|
|
1467
|
+
},
|
|
1468
|
+
metrics: {
|
|
1469
|
+
total_num_participating_athletes: {
|
|
1470
|
+
type: field_1.MetricType.SUM,
|
|
1471
|
+
},
|
|
1472
|
+
},
|
|
1473
|
+
},
|
|
1474
|
+
},
|
|
1475
|
+
},
|
|
1476
|
+
};
|
|
1477
|
+
exports.LIGHTDASH_TABLE_WITH_METRIC_LEVEL_CATEGORIES = {
|
|
1478
|
+
...exports.LIGHTDASH_TABLE_WITH_MODEL_LEVEL_CATEGORIES,
|
|
1479
|
+
metrics: Object.fromEntries(Object.entries(exports.LIGHTDASH_TABLE_WITH_MODEL_LEVEL_CATEGORIES.metrics).map(([key, metric]) => [
|
|
1480
|
+
key,
|
|
1481
|
+
{
|
|
1482
|
+
...metric,
|
|
1483
|
+
spotlight: {
|
|
1484
|
+
visibility: 'hide',
|
|
1485
|
+
categories: [
|
|
1486
|
+
'category_1',
|
|
1487
|
+
...(key === 'user_count' ? ['category_2'] : []),
|
|
1488
|
+
],
|
|
1489
|
+
},
|
|
1490
|
+
},
|
|
1491
|
+
])),
|
|
1492
|
+
};
|
|
@@ -87,3 +87,17 @@ describe('convert tables from dbt models', () => {
|
|
|
87
87
|
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_GROUPS_BLOCK, [], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_GROUP_BLOCK);
|
|
88
88
|
});
|
|
89
89
|
});
|
|
90
|
+
describe('spotlight config', () => {
|
|
91
|
+
it('should convert dbt model with metrics when no categories are defined', () => {
|
|
92
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_NO_CATEGORIES, [translator_mock_1.DBT_METRIC], translator_mock_1.SPOTLIGHT_CONFIG_WITH_CATEGORIES_AND_HIDE.spotlight)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_NO_CATEGORIES);
|
|
93
|
+
});
|
|
94
|
+
it('should convert dbt model with metrics when categories are defined', () => {
|
|
95
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_MODEL_LEVEL_CATEGORIES, [translator_mock_1.DBT_METRIC], translator_mock_1.SPOTLIGHT_CONFIG_WITH_CATEGORIES_AND_HIDE.spotlight)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_MODEL_LEVEL_CATEGORIES);
|
|
96
|
+
});
|
|
97
|
+
it('should convert dbt model with metrics when categories are defined and there is metric level assignment', () => {
|
|
98
|
+
expect((0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_METRIC_LEVEL_CATEGORIES, [translator_mock_1.DBT_METRIC], translator_mock_1.SPOTLIGHT_CONFIG_WITH_CATEGORIES_AND_HIDE.spotlight)).toStrictEqual(translator_mock_1.LIGHTDASH_TABLE_WITH_METRIC_LEVEL_CATEGORIES);
|
|
99
|
+
});
|
|
100
|
+
it('should error when categories are assigned but not defined in the spotlight config', () => {
|
|
101
|
+
expect(() => (0, translator_1.convertTable)(dbt_1.SupportedDbtAdapter.BIGQUERY, translator_mock_1.MODEL_WITH_METRIC_LEVEL_CATEGORIES, [translator_mock_1.DBT_METRIC], lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG)).toThrowError(`Invalid spotlight categories found in metric 'user_count': category_1, category_2. Categories must be defined in project config.`);
|
|
102
|
+
});
|
|
103
|
+
});
|