drizzle-cube 0.3.13 → 0.3.15

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.
Files changed (182) hide show
  1. package/dist/adapters/{compiler-DTOU8IsK.js → compiler-DdcGVWIl.js} +7429 -4165
  2. package/dist/adapters/compiler-mAJDpIQx.cjs +214 -0
  3. package/dist/adapters/express/index.cjs +1 -1
  4. package/dist/adapters/express/index.d.ts +1 -1
  5. package/dist/adapters/express/index.js +1 -1
  6. package/dist/adapters/fastify/index.cjs +1 -1
  7. package/dist/adapters/fastify/index.d.ts +1 -1
  8. package/dist/adapters/fastify/index.js +1 -1
  9. package/dist/adapters/hono/index.cjs +1 -1
  10. package/dist/adapters/hono/index.d.ts +1 -1
  11. package/dist/adapters/hono/index.js +1 -1
  12. package/dist/adapters/nextjs/index.cjs +1 -1
  13. package/dist/adapters/nextjs/index.d.ts +1 -1
  14. package/dist/adapters/nextjs/index.js +1 -1
  15. package/dist/adapters/utils.d.ts +29 -0
  16. package/dist/client/adapters/index.d.ts +2 -0
  17. package/dist/client/adapters/retentionModeAdapter.d.ts +3 -0
  18. package/dist/client/charts.js +12 -12
  19. package/dist/client/chunks/RetentionCombinedChart-CqMAkdcR.js +256 -0
  20. package/dist/client/chunks/RetentionCombinedChart-CqMAkdcR.js.map +1 -0
  21. package/dist/client/chunks/RetentionCombinedChart.config-C-ILIaEb.js +47 -0
  22. package/dist/client/chunks/RetentionCombinedChart.config-C-ILIaEb.js.map +1 -0
  23. package/dist/client/chunks/RetentionHeatmap-Bofadstm.js +178 -0
  24. package/dist/client/chunks/RetentionHeatmap-Bofadstm.js.map +1 -0
  25. package/dist/client/chunks/RetentionHeatmap.config-CIvhc-GT.js +28 -0
  26. package/dist/client/chunks/RetentionHeatmap.config-CIvhc-GT.js.map +1 -0
  27. package/dist/client/chunks/analysis-builder-D0MIKiKS.js +6939 -0
  28. package/dist/client/chunks/analysis-builder-D0MIKiKS.js.map +1 -0
  29. package/dist/client/chunks/analysis-builder-shared-gS0TDC6Y.js +2779 -0
  30. package/dist/client/chunks/analysis-builder-shared-gS0TDC6Y.js.map +1 -0
  31. package/dist/client/chunks/{chart-activity-grid-CuPARsr1.js → chart-activity-grid-B37W8fcE.js} +11 -11
  32. package/dist/client/chunks/{chart-activity-grid-CuPARsr1.js.map → chart-activity-grid-B37W8fcE.js.map} +1 -1
  33. package/dist/client/chunks/{chart-area-cPrJnhLj.js → chart-area-DZcxSVB1.js} +2 -2
  34. package/dist/client/chunks/{chart-area-cPrJnhLj.js.map → chart-area-DZcxSVB1.js.map} +1 -1
  35. package/dist/client/chunks/{chart-bar-D68HFPpa.js → chart-bar-BFAdRj-E.js} +2 -2
  36. package/dist/client/chunks/{chart-bar-D68HFPpa.js.map → chart-bar-BFAdRj-E.js.map} +1 -1
  37. package/dist/client/chunks/{chart-bubble-CquyYfNO.js → chart-bubble-eoCCbl3h.js} +2 -2
  38. package/dist/client/chunks/{chart-bubble-CquyYfNO.js.map → chart-bubble-eoCCbl3h.js.map} +1 -1
  39. package/dist/client/chunks/{chart-config-activity-grid-Bkvx0F-G.js → chart-config-activity-grid-BBSNCbkb.js} +2 -2
  40. package/dist/client/chunks/{chart-config-activity-grid-Bkvx0F-G.js.map → chart-config-activity-grid-BBSNCbkb.js.map} +1 -1
  41. package/dist/client/chunks/{chart-config-area-OApsRaYC.js → chart-config-area-CyyJOO2T.js} +2 -2
  42. package/dist/client/chunks/{chart-config-area-OApsRaYC.js.map → chart-config-area-CyyJOO2T.js.map} +1 -1
  43. package/dist/client/chunks/{chart-config-bar-Dy21oaIA.js → chart-config-bar-BJKGnfLt.js} +2 -2
  44. package/dist/client/chunks/{chart-config-bar-Dy21oaIA.js.map → chart-config-bar-BJKGnfLt.js.map} +1 -1
  45. package/dist/client/chunks/{chart-config-bubble-Chv0SoFm.js → chart-config-bubble-CuSsCHZ4.js} +2 -2
  46. package/dist/client/chunks/{chart-config-bubble-Chv0SoFm.js.map → chart-config-bubble-CuSsCHZ4.js.map} +1 -1
  47. package/dist/client/chunks/{chart-config-data-table-DTIdC35a.js → chart-config-data-table-BhgqwoqT.js} +2 -2
  48. package/dist/client/chunks/{chart-config-data-table-DTIdC35a.js.map → chart-config-data-table-BhgqwoqT.js.map} +1 -1
  49. package/dist/client/chunks/{chart-config-funnel-f17Livgr.js → chart-config-funnel-BlSQYng0.js} +4 -4
  50. package/dist/client/chunks/{chart-config-funnel-f17Livgr.js.map → chart-config-funnel-BlSQYng0.js.map} +1 -1
  51. package/dist/client/chunks/{chart-config-heat-map-DPhNICha.js → chart-config-heat-map-DHQGFZhX.js} +2 -2
  52. package/dist/client/chunks/{chart-config-heat-map-DPhNICha.js.map → chart-config-heat-map-DHQGFZhX.js.map} +1 -1
  53. package/dist/client/chunks/{chart-config-kpi-delta-CCl1d-St.js → chart-config-kpi-delta-yTA5ug_l.js} +2 -2
  54. package/dist/client/chunks/{chart-config-kpi-delta-CCl1d-St.js.map → chart-config-kpi-delta-yTA5ug_l.js.map} +1 -1
  55. package/dist/client/chunks/{chart-config-kpi-number-DkE3eSwH.js → chart-config-kpi-number-nVAwDXzq.js} +2 -2
  56. package/dist/client/chunks/{chart-config-kpi-number-DkE3eSwH.js.map → chart-config-kpi-number-nVAwDXzq.js.map} +1 -1
  57. package/dist/client/chunks/{chart-config-kpi-text-BMbgdxZm.js → chart-config-kpi-text-DZjqsx-b.js} +2 -2
  58. package/dist/client/chunks/{chart-config-kpi-text-BMbgdxZm.js.map → chart-config-kpi-text-DZjqsx-b.js.map} +1 -1
  59. package/dist/client/chunks/{chart-config-line-BnLlRUQE.js → chart-config-line-DR0ThxZy.js} +2 -2
  60. package/dist/client/chunks/{chart-config-line-BnLlRUQE.js.map → chart-config-line-DR0ThxZy.js.map} +1 -1
  61. package/dist/client/chunks/{chart-config-markdown-DIaMFC0Z.js → chart-config-markdown-DZxdGNVQ.js} +2 -2
  62. package/dist/client/chunks/{chart-config-markdown-DIaMFC0Z.js.map → chart-config-markdown-DZxdGNVQ.js.map} +1 -1
  63. package/dist/client/chunks/{chart-config-pie-O9y_T0BQ.js → chart-config-pie-BM5lgH-w.js} +2 -2
  64. package/dist/client/chunks/{chart-config-pie-O9y_T0BQ.js.map → chart-config-pie-BM5lgH-w.js.map} +1 -1
  65. package/dist/client/chunks/{chart-config-radar-CXa0354h.js → chart-config-radar-BBAVIF0S.js} +2 -2
  66. package/dist/client/chunks/{chart-config-radar-CXa0354h.js.map → chart-config-radar-BBAVIF0S.js.map} +1 -1
  67. package/dist/client/chunks/{chart-config-radial-bar-BppJU8-Q.js → chart-config-radial-bar-CTwjDRnB.js} +2 -2
  68. package/dist/client/chunks/{chart-config-radial-bar-BppJU8-Q.js.map → chart-config-radial-bar-CTwjDRnB.js.map} +1 -1
  69. package/dist/client/chunks/{chart-config-sankey-BfBHgL4x.js → chart-config-sankey-CNAgsMQ4.js} +2 -2
  70. package/dist/client/chunks/{chart-config-sankey-BfBHgL4x.js.map → chart-config-sankey-CNAgsMQ4.js.map} +1 -1
  71. package/dist/client/chunks/{chart-config-scatter-BTt8a10R.js → chart-config-scatter-CWvN2E-X.js} +2 -2
  72. package/dist/client/chunks/{chart-config-scatter-BTt8a10R.js.map → chart-config-scatter-CWvN2E-X.js.map} +1 -1
  73. package/dist/client/chunks/{chart-config-sunburst-DNmQpIIx.js → chart-config-sunburst-W_SKwaj0.js} +4 -4
  74. package/dist/client/chunks/{chart-config-sunburst-DNmQpIIx.js.map → chart-config-sunburst-W_SKwaj0.js.map} +1 -1
  75. package/dist/client/chunks/{chart-config-tree-map-HVgG4oa0.js → chart-config-tree-map-CLmRvvMR.js} +2 -2
  76. package/dist/client/chunks/{chart-config-tree-map-HVgG4oa0.js.map → chart-config-tree-map-CLmRvvMR.js.map} +1 -1
  77. package/dist/client/chunks/{chart-data-table-D4WDqbM0.js → chart-data-table-kudRwZxJ.js} +4 -4
  78. package/dist/client/chunks/{chart-data-table-D4WDqbM0.js.map → chart-data-table-kudRwZxJ.js.map} +1 -1
  79. package/dist/client/chunks/{chart-funnel-Csdn4FbN.js → chart-funnel-CA0XJkfh.js} +2 -2
  80. package/dist/client/chunks/{chart-funnel-Csdn4FbN.js.map → chart-funnel-CA0XJkfh.js.map} +1 -1
  81. package/dist/client/chunks/{chart-heat-map-v1afxnjq.js → chart-heat-map-DUy9_pWM.js} +2 -2
  82. package/dist/client/chunks/{chart-heat-map-v1afxnjq.js.map → chart-heat-map-DUy9_pWM.js.map} +1 -1
  83. package/dist/client/chunks/chart-kpi-delta-MIGGCpkG.js +351 -0
  84. package/dist/client/chunks/chart-kpi-delta-MIGGCpkG.js.map +1 -0
  85. package/dist/client/chunks/chart-kpi-number-DM0Brd91.js +473 -0
  86. package/dist/client/chunks/chart-kpi-number-DM0Brd91.js.map +1 -0
  87. package/dist/client/chunks/{chart-kpi-text-CRp8QWYG.js → chart-kpi-text-BAb28V4X.js} +3 -3
  88. package/dist/client/chunks/{chart-kpi-text-CRp8QWYG.js.map → chart-kpi-text-BAb28V4X.js.map} +1 -1
  89. package/dist/client/chunks/{chart-line-DqqE7ky9.js → chart-line-e3h8sa1R.js} +5 -5
  90. package/dist/client/chunks/{chart-line-DqqE7ky9.js.map → chart-line-e3h8sa1R.js.map} +1 -1
  91. package/dist/client/chunks/{chart-pie-B5WBzIRH.js → chart-pie-CFoHYqDB.js} +2 -2
  92. package/dist/client/chunks/{chart-pie-B5WBzIRH.js.map → chart-pie-CFoHYqDB.js.map} +1 -1
  93. package/dist/client/chunks/{chart-radar-DL_dvhA-.js → chart-radar-CPPwkfxj.js} +2 -2
  94. package/dist/client/chunks/{chart-radar-DL_dvhA-.js.map → chart-radar-CPPwkfxj.js.map} +1 -1
  95. package/dist/client/chunks/{chart-radial-bar-DDRo6nz-.js → chart-radial-bar-BdEOM-P1.js} +2 -2
  96. package/dist/client/chunks/{chart-radial-bar-DDRo6nz-.js.map → chart-radial-bar-BdEOM-P1.js.map} +1 -1
  97. package/dist/client/chunks/{chart-sankey-C_bgIfg-.js → chart-sankey-Bbady-8g.js} +2 -2
  98. package/dist/client/chunks/{chart-sankey-C_bgIfg-.js.map → chart-sankey-Bbady-8g.js.map} +1 -1
  99. package/dist/client/chunks/{chart-scatter-DjmJRlK0.js → chart-scatter-JFu0Pv3a.js} +15 -15
  100. package/dist/client/chunks/{chart-scatter-DjmJRlK0.js.map → chart-scatter-JFu0Pv3a.js.map} +1 -1
  101. package/dist/client/chunks/{chart-sunburst-CbMEnaes.js → chart-sunburst-sayxze15.js} +2 -2
  102. package/dist/client/chunks/{chart-sunburst-CbMEnaes.js.map → chart-sunburst-sayxze15.js.map} +1 -1
  103. package/dist/client/chunks/{chart-tree-map-DEfJtJVC.js → chart-tree-map-Ks2xev8b.js} +30 -30
  104. package/dist/client/chunks/{chart-tree-map-DEfJtJVC.js.map → chart-tree-map-Ks2xev8b.js.map} +1 -1
  105. package/dist/client/chunks/chartConfigRegistry-BumUIPw4.js +44 -0
  106. package/dist/client/chunks/{chartConfigRegistry-CiOq-PqX.js.map → chartConfigRegistry-BumUIPw4.js.map} +1 -1
  107. package/dist/client/chunks/charts-_yZ9gBJU.js +230 -0
  108. package/dist/client/chunks/charts-_yZ9gBJU.js.map +1 -0
  109. package/dist/client/chunks/{charts-core-CXrhEEVF.js → charts-core-Bzu9PzMd.js} +10 -10
  110. package/dist/client/chunks/{charts-core-CXrhEEVF.js.map → charts-core-Bzu9PzMd.js.map} +1 -1
  111. package/dist/client/chunks/{charts-loader-BtsnUO4Q.js → charts-loader-cMtx4zHx.js} +30 -28
  112. package/dist/client/chunks/charts-loader-cMtx4zHx.js.map +1 -0
  113. package/dist/client/chunks/{components-BDrlf9Er.js → components-DQuPThfA.js} +3575 -3208
  114. package/dist/client/chunks/components-DQuPThfA.js.map +1 -0
  115. package/dist/client/chunks/{core-B8zw0qRf.js → core-DwOXVb87.js} +2 -2
  116. package/dist/client/chunks/{core-B8zw0qRf.js.map → core-DwOXVb87.js.map} +1 -1
  117. package/dist/client/chunks/hooks-DPRv1Xhb.js +150 -0
  118. package/dist/client/chunks/{hooks-B8Zw5PfL.js.map → hooks-DPRv1Xhb.js.map} +1 -1
  119. package/dist/client/chunks/{icons-NzFHtqeM.js → icons-DRreo6m8.js} +128 -112
  120. package/dist/client/chunks/{icons-NzFHtqeM.js.map → icons-DRreo6m8.js.map} +1 -1
  121. package/dist/client/chunks/{providers-CqCiJTEj.js → providers-BW8D7Wso.js} +2 -2
  122. package/dist/client/chunks/{providers-CqCiJTEj.js.map → providers-BW8D7Wso.js.map} +1 -1
  123. package/dist/client/chunks/retention-CzCo8262.js +120 -0
  124. package/dist/client/chunks/retention-CzCo8262.js.map +1 -0
  125. package/dist/client/chunks/{useDirtyStateTracking-C_mitVwh.js → useDirtyStateTracking-Yu_qQXb-.js} +101 -99
  126. package/dist/client/chunks/useDirtyStateTracking-Yu_qQXb-.js.map +1 -0
  127. package/dist/client/chunks/{vendor-DzzxS7Ay.js → vendor-BSkQZgtm.js} +548 -540
  128. package/dist/client/chunks/vendor-BSkQZgtm.js.map +1 -0
  129. package/dist/client/components/AnalysisBuilder/AnalysisTypeSelector.d.ts +3 -1
  130. package/dist/client/components/AnalysisBuilder/RetentionConfigPanel.d.ts +36 -0
  131. package/dist/client/components/AnalysisBuilder/RetentionModeContent.d.ts +71 -0
  132. package/dist/client/components/AnalysisBuilder/types.d.ts +99 -0
  133. package/dist/client/components/DebugModal.d.ts +2 -1
  134. package/dist/client/components/charts/RetentionCombinedChart.config.d.ts +2 -0
  135. package/dist/client/components/charts/RetentionCombinedChart.d.ts +14 -0
  136. package/dist/client/components/charts/RetentionHeatmap.config.d.ts +2 -0
  137. package/dist/client/components/charts/RetentionHeatmap.d.ts +7 -0
  138. package/dist/client/components.js +2 -2
  139. package/dist/client/hooks/queries/index.d.ts +2 -1
  140. package/dist/client/hooks/queries/useDryRunQuery.d.ts +26 -0
  141. package/dist/client/hooks/queries/useExplainQuery.d.ts +3 -1
  142. package/dist/client/hooks/queries/useFlowQuery.d.ts +5 -0
  143. package/dist/client/hooks/queries/useRetentionQuery.d.ts +67 -0
  144. package/dist/client/hooks/useAnalysisBuilderHook.d.ts +61 -0
  145. package/dist/client/hooks/useAnalysisQueryExecution.d.ts +42 -1
  146. package/dist/client/hooks.js +3 -3
  147. package/dist/client/icons/customIcons.d.ts +7 -0
  148. package/dist/client/icons/types.d.ts +1 -0
  149. package/dist/client/icons.js +1 -1
  150. package/dist/client/index.js +11 -11
  151. package/dist/client/providers.js +1 -1
  152. package/dist/client/stores/analysisBuilderStore.d.ts +86 -1
  153. package/dist/client/stores/dashboardStore.d.ts +2 -1
  154. package/dist/client/stores/slices/index.d.ts +2 -0
  155. package/dist/client/stores/slices/retentionSlice.d.ts +66 -0
  156. package/dist/client/styles.css +1 -1
  157. package/dist/client/types/analysisConfig.d.ts +29 -4
  158. package/dist/client/types/funnel.d.ts +5 -0
  159. package/dist/client/types/retention.d.ts +301 -0
  160. package/dist/client/types.d.ts +6 -3
  161. package/dist/client-bundle-stats.html +1 -1
  162. package/dist/server/index.cjs +76 -54
  163. package/dist/server/index.d.ts +217 -0
  164. package/dist/server/index.js +7363 -4152
  165. package/package.json +5 -2
  166. package/dist/adapters/compiler-CO13DaEb.cjs +0 -192
  167. package/dist/client/chunks/analysis-builder-Dc9NrG_N.js +0 -6013
  168. package/dist/client/chunks/analysis-builder-Dc9NrG_N.js.map +0 -1
  169. package/dist/client/chunks/analysis-builder-shared-B3-UWqQ2.js +0 -2540
  170. package/dist/client/chunks/analysis-builder-shared-B3-UWqQ2.js.map +0 -1
  171. package/dist/client/chunks/chart-kpi-delta-Bs5R5xr4.js +0 -435
  172. package/dist/client/chunks/chart-kpi-delta-Bs5R5xr4.js.map +0 -1
  173. package/dist/client/chunks/chart-kpi-number-Cf4Pgkm9.js +0 -392
  174. package/dist/client/chunks/chart-kpi-number-Cf4Pgkm9.js.map +0 -1
  175. package/dist/client/chunks/chartConfigRegistry-CiOq-PqX.js +0 -44
  176. package/dist/client/chunks/charts-loader-BtsnUO4Q.js.map +0 -1
  177. package/dist/client/chunks/charts-xNubY0vm.js +0 -226
  178. package/dist/client/chunks/charts-xNubY0vm.js.map +0 -1
  179. package/dist/client/chunks/components-BDrlf9Er.js.map +0 -1
  180. package/dist/client/chunks/hooks-B8Zw5PfL.js +0 -123
  181. package/dist/client/chunks/useDirtyStateTracking-C_mitVwh.js.map +0 -1
  182. package/dist/client/chunks/vendor-DzzxS7Ay.js.map +0 -1
