@objectstack/service-analytics 9.2.0 → 9.3.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.
- package/dist/index.cjs +33 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1025,6 +1025,33 @@ var DatasetExecutor = class {
|
|
|
1025
1025
|
* applied per request (ADR-0021 D-C).
|
|
1026
1026
|
*/
|
|
1027
1027
|
async execute(compiled, selection, context) {
|
|
1028
|
+
const result = await this.executeSelection(compiled, selection, context);
|
|
1029
|
+
const groupings = selection.totals?.groupings;
|
|
1030
|
+
if (groupings?.length) {
|
|
1031
|
+
const selected = new Set(selection.dimensions ?? []);
|
|
1032
|
+
const totals = [];
|
|
1033
|
+
for (const grouping of groupings) {
|
|
1034
|
+
const unknown = grouping.filter((d) => !selected.has(d));
|
|
1035
|
+
if (unknown.length) {
|
|
1036
|
+
throw new Error(
|
|
1037
|
+
`[dataset-executor] totals grouping [${grouping.join(", ")}] is not a subset of the selected dimensions \u2014 unknown: ${unknown.join(", ")}.`
|
|
1038
|
+
);
|
|
1039
|
+
}
|
|
1040
|
+
const sub = await this.executeSelection(compiled, {
|
|
1041
|
+
...selection,
|
|
1042
|
+
dimensions: grouping,
|
|
1043
|
+
totals: void 0,
|
|
1044
|
+
order: void 0,
|
|
1045
|
+
limit: void 0,
|
|
1046
|
+
offset: void 0
|
|
1047
|
+
}, context);
|
|
1048
|
+
totals.push({ dimensions: grouping, rows: sub.rows });
|
|
1049
|
+
}
|
|
1050
|
+
result.totals = totals;
|
|
1051
|
+
}
|
|
1052
|
+
return result;
|
|
1053
|
+
}
|
|
1054
|
+
async executeSelection(compiled, selection, context) {
|
|
1028
1055
|
const derivedByName = new Map(compiled.derived.map((d) => [d.name, d]));
|
|
1029
1056
|
const selectedDerived = selection.measures.map((m) => derivedByName.get(m)).filter((d) => !!d);
|
|
1030
1057
|
const baseMeasures = /* @__PURE__ */ new Set();
|
|
@@ -1573,6 +1600,12 @@ var AnalyticsService = class {
|
|
|
1573
1600
|
if (dims.length) {
|
|
1574
1601
|
try {
|
|
1575
1602
|
await resolveDimensionLabels(dataset.object, dims, result.rows, this.labelResolver);
|
|
1603
|
+
for (const total of result.totals ?? []) {
|
|
1604
|
+
const subset = dims.filter((d) => total.dimensions.includes(d.name));
|
|
1605
|
+
if (subset.length) {
|
|
1606
|
+
await resolveDimensionLabels(dataset.object, subset, total.rows, this.labelResolver);
|
|
1607
|
+
}
|
|
1608
|
+
}
|
|
1576
1609
|
} catch (e) {
|
|
1577
1610
|
this.logger?.warn?.(`[Analytics] dimension label resolution failed for "${dataset.name}": ${String(e?.message ?? e)}`);
|
|
1578
1611
|
}
|