@@ -467,6 +467,22 @@ declare interface DatabaseAdapter {
467
467
  * @returns SQL for conditional aggregation
468
468
  */
469
469
  buildConditionalAggregation(aggFn: 'count' | 'avg' | 'min' | 'max' | 'sum', expr: SQL | null, condition: SQL): SQL;
470
+ /**
471
+ * Build date difference expression in specified periods
472
+ * Used for retention analysis to calculate period numbers
473
+ * @param startDate - Start date expression
474
+ * @param endDate - End date expression
475
+ * @param unit - Unit for difference ('day' | 'week' | 'month')
476
+ * @returns SQL expression for date difference in periods
477
+ */
478
+ buildDateDiffPeriods(startDate: SQL, endDate: SQL, unit: 'day' | 'week' | 'month'): SQL;
479
+ /**
480
+ * Build a subquery that generates a series of period numbers (0 to maxPeriod)
481
+ * Used for retention analysis to cross-join with user data
482
+ * @param maxPeriod - Maximum period number to generate
483
+ * @returns SQL expression for period series subquery with alias 'p' containing 'period_number' column
484
+ */
485
+ buildPeriodSeriesSubquery(maxPeriod: number): SQL;
470
486
  /**
471
487
  * Build time dimension expression with granularity truncation
472
488
  * @param granularity - Time granularity (day, month, year, etc.)
@@ -875,6 +891,16 @@ export declare interface ExplainSummary {
875
891
  usedIndexes: string[];
876
892
  }
877
893
 
894
+ /**
895
+ * Extract cube name from a time dimension specification
896
+ */
897
+ export declare function extractCubeFromTimeDimension(timeDimension: string | RetentionTimeDimensionMapping): string;
898
+
899
+ /**
900
+ * Extract dimension name from a time dimension specification
901
+ */
902
+ export declare function extractDimensionFromTimeDimension(timeDimension: string | RetentionTimeDimensionMapping): string;
903
+
878
904
  /**
879
905
  * Type-level utility to extract the schema type from a cube reference
880
906
  * Since we removed generics, this now returns 'any'
@@ -1231,6 +1257,23 @@ export declare function isMultiCubeStep(step: FunnelStep): step is FunnelStepMul
1231
1257
  */
1232
1258
  export declare function isMultiCubeTimeDimension(timeDimension: string | FunnelTimeDimensionMapping[]): timeDimension is FunnelTimeDimensionMapping[];
1233
1259
 
1260
+ /**
1261
+ * Type guard for multi-cube binding key
1262
+ */
1263
+ export declare function isRetentionMultiCubeBindingKey(bindingKey: string | RetentionBindingKeyMapping[]): bindingKey is RetentionBindingKeyMapping[];
1264
+
1265
+ /**
1266
+ * Type guard for multi-cube time dimension (object form)
1267
+ */
1268
+ export declare function isRetentionMultiCubeTimeDimension(timeDimension: string | RetentionTimeDimensionMapping): timeDimension is RetentionTimeDimensionMapping;
1269
+
1270
+ /**
1271
+ * Type guard for retention query
1272
+ */
1273
+ export declare function isRetentionQuery(query: unknown): query is {
1274
+ retention: RetentionQueryConfig;
1275
+ };
1276
+
1234
1277
  /**
1235
1278
  * Join key information for CTE joins
1236
1279
  * Describes how a CTE should be joined to the main query
@@ -1947,6 +1990,7 @@ export declare class QueryExecutor {
1947
1990
  private comparisonQueryBuilder;
1948
1991
  private funnelQueryBuilder;
1949
1992
  private flowQueryBuilder;
1993
+ private retentionQueryBuilder;
1950
1994
  private cacheConfig?;
1951
1995
  constructor(dbExecutor: DatabaseExecutor, cacheConfig?: CacheConfig);
1952
1996
  /**
@@ -1985,6 +2029,15 @@ export declare class QueryExecutor {
1985
2029
  * Produces Sankey diagram data (nodes and links)
1986
2030
  */
1987
2031
  private executeFlowQuery;
2032
+ /**
2033
+ * Execute a retention query with caching support
2034
+ */
2035
+ private executeRetentionQueryWithCache;
2036
+ /**
2037
+ * Execute a retention analysis query
2038
+ * Calculates cohort-based retention rates
2039
+ */
2040
+ private executeRetentionQuery;
1988
2041
  /**
1989
2042
  * Standard query execution (non-comparison)
1990
2043
  * This is the core execution logic extracted for use by comparison queries
@@ -2036,6 +2089,14 @@ export declare class QueryExecutor {
2036
2089
  sql: string;
2037
2090
  params?: any[];
2038
2091
  }>;
2092
+ /**
2093
+ * Generate SQL for a retention query without execution (dry-run)
2094
+ * Returns the actual CTE-based SQL that would be executed
2095
+ */
2096
+ dryRunRetention(cubes: Map<string, Cube>, query: SemanticQuery, securityContext: SecurityContext): Promise<{
2097
+ sql: string;
2098
+ params?: any[];
2099
+ }>;
2039
2100
  /**
2040
2101
  * Execute EXPLAIN on a query to get the execution plan
2041
2102
  * Generates the SQL using the same secure path as execute/generateSQL,
@@ -2314,6 +2375,130 @@ declare type ResolvedMeasures = Map<string, () => SQL>;
2314
2375
  */
2315
2376
  export declare function resolveSqlExpression(expr: AnyColumn | SQL | ((ctx: QueryContext) => AnyColumn | SQL), ctx: QueryContext): AnyColumn | SQL;
2316
2377
 
2378
+ /**
2379
+ * Binding key mapping for multi-cube retention
2380
+ * Maps the user/entity identifier across cohort and activity cubes
2381
+ */
2382
+ export declare interface RetentionBindingKeyMapping {
2383
+ cube: string;
2384
+ dimension: string;
2385
+ }
2386
+
2387
+ /**
2388
+ * Retention capabilities per database engine
2389
+ */
2390
+ export declare interface RetentionCapabilities {
2391
+ /** Whether database supports DATE_TRUNC natively */
2392
+ supportsDateTrunc: boolean;
2393
+ /** Whether database supports DATE_DIFF with unit specification */
2394
+ supportsDateDiff: boolean;
2395
+ /** Whether database supports generate_series for period generation */
2396
+ supportsGenerateSeries: boolean;
2397
+ }
2398
+
2399
+ /**
2400
+ * Date range for cohort analysis
2401
+ */
2402
+ export declare interface RetentionDateRange {
2403
+ /** Start date (inclusive), ISO 8601 format (YYYY-MM-DD) */
2404
+ start: string;
2405
+ /** End date (inclusive), ISO 8601 format (YYYY-MM-DD) */
2406
+ end: string;
2407
+ }
2408
+
2409
+ /**
2410
+ * Retention query configuration (Simplified Mixpanel-style format)
2411
+ *
2412
+ * Key simplifications from previous version:
2413
+ * - Single timeDimension for both cohort entry and activity
2414
+ * - Single granularity for viewing periods (no separate cohort/period granularity)
2415
+ * - Single cohort (date range defines the cohort) with optional breakdown
2416
+ */
2417
+ export declare interface RetentionQueryConfig {
2418
+ /**
2419
+ * Single timestamp dimension for the analysis.
2420
+ * String for single-cube (e.g., 'Events.timestamp'),
2421
+ * Object for multi-cube with explicit cube reference.
2422
+ */
2423
+ timeDimension: string | RetentionTimeDimensionMapping;
2424
+ /**
2425
+ * Binding key - dimension that links users across events.
2426
+ * This is typically a user ID or other entity identifier.
2427
+ * String for single-cube (e.g., 'Events.userId'),
2428
+ * Array for multi-cube with different column names per cube.
2429
+ */
2430
+ bindingKey: string | RetentionBindingKeyMapping[];
2431
+ /**
2432
+ * Date range for cohort analysis (REQUIRED).
2433
+ * Users who first performed the cohort action within this range are included.
2434
+ */
2435
+ dateRange: RetentionDateRange;
2436
+ /**
2437
+ * Granularity for viewing retention periods.
2438
+ * Determines how period_number is calculated (day/week/month).
2439
+ */
2440
+ granularity: 'day' | 'week' | 'month';
2441
+ /**
2442
+ * Number of periods to calculate (e.g., 12 for 12 weeks).
2443
+ * Period 0 is always the cohort entry period.
2444
+ */
2445
+ periods: number;
2446
+ /**
2447
+ * Retention type:
2448
+ * - 'classic': User returned exactly in period N (bounded)
2449
+ * - 'rolling': User returned in period N or any later period (unbounded)
2450
+ */
2451
+ retentionType: 'classic' | 'rolling';
2452
+ /**
2453
+ * Optional filters on cohort entry events.
2454
+ * Applied when identifying which users enter the cohort.
2455
+ */
2456
+ cohortFilters?: Filter | Filter[];
2457
+ /**
2458
+ * Optional filters on return activity events.
2459
+ * Applied when checking for user activity in each period.
2460
+ */
2461
+ activityFilters?: Filter | Filter[];
2462
+ /**
2463
+ * Optional breakdown dimensions for segmenting the cohort.
2464
+ * When provided, retention is calculated per unique combination of breakdown values.
2465
+ * e.g., ["Events.country", "Events.plan"] to see retention by country and plan.
2466
+ */
2467
+ breakdownDimensions?: string[];
2468
+ }
2469
+
2470
+ /**
2471
+ * Single retention data point in the flat result format.
2472
+ * Results are returned as a flat array; client transforms to matrix if needed.
2473
+ *
2474
+ * Simplified format: no cohortPeriod since we use a single cohort model.
2475
+ * When breakdownDimensions are specified, results include breakdownValues.
2476
+ */
2477
+ export declare interface RetentionResultRow {
2478
+ /** Period number (0 = cohort entry, 1 = first retention period, etc.) */
2479
+ period: number;
2480
+ /** Number of users in the cohort (or segment when breakdown is used) */
2481
+ cohortSize: number;
2482
+ /** Number of users retained in this period */
2483
+ retainedUsers: number;
2484
+ /** Retention rate as decimal (0-1), e.g., 0.45 for 45% */
2485
+ retentionRate: number;
2486
+ /**
2487
+ * Breakdown values when breakdownDimensions are specified.
2488
+ * Keyed by dimension name (e.g., { "Events.country": "US", "Events.plan": "pro" })
2489
+ */
2490
+ breakdownValues?: Record<string, string | null>;
2491
+ }
2492
+
2493
+ /**
2494
+ * Time dimension mapping for multi-cube retention
2495
+ * Maps the timestamp field across different cubes
2496
+ */
2497
+ export declare interface RetentionTimeDimensionMapping {
2498
+ cube: string;
2499
+ dimension: string;
2500
+ }
2501
+
2317
2502
  /**
2318
2503
  * Security context passed to cube SQL functions
2319
2504
  * Contains user/tenant-specific data for filtering
@@ -2433,6 +2618,14 @@ export declare class SemanticLayerCompiler {
2433
2618
  sql: string;
2434
2619
  params?: any[];
2435
2620
  }>;
2621
+ /**
2622
+ * Generate SQL for a retention query without execution (dry-run)
2623
+ * Returns the CTE-based SQL that would be executed for retention analysis
2624
+ */
2625
+ dryRunRetention(query: SemanticQuery, securityContext: SecurityContext): Promise<{
2626
+ sql: string;
2627
+ params?: any[];
2628
+ }>;
2436
2629
  /**
2437
2630
  * Execute EXPLAIN on a query to get the execution plan
2438
2631
  * Uses the same secure path as execute/dryRun to generate SQL,
@@ -2557,6 +2750,30 @@ export declare interface SemanticQuery {
2557
2750
  * ```
2558
2751
  */
2559
2752
  flow?: FlowQueryConfig;
2753
+ /**
2754
+ * Retention analysis configuration for cohort-based retention tracking.
2755
+ * When specified, the query executes as a retention analysis instead of
2756
+ * standard measures/dimensions aggregation.
2757
+ *
2758
+ * Retention analysis tracks what percentage of users from each cohort
2759
+ * return in subsequent time periods.
2760
+ *
2761
+ * @example
2762
+ * ```typescript
2763
+ * {
2764
+ * retention: {
2765
+ * timeDimension: 'Events.timestamp',
2766
+ * bindingKey: 'Events.userId',
2767
+ * dateRange: { start: '2024-01-01', end: '2024-12-31' },
2768
+ * granularity: 'week',
2769
+ * periods: 12,
2770
+ * retentionType: 'classic',
2771
+ * breakdownDimensions: ['Events.country', 'Events.plan']
2772
+ * }
2773
+ * }
2774
+ * ```
2775
+ */
2776
+ retention?: RetentionQueryConfig;
2560
2777
  }
2561
2778
 
2562
2779
  export { SQL }