@finos/legend-cube-builder 0.0.4 → 0.0.6
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/README.md +9 -3
- package/docs/adding-an-operation.md +24 -12
- package/docs/demo/DEMO-FAST-NOTES.md +67 -0
- package/docs/demo/README.md +102 -0
- package/docs/demo/specs/duckdb-sales-pivot.cube.json +110 -0
- package/docs/demo/specs/trades-desks-1-joined.cube.json +123 -0
- package/docs/demo/specs/trades-desks-2-grouped.cube.json +140 -0
- package/docs/demo/specs/trades-desks-3-ranked.cube.json +158 -0
- package/docs/demo/specs/trades-desks-4-extended.cube.json +208 -0
- package/docs/demo/specs/trades-desks-5-final.cube.json +248 -0
- package/docs/hosting.md +83 -5
- package/docs/testing.md +32 -0
- package/lib/__lib__/LegendCubeCommand.d.ts +2 -0
- package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeCommand.js +7 -0
- package/lib/__lib__/LegendCubeCommand.js.map +1 -1
- package/lib/__lib__/LegendCubeFunctionLabels.d.ts +29 -0
- package/lib/__lib__/LegendCubeFunctionLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeFunctionLabels.js +31 -0
- package/lib/__lib__/LegendCubeFunctionLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeHelpText.d.ts +5 -1
- package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeHelpText.js +16 -2
- package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
- package/lib/__lib__/LegendCubeLabels.d.ts +130 -9
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeLabels.js +169 -17
- package/lib/__lib__/LegendCubeLabels.js.map +1 -1
- package/lib/__lib__/LegendCubeNavigation.d.ts +23 -0
- package/lib/__lib__/LegendCubeNavigation.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeNavigation.js +33 -0
- package/lib/__lib__/LegendCubeNavigation.js.map +1 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts +26 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.js +26 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeServiceLabels.d.ts +27 -0
- package/lib/__lib__/LegendCubeServiceLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeServiceLabels.js +32 -0
- package/lib/__lib__/LegendCubeServiceLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts +10 -1
- package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeTesting.js +9 -0
- package/lib/__lib__/LegendCubeTesting.js.map +1 -1
- package/lib/__lib__/LegendCubeTour.d.ts +62 -0
- package/lib/__lib__/LegendCubeTour.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeTour.js +149 -0
- package/lib/__lib__/LegendCubeTour.js.map +1 -0
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.js +2 -2
- package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
- package/lib/__test-utils__/CubeExampleTestUtils.d.ts +34 -0
- package/lib/__test-utils__/CubeExampleTestUtils.d.ts.map +1 -0
- package/lib/__test-utils__/CubeExampleTestUtils.js +72 -0
- package/lib/__test-utils__/CubeExampleTestUtils.js.map +1 -0
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +8 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.js +20 -3
- package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeFunctionTestOutline.d.ts +26 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.d.ts.map +1 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.js +56 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.js.map +1 -0
- package/lib/__test-utils__/CubeLambdaCorpus.d.ts +36 -0
- package/lib/__test-utils__/CubeLambdaCorpus.d.ts.map +1 -0
- package/lib/__test-utils__/CubeLambdaCorpus.js +83 -0
- package/lib/__test-utils__/CubeLambdaCorpus.js.map +1 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts +6 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubePageTestUtils.js +21 -0
- package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.d.ts +9 -0
- package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.js +16 -0
- package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
- package/lib/__test-utils__/CubeVariantTestUtils.d.ts +16 -0
- package/lib/__test-utils__/CubeVariantTestUtils.d.ts.map +1 -0
- package/lib/__test-utils__/CubeVariantTestUtils.js +66 -0
- package/lib/__test-utils__/CubeVariantTestUtils.js.map +1 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts +5 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.js +17 -0
- package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +7 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.js +16 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -1
- package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts +26 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.js +40 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.js.map +1 -0
- package/lib/components/CubeAddItems.d.ts.map +1 -1
- package/lib/components/CubeAddItems.js +11 -7
- package/lib/components/CubeAddItems.js.map +1 -1
- package/lib/components/CubeDialogTheme.d.ts +25 -0
- package/lib/components/CubeDialogTheme.d.ts.map +1 -0
- package/lib/components/CubeDialogTheme.js +25 -0
- package/lib/components/CubeDialogTheme.js.map +1 -0
- package/lib/components/CubeEditor.d.ts +12 -1
- package/lib/components/CubeEditor.d.ts.map +1 -1
- package/lib/components/CubeEditor.js +22 -14
- package/lib/components/CubeEditor.js.map +1 -1
- package/lib/components/CubeFileMenu.d.ts +28 -0
- package/lib/components/CubeFileMenu.d.ts.map +1 -0
- package/lib/components/CubeFileMenu.js +78 -0
- package/lib/components/CubeFileMenu.js.map +1 -0
- package/lib/components/CubeLambdaImportBanner.d.ts +26 -0
- package/lib/components/CubeLambdaImportBanner.d.ts.map +1 -0
- package/lib/components/CubeLambdaImportBanner.js +47 -0
- package/lib/components/CubeLambdaImportBanner.js.map +1 -0
- package/lib/components/CubeNodeIcon.d.ts.map +1 -1
- package/lib/components/CubeNodeIcon.js +6 -1
- package/lib/components/CubeNodeIcon.js.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.js +2 -2
- package/lib/components/CubeSchemaColumnsTable.js.map +1 -1
- package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvas.js +40 -6
- package/lib/components/canvas/CubeCanvas.js.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js +2 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts +18 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.js +58 -3
- package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
- package/lib/components/canvas/CubeCanvasLayout.js +1 -1
- package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasNode.js +11 -4
- package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
- package/lib/components/dev-settings/CubeDevSettings.d.ts +35 -0
- package/lib/components/dev-settings/CubeDevSettings.d.ts.map +1 -0
- package/lib/components/dev-settings/CubeDevSettings.js +54 -0
- package/lib/components/dev-settings/CubeDevSettings.js.map +1 -0
- package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnChecklist.js +2 -2
- package/lib/components/editors/CubeColumnChecklist.js.map +1 -1
- package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnPicker.js +6 -4
- package/lib/components/editors/CubeColumnPicker.js.map +1 -1
- package/lib/components/editors/CubeConcatEditor.js +2 -2
- package/lib/components/editors/CubeConcatEditor.js.map +1 -1
- package/lib/components/editors/CubeExplodeEditor.d.ts +26 -0
- package/lib/components/editors/CubeExplodeEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExplodeEditor.js +61 -0
- package/lib/components/editors/CubeExplodeEditor.js.map +1 -0
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts +25 -0
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js +86 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js.map +1 -0
- package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeExtendEditor.js +13 -12
- package/lib/components/editors/CubeExtendEditor.js.map +1 -1
- package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeFilterEditor.js +13 -2
- package/lib/components/editors/CubeFilterEditor.js.map +1 -1
- package/lib/components/editors/CubeFunctionSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeFunctionSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeFunctionSourceEditor.js +55 -0
- package/lib/components/editors/CubeFunctionSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeJoinEditor.js +16 -4
- package/lib/components/editors/CubeJoinEditor.js.map +1 -1
- package/lib/components/editors/CubeJsonFieldsTree.d.ts +46 -0
- package/lib/components/editors/CubeJsonFieldsTree.d.ts.map +1 -0
- package/lib/components/editors/CubeJsonFieldsTree.js +93 -0
- package/lib/components/editors/CubeJsonFieldsTree.js.map +1 -0
- package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.js +18 -8
- package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts +5 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.js +10 -2
- package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js +11 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
- package/lib/components/editors/CubePivotEditor.d.ts +26 -0
- package/lib/components/editors/CubePivotEditor.d.ts.map +1 -0
- package/lib/components/editors/CubePivotEditor.js +93 -0
- package/lib/components/editors/CubePivotEditor.js.map +1 -0
- package/lib/components/editors/CubeRestrictEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeRestrictEditor.js +2 -2
- package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
- package/lib/components/editors/CubeServiceSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeServiceSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeServiceSourceEditor.js +41 -0
- package/lib/components/editors/CubeServiceSourceEditor.js.map +1 -0
- package/lib/components/grid/CubeColumnFormatDialog.d.ts +28 -0
- package/lib/components/grid/CubeColumnFormatDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeColumnFormatDialog.js +94 -0
- package/lib/components/grid/CubeColumnFormatDialog.js.map +1 -0
- package/lib/components/grid/CubeDrilldownBar.d.ts +37 -0
- package/lib/components/grid/CubeDrilldownBar.d.ts.map +1 -0
- package/lib/components/grid/CubeDrilldownBar.js +77 -0
- package/lib/components/grid/CubeDrilldownBar.js.map +1 -0
- package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
- package/lib/components/grid/CubeGridRegion.js +43 -28
- package/lib/components/grid/CubeGridRegion.js.map +1 -1
- package/lib/components/grid/CubeGridValues.d.ts +36 -4
- package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
- package/lib/components/grid/CubeGridValues.js +116 -4
- package/lib/components/grid/CubeGridValues.js.map +1 -1
- package/lib/components/grid/CubeJsonExplorerDialog.d.ts +27 -0
- package/lib/components/grid/CubeJsonExplorerDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeJsonExplorerDialog.js +102 -0
- package/lib/components/grid/CubeJsonExplorerDialog.js.map +1 -0
- package/lib/components/grid/CubeJsonViewerDialog.d.ts +27 -0
- package/lib/components/grid/CubeJsonViewerDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeJsonViewerDialog.js +68 -0
- package/lib/components/grid/CubeJsonViewerDialog.js.map +1 -0
- package/lib/components/grid/CubeResultGrid.d.ts +81 -6
- package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
- package/lib/components/grid/CubeResultGrid.js +400 -35
- package/lib/components/grid/CubeResultGrid.js.map +1 -1
- package/lib/components/grid/CubeRunStatsPanel.d.ts +28 -0
- package/lib/components/grid/CubeRunStatsPanel.d.ts.map +1 -0
- package/lib/components/grid/CubeRunStatsPanel.js +61 -0
- package/lib/components/grid/CubeRunStatsPanel.js.map +1 -0
- package/lib/components/grid/CubeServerSideGrid.d.ts +36 -0
- package/lib/components/grid/CubeServerSideGrid.d.ts.map +1 -0
- package/lib/components/grid/CubeServerSideGrid.js +116 -0
- package/lib/components/grid/CubeServerSideGrid.js.map +1 -0
- package/lib/components/grid/CubeSqlDialog.d.ts +24 -0
- package/lib/components/grid/CubeSqlDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeSqlDialog.js +39 -0
- package/lib/components/grid/CubeSqlDialog.js.map +1 -0
- package/lib/components/grid/CubeSqlFormat.d.ts +20 -0
- package/lib/components/grid/CubeSqlFormat.d.ts.map +1 -0
- package/lib/components/grid/CubeSqlFormat.js +32 -0
- package/lib/components/grid/CubeSqlFormat.js.map +1 -0
- package/lib/components/palette/CubePalette.d.ts.map +1 -1
- package/lib/components/palette/CubePalette.js +36 -14
- package/lib/components/palette/CubePalette.js.map +1 -1
- package/lib/components/show-pure/CubeShowPureDialog.d.ts +4 -1
- package/lib/components/show-pure/CubeShowPureDialog.d.ts.map +1 -1
- package/lib/components/show-pure/CubeShowPureDialog.js +8 -4
- package/lib/components/show-pure/CubeShowPureDialog.js.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.js +37 -16
- package/lib/components/source-picker/CubeDataProductTab.js.map +1 -1
- package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeDirectConnectionTab.js +6 -4
- package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -1
- package/lib/components/source-picker/CubeFunctionSteps.d.ts +36 -0
- package/lib/components/source-picker/CubeFunctionSteps.d.ts.map +1 -0
- package/lib/components/source-picker/CubeFunctionSteps.js +76 -0
- package/lib/components/source-picker/CubeFunctionSteps.js.map +1 -0
- package/lib/components/source-picker/CubeIngestTab.d.ts +2 -2
- package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeIngestTab.js +49 -20
- package/lib/components/source-picker/CubeIngestTab.js.map +1 -1
- package/lib/components/source-picker/CubeInlineModelTab.d.ts +3 -2
- package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeInlineModelTab.js +23 -13
- package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -1
- package/lib/components/source-picker/CubePickerListItem.d.ts +47 -0
- package/lib/components/source-picker/CubePickerListItem.d.ts.map +1 -0
- package/lib/components/source-picker/CubePickerListItem.js +62 -0
- package/lib/components/source-picker/CubePickerListItem.js.map +1 -0
- package/lib/components/source-picker/CubeProjectTab.d.ts +4 -3
- package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeProjectTab.js +7 -4
- package/lib/components/source-picker/CubeProjectTab.js.map +1 -1
- package/lib/components/source-picker/CubeServiceTab.d.ts +27 -0
- package/lib/components/source-picker/CubeServiceTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeServiceTab.js +36 -0
- package/lib/components/source-picker/CubeServiceTab.js.map +1 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
- package/lib/components/source-picker/CubeSourcePicker.js +16 -3
- package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
- package/lib/components/source-picker/CubeTablePreview.d.ts +29 -0
- package/lib/components/source-picker/CubeTablePreview.d.ts.map +1 -0
- package/lib/components/source-picker/CubeTablePreview.js +10 -0
- package/lib/components/source-picker/CubeTablePreview.js.map +1 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.d.ts +27 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.d.ts.map +1 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.js +38 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.js.map +1 -0
- package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts.map +1 -1
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js +9 -3
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
- package/lib/components/tour/CubeTour.d.ts +36 -0
- package/lib/components/tour/CubeTour.d.ts.map +1 -0
- package/lib/components/tour/CubeTour.js +183 -0
- package/lib/components/tour/CubeTour.js.map +1 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts +10 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -1
- package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -1
- package/lib/graph-manager/CubeEngine.d.ts +46 -1
- package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/CubeEngine.js.map +1 -1
- package/lib/graph-manager/CubeEngineClientSettings.d.ts +43 -0
- package/lib/graph-manager/CubeEngineClientSettings.d.ts.map +1 -0
- package/lib/graph-manager/CubeEngineClientSettings.js +51 -0
- package/lib/graph-manager/CubeEngineClientSettings.js.map +1 -0
- package/lib/graph-manager/CubeIngest.d.ts +5 -0
- package/lib/graph-manager/CubeIngest.d.ts.map +1 -1
- package/lib/graph-manager/CubeIngest.js +10 -0
- package/lib/graph-manager/CubeIngest.js.map +1 -1
- package/lib/graph-manager/CubeIngestCatalog.d.ts +26 -0
- package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -1
- package/lib/graph-manager/CubeIngestCatalog.js +6 -0
- package/lib/graph-manager/CubeIngestCatalog.js.map +1 -1
- package/lib/graph-manager/CubeLakehouseRuntime.d.ts +29 -0
- package/lib/graph-manager/CubeLakehouseRuntime.d.ts.map +1 -0
- package/lib/graph-manager/CubeLakehouseRuntime.js +40 -0
- package/lib/graph-manager/CubeLakehouseRuntime.js.map +1 -0
- package/lib/graph-manager/CubeProjectCatalog.d.ts +3 -3
- package/lib/graph-manager/CubeService.d.ts +20 -0
- package/lib/graph-manager/CubeService.d.ts.map +1 -0
- package/lib/graph-manager/CubeService.js +22 -0
- package/lib/graph-manager/CubeService.js.map +1 -0
- package/lib/graph-manager/CubeServiceCatalog.d.ts +31 -0
- package/lib/graph-manager/CubeServiceCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeServiceCatalog.js +17 -0
- package/lib/graph-manager/CubeServiceCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +52 -5
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +63 -5
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +9 -6
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +12 -8
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts +30 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js +229 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +18 -9
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +4 -9
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts +34 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js +332 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +49 -10
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +3 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +18 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +74 -6
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +7 -4
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts +31 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js +69 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +6 -2
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +13 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +11 -1
- package/lib/index.js.map +1 -1
- package/lib/stores/CubeAddPlacement.d.ts +10 -3
- package/lib/stores/CubeAddPlacement.d.ts.map +1 -1
- package/lib/stores/CubeAddPlacement.js +16 -5
- package/lib/stores/CubeAddPlacement.js.map +1 -1
- package/lib/stores/CubeDevSettingsState.d.ts +47 -0
- package/lib/stores/CubeDevSettingsState.d.ts.map +1 -0
- package/lib/stores/CubeDevSettingsState.js +99 -0
- package/lib/stores/CubeDevSettingsState.js.map +1 -0
- package/lib/stores/CubeEditorState.d.ts +189 -43
- package/lib/stores/CubeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeEditorState.js +532 -117
- package/lib/stores/CubeEditorState.js.map +1 -1
- package/lib/stores/CubeEngineChecks.d.ts +59 -0
- package/lib/stores/CubeEngineChecks.d.ts.map +1 -0
- package/lib/stores/CubeEngineChecks.js +100 -0
- package/lib/stores/CubeEngineChecks.js.map +1 -0
- package/lib/stores/CubeExamples.d.ts.map +1 -1
- package/lib/stores/CubeExamples.js +136 -2
- package/lib/stores/CubeExamples.js.map +1 -1
- package/lib/stores/CubeExamplesState.d.ts +1 -1
- package/lib/stores/CubeExamplesState.d.ts.map +1 -1
- package/lib/stores/CubeExamplesState.js +6 -3
- package/lib/stores/CubeExamplesState.js.map +1 -1
- package/lib/stores/CubeExecutionState.d.ts.map +1 -1
- package/lib/stores/CubeExecutionState.js +24 -33
- package/lib/stores/CubeExecutionState.js.map +1 -1
- package/lib/stores/CubeExportState.d.ts +41 -0
- package/lib/stores/CubeExportState.d.ts.map +1 -0
- package/lib/stores/CubeExportState.js +134 -0
- package/lib/stores/CubeExportState.js.map +1 -0
- package/lib/stores/CubeExpressionFilterCheck.d.ts +51 -0
- package/lib/stores/CubeExpressionFilterCheck.d.ts.map +1 -0
- package/lib/stores/CubeExpressionFilterCheck.js +134 -0
- package/lib/stores/CubeExpressionFilterCheck.js.map +1 -0
- package/lib/stores/CubeExtendTyping.d.ts +6 -14
- package/lib/stores/CubeExtendTyping.d.ts.map +1 -1
- package/lib/stores/CubeExtendTyping.js +6 -33
- package/lib/stores/CubeExtendTyping.js.map +1 -1
- package/lib/stores/CubeFunctionRecheck.d.ts +30 -0
- package/lib/stores/CubeFunctionRecheck.d.ts.map +1 -0
- package/lib/stores/CubeFunctionRecheck.js +67 -0
- package/lib/stores/CubeFunctionRecheck.js.map +1 -0
- package/lib/stores/CubeGridFetcher.d.ts +75 -0
- package/lib/stores/CubeGridFetcher.d.ts.map +1 -0
- package/lib/stores/CubeGridFetcher.js +197 -0
- package/lib/stores/CubeGridFetcher.js.map +1 -0
- package/lib/stores/CubeGridQuickActions.d.ts +25 -6
- package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
- package/lib/stores/CubeGridQuickActions.js +52 -23
- package/lib/stores/CubeGridQuickActions.js.map +1 -1
- package/lib/stores/CubeGridState.d.ts +136 -0
- package/lib/stores/CubeGridState.d.ts.map +1 -0
- package/lib/stores/CubeGridState.js +317 -0
- package/lib/stores/CubeGridState.js.map +1 -0
- package/lib/stores/CubeHost.d.ts +42 -0
- package/lib/stores/CubeHost.d.ts.map +1 -1
- package/lib/stores/CubeHost.js +4 -0
- package/lib/stores/CubeHost.js.map +1 -1
- package/lib/stores/CubeLambdaImportState.d.ts +118 -0
- package/lib/stores/CubeLambdaImportState.d.ts.map +1 -0
- package/lib/stores/CubeLambdaImportState.js +302 -0
- package/lib/stores/CubeLambdaImportState.js.map +1 -0
- package/lib/stores/CubeLambdaSources.d.ts +45 -0
- package/lib/stores/CubeLambdaSources.d.ts.map +1 -0
- package/lib/stores/CubeLambdaSources.js +261 -0
- package/lib/stores/CubeLambdaSources.js.map +1 -0
- package/lib/stores/CubePureText.d.ts +20 -0
- package/lib/stores/CubePureText.d.ts.map +1 -0
- package/lib/stores/CubePureText.js +24 -0
- package/lib/stores/CubePureText.js.map +1 -0
- package/lib/stores/CubeQueryRun.d.ts +59 -0
- package/lib/stores/CubeQueryRun.d.ts.map +1 -0
- package/lib/stores/CubeQueryRun.js +101 -0
- package/lib/stores/CubeQueryRun.js.map +1 -0
- package/lib/stores/CubeRunStatsState.d.ts +61 -0
- package/lib/stores/CubeRunStatsState.d.ts.map +1 -0
- package/lib/stores/CubeRunStatsState.js +54 -0
- package/lib/stores/CubeRunStatsState.js.map +1 -0
- package/lib/stores/CubeRunningStepLambda.d.ts +25 -0
- package/lib/stores/CubeRunningStepLambda.d.ts.map +1 -0
- package/lib/stores/CubeRunningStepLambda.js +45 -0
- package/lib/stores/CubeRunningStepLambda.js.map +1 -0
- package/lib/stores/CubeServiceRecheck.d.ts +29 -0
- package/lib/stores/CubeServiceRecheck.d.ts.map +1 -0
- package/lib/stores/CubeServiceRecheck.js +33 -0
- package/lib/stores/CubeServiceRecheck.js.map +1 -0
- package/lib/stores/CubeShowPureState.d.ts +14 -1
- package/lib/stores/CubeShowPureState.d.ts.map +1 -1
- package/lib/stores/CubeShowPureState.js +41 -11
- package/lib/stores/CubeShowPureState.js.map +1 -1
- package/lib/stores/CubeSourcePickerState.d.ts +20 -4
- package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
- package/lib/stores/CubeSourcePickerState.js +75 -14
- package/lib/stores/CubeSourcePickerState.js.map +1 -1
- package/lib/stores/CubeTourState.d.ts +49 -0
- package/lib/stores/CubeTourState.d.ts.map +1 -0
- package/lib/stores/CubeTourState.js +92 -0
- package/lib/stores/CubeTourState.js.map +1 -0
- package/lib/stores/LegendCubeHost.d.ts +88 -0
- package/lib/stores/LegendCubeHost.d.ts.map +1 -0
- package/lib/stores/LegendCubeHost.js +149 -0
- package/lib/stores/LegendCubeHost.js.map +1 -0
- package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
- package/lib/stores/LocalModelCatalog.js +3 -1
- package/lib/stores/LocalModelCatalog.js.map +1 -1
- package/lib/stores/editors/CubeExplodeDraft.d.ts +87 -0
- package/lib/stores/editors/CubeExplodeDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExplodeDraft.js +221 -0
- package/lib/stores/editors/CubeExplodeDraft.js.map +1 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts +94 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js +258 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js.map +1 -0
- package/lib/stores/editors/CubeExtendDraft.d.ts +9 -0
- package/lib/stores/editors/CubeExtendDraft.d.ts.map +1 -1
- package/lib/stores/editors/CubeExtendDraft.js +26 -0
- package/lib/stores/editors/CubeExtendDraft.js.map +1 -1
- package/lib/stores/editors/CubeFunctionDraft.d.ts +34 -0
- package/lib/stores/editors/CubeFunctionDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeFunctionDraft.js +69 -0
- package/lib/stores/editors/CubeFunctionDraft.js.map +1 -0
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +4 -2
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js +25 -3
- package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
- package/lib/stores/editors/CubePivotDraft.d.ts +93 -0
- package/lib/stores/editors/CubePivotDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubePivotDraft.js +267 -0
- package/lib/stores/editors/CubePivotDraft.js.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts +27 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js +52 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js.map +1 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts +4 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -1
- package/lib/stores/fixtures/CubeTradesModel.js +31 -1
- package/lib/stores/fixtures/CubeTradesModel.js.map +1 -1
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts +34 -5
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeDataProductTabState.js +111 -26
- package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +25 -2
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js +183 -31
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.d.ts +62 -15
- package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.js +212 -60
- package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +100 -4
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeInlineModelTabState.js +415 -28
- package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeProjectTabState.d.ts +18 -3
- package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeProjectTabState.js +26 -1
- package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeServiceTabState.d.ts +74 -0
- package/lib/stores/source-picker/CubeServiceTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeServiceTabState.js +216 -0
- package/lib/stores/source-picker/CubeServiceTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +15 -3
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeSourcePickerTab.js +21 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -1
- package/lib/stores/variant/CubeJson.d.ts +48 -0
- package/lib/stores/variant/CubeJson.d.ts.map +1 -0
- package/lib/stores/variant/CubeJson.js +207 -0
- package/lib/stores/variant/CubeJson.js.map +1 -0
- package/lib/stores/variant/CubeJsonExplorerState.d.ts +88 -0
- package/lib/stores/variant/CubeJsonExplorerState.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonExplorerState.js +297 -0
- package/lib/stores/variant/CubeJsonExplorerState.js.map +1 -0
- package/lib/stores/variant/CubeJsonFieldsState.d.ts +83 -0
- package/lib/stores/variant/CubeJsonFieldsState.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonFieldsState.js +207 -0
- package/lib/stores/variant/CubeJsonFieldsState.js.map +1 -0
- package/lib/stores/variant/CubeJsonOffers.d.ts +76 -0
- package/lib/stores/variant/CubeJsonOffers.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonOffers.js +250 -0
- package/lib/stores/variant/CubeJsonOffers.js.map +1 -0
- package/lib/stores/variant/CubeJsonParse.d.ts +28 -0
- package/lib/stores/variant/CubeJsonParse.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonParse.js +53 -0
- package/lib/stores/variant/CubeJsonParse.js.map +1 -0
- package/lib/stores/variant/CubeJsonSampling.d.ts +41 -0
- package/lib/stores/variant/CubeJsonSampling.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonSampling.js +59 -0
- package/lib/stores/variant/CubeJsonSampling.js.map +1 -0
- package/lib/stores/variant/CubeJsonShape.d.ts +87 -0
- package/lib/stores/variant/CubeJsonShape.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonShape.js +209 -0
- package/lib/stores/variant/CubeJsonShape.js.map +1 -0
- package/lib/stores/variant/CubeJsonViewerState.d.ts +33 -0
- package/lib/stores/variant/CubeJsonViewerState.d.ts.map +1 -0
- package/lib/stores/variant/CubeJsonViewerState.js +53 -0
- package/lib/stores/variant/CubeJsonViewerState.js.map +1 -0
- package/package.json +10 -9
- package/src/__lib__/LegendCubeCommand.ts +7 -0
- package/src/__lib__/LegendCubeFunctionLabels.ts +41 -0
- package/src/__lib__/LegendCubeHelpText.ts +27 -1
- package/src/__lib__/LegendCubeLabels.ts +225 -16
- package/src/__lib__/LegendCubeNavigation.ts +48 -0
- package/src/__lib__/LegendCubeProjectSourceLabels.ts +26 -0
- package/src/__lib__/LegendCubeServiceLabels.ts +41 -0
- package/src/__lib__/LegendCubeTesting.ts +9 -0
- package/src/__lib__/LegendCubeTour.ts +173 -0
- package/src/__test-utils__/CubeEngineTestSupport.ts +2 -1
- package/src/__test-utils__/CubeExampleTestUtils.ts +119 -0
- package/src/__test-utils__/CubeExpressionTestUtils.ts +29 -2
- package/src/__test-utils__/CubeFunctionTestOutline.ts +78 -0
- package/src/__test-utils__/CubeLambdaCorpus.ts +137 -0
- package/src/__test-utils__/CubePageTestUtils.tsx +34 -0
- package/src/__test-utils__/CubeTestApplication.ts +25 -0
- package/src/__test-utils__/CubeVariantTestUtils.ts +103 -0
- package/src/__test-utils__/FakeCubeEngine.ts +27 -0
- package/src/__test-utils__/FakeCubeIngestCatalog.ts +18 -0
- package/src/__test-utils__/FakeCubeServiceCatalog.ts +57 -0
- package/src/components/CubeAddItems.tsx +15 -6
- package/src/components/CubeDialogTheme.ts +25 -0
- package/src/components/CubeEditor.tsx +170 -129
- package/src/components/CubeFileMenu.tsx +129 -0
- package/src/components/CubeLambdaImportBanner.tsx +97 -0
- package/src/components/CubeNodeIcon.tsx +9 -0
- package/src/components/CubeSchemaColumnsTable.tsx +7 -2
- package/src/components/canvas/CubeCanvas.tsx +65 -10
- package/src/components/canvas/CubeCanvasContextMenu.tsx +33 -2
- package/src/components/canvas/CubeCanvasElements.ts +76 -3
- package/src/components/canvas/CubeCanvasLayout.ts +1 -1
- package/src/components/canvas/CubeCanvasNode.tsx +37 -3
- package/src/components/dev-settings/CubeDevSettings.tsx +169 -0
- package/src/components/editors/CubeColumnChecklist.tsx +8 -2
- package/src/components/editors/CubeColumnPicker.tsx +9 -3
- package/src/components/editors/CubeConcatEditor.tsx +2 -2
- package/src/components/editors/CubeExplodeEditor.tsx +207 -0
- package/src/components/editors/CubeExpressionFilterEditor.tsx +210 -0
- package/src/components/editors/CubeExtendEditor.tsx +34 -21
- package/src/components/editors/CubeFilterEditor.tsx +13 -1
- package/src/components/editors/CubeFunctionSourceEditor.tsx +140 -0
- package/src/components/editors/CubeJoinEditor.tsx +23 -4
- package/src/components/editors/CubeJsonFieldsTree.tsx +316 -0
- package/src/components/editors/CubeNodeEditorPanel.tsx +22 -10
- package/src/components/editors/CubeNodeEditorPopper.tsx +9 -1
- package/src/components/editors/CubeNodeEditorRegistry.ts +15 -0
- package/src/components/editors/CubePivotEditor.tsx +277 -0
- package/src/components/editors/CubeRestrictEditor.tsx +8 -2
- package/src/components/editors/CubeServiceSourceEditor.tsx +77 -0
- package/src/components/grid/CubeColumnFormatDialog.tsx +289 -0
- package/src/components/grid/CubeDrilldownBar.tsx +219 -0
- package/src/components/grid/CubeGridRegion.tsx +190 -56
- package/src/components/grid/CubeGridValues.ts +154 -4
- package/src/components/grid/CubeJsonExplorerDialog.tsx +304 -0
- package/src/components/grid/CubeJsonViewerDialog.tsx +190 -0
- package/src/components/grid/CubeResultGrid.tsx +586 -42
- package/src/components/grid/CubeRunStatsPanel.tsx +156 -0
- package/src/components/grid/CubeServerSideGrid.tsx +213 -0
- package/src/components/grid/CubeSqlDialog.tsx +90 -0
- package/src/components/grid/CubeSqlFormat.ts +37 -0
- package/src/components/palette/CubePalette.tsx +54 -12
- package/src/components/show-pure/CubeShowPureDialog.tsx +19 -5
- package/src/components/source-picker/CubeDataProductTab.tsx +169 -75
- package/src/components/source-picker/CubeDirectConnectionTab.tsx +42 -30
- package/src/components/source-picker/CubeFunctionSteps.tsx +244 -0
- package/src/components/source-picker/CubeIngestTab.tsx +195 -83
- package/src/components/source-picker/CubeInlineModelTab.tsx +110 -81
- package/src/components/source-picker/CubePickerListItem.tsx +118 -0
- package/src/components/source-picker/CubeProjectTab.tsx +6 -3
- package/src/components/source-picker/CubeServiceTab.tsx +151 -0
- package/src/components/source-picker/CubeSourcePicker.tsx +54 -18
- package/src/components/source-picker/CubeTablePreview.tsx +49 -0
- package/src/components/spec-transfer/CubeImportPureDialog.tsx +122 -0
- package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +21 -8
- package/src/components/tour/CubeTour.tsx +317 -0
- package/src/graph-manager/CubeDataProductCatalog.ts +11 -0
- package/src/graph-manager/CubeEngine.ts +51 -1
- package/src/graph-manager/CubeEngineClientSettings.ts +64 -0
- package/src/graph-manager/CubeIngest.ts +15 -0
- package/src/graph-manager/CubeIngestCatalog.ts +33 -0
- package/src/graph-manager/CubeLakehouseRuntime.ts +43 -0
- package/src/graph-manager/CubeProjectCatalog.ts +3 -3
- package/src/graph-manager/CubeService.ts +29 -0
- package/src/graph-manager/CubeServiceCatalog.ts +35 -0
- package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +115 -5
- package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +13 -7
- package/src/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.ts +312 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +35 -9
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +6 -15
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.ts +471 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +70 -15
- package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +3 -1
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +7 -1
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +122 -7
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +9 -4
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.ts +92 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +6 -1
- package/src/index.ts +39 -2
- package/src/stores/CubeAddPlacement.ts +25 -5
- package/src/stores/CubeDevSettingsState.ts +117 -0
- package/src/stores/CubeEditorState.ts +722 -201
- package/src/stores/CubeEngineChecks.ts +240 -0
- package/src/stores/CubeExamples.ts +188 -1
- package/src/stores/CubeExamplesState.ts +13 -3
- package/src/stores/CubeExecutionState.ts +26 -57
- package/src/stores/CubeExportState.ts +196 -0
- package/src/stores/CubeExpressionFilterCheck.ts +218 -0
- package/src/stores/CubeExtendTyping.ts +6 -46
- package/src/stores/CubeFunctionRecheck.ts +97 -0
- package/src/stores/CubeGridFetcher.ts +302 -0
- package/src/stores/CubeGridQuickActions.ts +56 -23
- package/src/stores/CubeGridState.ts +450 -0
- package/src/stores/CubeHost.ts +48 -0
- package/src/stores/CubeLambdaImportState.ts +434 -0
- package/src/stores/CubeLambdaSources.ts +390 -0
- package/src/stores/CubePureText.ts +28 -0
- package/src/stores/CubeQueryRun.ts +169 -0
- package/src/stores/CubeRunStatsState.ts +91 -0
- package/src/stores/CubeRunningStepLambda.ts +62 -0
- package/src/stores/CubeServiceRecheck.ts +53 -0
- package/src/stores/CubeShowPureState.ts +51 -12
- package/src/stores/CubeSourcePickerState.ts +89 -13
- package/src/stores/CubeTourState.ts +116 -0
- package/src/stores/LegendCubeHost.ts +243 -0
- package/src/stores/LocalModelCatalog.ts +6 -1
- package/src/stores/editors/CubeExplodeDraft.ts +272 -0
- package/src/stores/editors/CubeExpressionFilterDraft.ts +389 -0
- package/src/stores/editors/CubeExtendDraft.ts +29 -0
- package/src/stores/editors/CubeFunctionDraft.ts +92 -0
- package/src/stores/editors/CubeNodeDraftRegistry.ts +34 -2
- package/src/stores/editors/CubePivotDraft.ts +355 -0
- package/src/stores/fixtures/CubeSalesDuckDbModel.ts +60 -0
- package/src/stores/fixtures/CubeTradesModel.ts +36 -1
- package/src/stores/source-picker/CubeDataProductTabState.ts +162 -35
- package/src/stores/source-picker/CubeDirectConnectionTabState.ts +246 -47
- package/src/stores/source-picker/CubeIngestTabState.ts +331 -106
- package/src/stores/source-picker/CubeInlineModelTabState.ts +514 -34
- package/src/stores/source-picker/CubeProjectTabState.ts +35 -3
- package/src/stores/source-picker/CubeServiceTabState.ts +288 -0
- package/src/stores/source-picker/CubeSourcePickerTab.ts +31 -2
- package/src/stores/variant/CubeJson.ts +229 -0
- package/src/stores/variant/CubeJsonExplorerState.ts +378 -0
- package/src/stores/variant/CubeJsonFieldsState.ts +252 -0
- package/src/stores/variant/CubeJsonOffers.ts +359 -0
- package/src/stores/variant/CubeJsonParse.ts +75 -0
- package/src/stores/variant/CubeJsonSampling.ts +90 -0
- package/src/stores/variant/CubeJsonShape.ts +279 -0
- package/src/stores/variant/CubeJsonViewerState.ts +59 -0
- package/tsconfig.json +72 -1
package/README.md
CHANGED
|
@@ -9,9 +9,13 @@ stores, the engine port with its `v1/` adapter, and the bundled model catalog. L
|
|
|
9
9
|
|
|
10
10
|
**Status:** work in progress, version 0.0.x. This version has relational tables (from a model or a direct connection to H2
|
|
11
11
|
or DuckDB), the access points of deployed data products and the data sets of deployed ingest definitions (both beta),
|
|
12
|
-
Join, Sort, Group, Filter, Restrict, Rename, Distinct, Drop, Limit, Slice, Concat, Compare Column Values (Difference),
|
|
13
|
-
window functions (Apply Window Functions)
|
|
14
|
-
|
|
12
|
+
Join, Sort, Group, Pivot (on the databases that run it), Filter, Restrict, Rename, Distinct, Drop, Limit, Slice, Concat, Compare Column Values (Difference),
|
|
13
|
+
window functions (Apply Window Functions), computed columns (Extend Columns, whose expressions the engine checks) and
|
|
14
|
+
rows kept by a Pure condition (Filter by Expression, which the engine checks too), with one model, one runtime and one database, data product project or producer deployment per query. A cube is kept only through Export and Import of its spec, marked "(dev)", until
|
|
15
|
+
the Cube store exists. A pasted model is kept in the cube. The results grid works server-side by default: a header's
|
|
16
|
+
sort and each drill-down level run on the engine, from the run on screen; local mode groups, pivots and filters the
|
|
17
|
+
run's rows in the browser. The grid exports the whole query as CSV through the engine and the rows shown as Excel, lists
|
|
18
|
+
the latest runs with their SQL, and formats number columns (a number, an ISO currency or a percent). Nothing links to the page yet, there is no redo, and Cube sends no telemetry.
|
|
15
19
|
|
|
16
20
|
## Layout
|
|
17
21
|
|
|
@@ -93,6 +97,8 @@ example is built in code, so a new one needs no saved spec; add it to `CUBE_EXAM
|
|
|
93
97
|
|
|
94
98
|
- [Hosting the page](./docs/hosting.md): what a host gives the page, the shortcuts, the stylesheet, and the dev loop.
|
|
95
99
|
- [Testing](./docs/testing.md): the test groups, the fake engine, and the tests against a real engine.
|
|
100
|
+
- [Demo](./docs/demo/README.md): a walkthrough on the sample data, its [fast notes](./docs/demo/DEMO-FAST-NOTES.md), and
|
|
101
|
+
specs to import at each step.
|
|
96
102
|
- [Adding an operation](./docs/adding-an-operation.md): the builder half of a new transform. The core half is in
|
|
97
103
|
[`@finos/legend-cube`](../legend-cube/docs/adding-an-operation.md).
|
|
98
104
|
- [The plan](../../docs/wip/legend-cube/PLAN.md) and [the known issues](../../docs/wip/legend-cube/ISSUES.md).
|
|
@@ -9,8 +9,14 @@ the icon name the node's definition gives. Join and Filter are the examples to f
|
|
|
9
9
|
(`CubeGroupEditor`, `CubeGroupDraft`), Concat for a two-input editor with fixes and one setting
|
|
10
10
|
(`CubeConcatEditor`, `CubeConcatDraft`), Partition for an editor made of the shared rows
|
|
11
11
|
(`CubePartitionEditor`, `CubePartitionDraft`), Difference for a two-input editor sharing Join's key rows
|
|
12
|
-
(`CubeDifferenceEditor`, `CubeDifferenceDraft`),
|
|
13
|
-
(`CubeExtendEditor`, `CubeExtendDraft`)
|
|
12
|
+
(`CubeDifferenceEditor`, `CubeDifferenceDraft`), Extend for an editor that asks the engine before Apply
|
|
13
|
+
(`CubeExtendEditor`, `CubeExtendDraft`), Filter by Expression for one condition the engine checks
|
|
14
|
+
(`CubeExpressionFilterEditor`, `CubeExpressionFilterDraft`), Pivot for an editor that loads values from the engine
|
|
15
|
+
through `runCubeQuery` (`CubePivotEditor`, `CubePivotDraft`), and Explode Array for one that reads a sample of a column
|
|
16
|
+
after the node's input, as Explore JSON does (`readCubeJsonSample`), greying its button with the database's reason
|
|
17
|
+
(`CubeExplodeEditor`, `CubeExplodeDraft`; PLAN §11.20). A node type a database can't run is greyed, with the
|
|
18
|
+
reason, in the palette and the Add menus (`getCubeAddDatabaseProblem` in `CubeAddPlacement.ts`): nothing to add for a
|
|
19
|
+
new type but the core's rule.
|
|
14
20
|
|
|
15
21
|
## 1. A draft
|
|
16
22
|
|
|
@@ -98,28 +104,34 @@ text (§17.9) where it has one.
|
|
|
98
104
|
|
|
99
105
|
Map the icon name of the node's definition to a legend-art icon in `NODE_ICONS` (`src/components/CubeNodeIcon.tsx`).
|
|
100
106
|
|
|
101
|
-
## A node the engine types
|
|
107
|
+
## A node the engine types or checks
|
|
102
108
|
|
|
103
|
-
Extend's types come from the engine (the core guide)
|
|
104
|
-
|
|
109
|
+
Extend's types come from the engine (the core guide), and so does the word that a Filter by Expression's condition is
|
|
110
|
+
one Boolean of a row (PLAN §11.11). `CubeEditorState` checks every such node that waits on `ERR_TYPING` or
|
|
111
|
+
`ERR_CHECKING` through a reaction (`nodesToCheck`, `checkExpressions`), in one `typeLambdas` call, outside the undo
|
|
112
|
+
history, through one path for both kinds (`src/stores/CubeEngineChecks.ts`): each kind gives a request, its lambdas
|
|
113
|
+
and how to read the engine's answers into the node to store. The
|
|
105
114
|
answer replaces the very nodes sent, in the cube shown and in the undo snapshots that give the engine the same input
|
|
106
115
|
(`replaceOutsideHistory` takes a predicate per snapshot), and an answer for a node changed meanwhile is dropped. Each
|
|
107
116
|
node is typed as a chain after its input's relation, one chain per first k columns (`src/stores/CubeExtendTyping.ts`),
|
|
108
|
-
so a failure names its column.
|
|
117
|
+
so a failure names its column. A condition is checked as its input's relation filtered with it, and typed alone as an
|
|
118
|
+
extend column under a name no input column has, which names its type when it isn't one Boolean
|
|
119
|
+
(`src/stores/CubeExpressionFilterCheck.ts`).
|
|
109
120
|
|
|
110
121
|
A chain's types depend on what the engine sees of the input, which Cube's schema doesn't fully show (an Extend's
|
|
111
122
|
columns are nullable to Cube, `[1]` to the engine after `toOne()`). So each typing records `upstream`, a digest of the
|
|
112
123
|
input's emitted relation and the model (`getCubeExtendUpstream`), and the editor adds its own query rule to
|
|
113
|
-
`analysis` (`
|
|
114
|
-
again. Execute reads that validity as well as the emitter's `canEmit`, since the emitter doesn't know the rule. The
|
|
124
|
+
`analysis` (`createStaleCubeEngineCheckRule`): a node whose digest differs waits on `ERR_TYPING` or `ERR_CHECKING`
|
|
125
|
+
and is checked again. Execute reads that validity as well as the emitter's `canEmit`, since the emitter doesn't know the rule. The
|
|
115
126
|
digest covers the whole relation, filter values included, so any edit above an Extend has it typed again. A typing
|
|
116
127
|
without a digest, as one loaded, is used as it is; on import every Extend is typed once more, as sources are checked
|
|
117
128
|
again, which records one. When the engine can't be reached, a typing still current for its input is kept, with a
|
|
118
|
-
warning. Every way out of `
|
|
129
|
+
warning. Every way out of `checkExpressions` leaves the node not stale, or the reaction would loop.
|
|
119
130
|
|
|
120
|
-
The canvas shows a waiting node as resolving (`isTypingNode`), the header says so, and the
|
|
121
|
-
out of its problems. A new node type the engine types
|
|
122
|
-
|
|
131
|
+
The canvas shows a waiting node as resolving (`isTypingNode`), the header says so ("checking expressions"), and the
|
|
132
|
+
panel leaves the waiting marker out of its problems. A new node type the engine types or checks joins
|
|
133
|
+
`CubeEngineCheckedNode` and gives `buildCubeEngineCheckRequest` its request, so the reaction, the stale rule, the undo
|
|
134
|
+
snapshots, the kept check offline and the import serve it too; its draft joins F10 in `CubeEditorState`.
|
|
123
135
|
|
|
124
136
|
## Warnings
|
|
125
137
|
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Demo fast notes
|
|
2
|
+
|
|
3
|
+
## Live build (Trades)
|
|
4
|
+
|
|
5
|
+
1. **Examples → Trades → Start a new cube**: tick **TRADES**, **DESKS** → **Add 2**
|
|
6
|
+
2. **Drop Join Another Input** (lands after TRADES = Left); drag **DESKS → Right**
|
|
7
|
+
- Join columns: **DESK_ID** = **ID** → Apply
|
|
8
|
+
3. **Drop Group by Column**
|
|
9
|
+
- Group by: **DESK**, **REGION**
|
|
10
|
+
- Agg 1: **NOTIONAL_USD** · Sum · `TOTAL_NOTIONAL_USD`
|
|
11
|
+
- Agg 2: Count Rows · `TRADE_COUNT`
|
|
12
|
+
- Apply · **F9** → 6 rows
|
|
13
|
+
4. **Drop Apply Window Functions**
|
|
14
|
+
- Partition: **REGION**
|
|
15
|
+
- Sort: **TOTAL_NOTIONAL_USD** · Descending
|
|
16
|
+
- Function: Rank · `RANK_IN_REGION`
|
|
17
|
+
- Apply · **F9** → Commodities 1, Rates 2, Equities Cash 3 (Americas)
|
|
18
|
+
5. **Drop Extend Columns**
|
|
19
|
+
- Name: `NOTIONAL_MM`
|
|
20
|
+
- Expression: `x | $x.TOTAL_NOTIONAL_USD / 1000000` → Validate
|
|
21
|
+
- Apply · **F9** → Commodities 31.10
|
|
22
|
+
6. **Drop Filter by Expression**
|
|
23
|
+
- `x | $x.NOTIONAL_MM > 25` → Validate
|
|
24
|
+
- Apply · **F9** → 4 rows
|
|
25
|
+
7. **Show SQL** → Close · **Export** (fold the JSON)
|
|
26
|
+
|
|
27
|
+
Duplicate-column error on a Join → open it → **Rename them**.
|
|
28
|
+
|
|
29
|
+
**End spec:** [specs/trades-desks-5-final.cube.json](specs/trades-desks-5-final.cube.json) (Import → F9 → 4 rows).
|
|
30
|
+
Steps in between: `specs/trades-desks-1-joined` … `-4-extended`.
|
|
31
|
+
|
|
32
|
+
## Grid
|
|
33
|
+
|
|
34
|
+
1. **Examples → Notional by desk and asset class**; right-click `join102` → **Select** → Execute (400 rows)
|
|
35
|
+
2. Click **NOTIONAL_USD** header ×2
|
|
36
|
+
3. Right-click REGION cell → **Drilldown by "REGION"**; DESK cell → **Drilldown by "DESK"**
|
|
37
|
+
4. **Group rows…**: ids → Nothing, PRICE → Average
|
|
38
|
+
5. Expand Americas → Commodities
|
|
39
|
+
6. NOTIONAL_USD cell → **Format Column…**: Currency, 0 places
|
|
40
|
+
7. **Runs** · Export ▸ **CSV (whole query)** · **Local**
|
|
41
|
+
|
|
42
|
+
## Pivot (DuckDB)
|
|
43
|
+
|
|
44
|
+
1. **Connect to a source → Direct Connection**: DuckDB, paste the setup SQL below
|
|
45
|
+
- Test connection → schema `demo` → **sales** → Add → **F9** (10 rows)
|
|
46
|
+
2. **Drop Pivot by Column**
|
|
47
|
+
- Pivot column: **year** → Load values → All
|
|
48
|
+
- Rows: **country**
|
|
49
|
+
- Aggregation: Sum · **amount**
|
|
50
|
+
- Apply · **F9** → 4 rows (France 120 · 80 · 180)
|
|
51
|
+
|
|
52
|
+
Setup SQL:
|
|
53
|
+
|
|
54
|
+
```sql
|
|
55
|
+
drop schema if exists demo cascade;
|
|
56
|
+
create schema demo;
|
|
57
|
+
create table demo.sales (id INTEGER PRIMARY KEY, country VARCHAR(10), product VARCHAR(10), year INTEGER, amount INTEGER, price DOUBLE);
|
|
58
|
+
insert into demo.sales values (1, 'France', 'Tea', 2022, 120, 2.5), (2, 'France', 'Coffee', 2023, 80, 3.1), (3, 'France', 'Tea', 2024, 150, 2.7), (4, 'Germany', 'Tea', 2022, 90, 2.4), (5, 'Germany', 'Coffee', 2022, 60, 3.0), (6, 'Germany', 'Coffee', 2024, 110, 3.3), (7, 'Japan', 'Tea', 2023, 200, 2.9), (8, 'Japan', 'Tea', 2024, 40, 2.9), (9, 'France', 'Coffee', 2024, 30, 3.2), (10, 'Spain', 'Coffee', 2022, 70, 3.0);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Fallback: [specs/duckdb-sales-pivot.cube.json](specs/duckdb-sales-pivot.cube.json).
|
|
62
|
+
|
|
63
|
+
## Function
|
|
64
|
+
|
|
65
|
+
1. **Function** (palette) → Dataset Trades → **tradesAbove** · `1000000` → Add → **F9** → 44 rows
|
|
66
|
+
|
|
67
|
+
**New** (header) clears the cube; Undo brings it back.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Legend Cube demo kit
|
|
2
|
+
|
|
3
|
+
A walkthrough of Legend Cube on its sample data, and the specs to fall back on. Every number below is what the
|
|
4
|
+
engine returned when these files were made (2026-10-13); the sample data is fixed, so they match on the day. The
|
|
5
|
+
short version is [DEMO-FAST-NOTES.md](./DEMO-FAST-NOTES.md).
|
|
6
|
+
|
|
7
|
+
| File | What it is |
|
|
8
|
+
| ----------------------------------------- | ---------------------------------------------------------------------------- |
|
|
9
|
+
| `specs/trades-desks-1-joined.cube.json` | Act 2 after the Join: TRADES and DESKS joined on `DESK_ID` = `ID` (400 rows) |
|
|
10
|
+
| `specs/trades-desks-2-grouped.cube.json` | … then the Group by DESK and REGION (6 rows) |
|
|
11
|
+
| `specs/trades-desks-3-ranked.cube.json` | … then the Rank within region (6 rows) |
|
|
12
|
+
| `specs/trades-desks-4-extended.cube.json` | … then the calculated column `NOTIONAL_MM` (6 rows) |
|
|
13
|
+
| `specs/trades-desks-5-final.cube.json` | … then Filter by Expression `NOTIONAL_MM > 25`: the finished cube (4 rows) |
|
|
14
|
+
| `specs/duckdb-sales-pivot.cube.json` | Act 4's DuckDB cube with the Pivot, its setup SQL inside (4 rows) |
|
|
15
|
+
|
|
16
|
+
**Fallback:** if a live step goes wrong, **Import** the spec of the step before or after it and press **F9**. An
|
|
17
|
+
imported cube opens without running.
|
|
18
|
+
|
|
19
|
+
## Before the demo
|
|
20
|
+
|
|
21
|
+
- A local engine, and the Query dev server (`yarn dev:query`) with Cube enabled (see [hosting](../hosting.md)).
|
|
22
|
+
- Open each example once to warm the engine up.
|
|
23
|
+
- Browser at about 1440×900, 100% zoom, a fresh `/query/cube` page.
|
|
24
|
+
|
|
25
|
+
## 1. An example (about 1 min)
|
|
26
|
+
|
|
27
|
+
1. **Examples → Top customers by orders**: it opens and runs, 10 rows, **Save-a-lot Markets** first with 31 orders.
|
|
28
|
+
2. Click the **Group** step: its editor opens under it. **Escape** closes it.
|
|
29
|
+
|
|
30
|
+
## 2. A live build on Trades (about 3 min)
|
|
31
|
+
|
|
32
|
+
The question: which desk trades most, and how does each rank in its region?
|
|
33
|
+
|
|
34
|
+
1. **Examples → Trades → Start a new cube**. Tick **TRADES** and **DESKS** (new: several tables at once), then
|
|
35
|
+
**Add 2**. TRADES, ticked first, is the step that runs.
|
|
36
|
+
- The source dialog's **← Examples** goes back to the examples.
|
|
37
|
+
2. Drag **Join Another Input** onto the canvas: it lands after TRADES (Left). Drag DESKS' dot to the Join's lower
|
|
38
|
+
input (Right). The Join is red; its tooltip says _"Left join columns cannot be empty."_ Open it, **Add join
|
|
39
|
+
columns**: **DESK_ID** = **ID**, **Apply**. _(Fallback: `trades-desks-1-joined`.)_
|
|
40
|
+
3. **Add Items ▾ → Group by Column**: tick **DESK** and **REGION**; aggregation 1 **NOTIONAL_USD**, **Sum**, named
|
|
41
|
+
**TOTAL_NOTIONAL_USD**; **Add aggregation**: **Count Rows** named **TRADE_COUNT**. **Apply**, **F9**: 6 desks.
|
|
42
|
+
_(`trades-desks-2-grouped`.)_
|
|
43
|
+
4. **Add Items ▾ → Apply Window Functions**: partition by **REGION**; **Add sort column** **TOTAL_NOTIONAL_USD**
|
|
44
|
+
**Descending**; function **Rank** named **RANK_IN_REGION**. **Apply**, **F9**: Americas is Commodities 1, Rates 2,
|
|
45
|
+
Equities Cash 3; Europe is Equity Derivatives 1, Credit 2; Asia is FX 1. _(`trades-desks-3-ranked`.)_
|
|
46
|
+
5. **Add Items ▾ → Extend Columns**: name **NOTIONAL_MM**, expression `x | $x.TOTAL_NOTIONAL_USD / 1000000`,
|
|
47
|
+
**Validate** (_"Float, optional"_), **Apply**, **F9**: Commodities 31,102,024.71 → **31.10**.
|
|
48
|
+
_(`trades-desks-4-extended`.)_
|
|
49
|
+
6. **Add Items ▾ → Filter by Expression**: `x | $x.NOTIONAL_MM > 25`, **Validate**, **Apply**, **F9**: **4 desks**
|
|
50
|
+
(Commodities, Equity Derivatives, FX, Rates), their ranks unchanged. _(`trades-desks-5-final`.)_
|
|
51
|
+
7. **Show SQL**: the formatted SQL in a dialog: the `rank() over (partition by …)` inside, the `> 25` filter outside.
|
|
52
|
+
**Copy SQL**, **Close**.
|
|
53
|
+
8. **Export**: the spec as JSON, each object folding from the gutter.
|
|
54
|
+
|
|
55
|
+
If two inputs share a column name that isn't a join key, the Join says _"Duplicate column names between inputs are not
|
|
56
|
+
supported…"_: open it and click **Rename them**.
|
|
57
|
+
|
|
58
|
+
## 3. The results grid (about 2 min)
|
|
59
|
+
|
|
60
|
+
1. **Examples → Notional by desk and asset class**. Right-click the join step (`join102`) → **Select**, then
|
|
61
|
+
**Execute**: 400 trades. **Hide graph** for room.
|
|
62
|
+
2. Click the **NOTIONAL_USD** header twice: sorted descending, on the engine (Runs goes up by 2).
|
|
63
|
+
3. Right-click a REGION cell → **Drilldown by "REGION"**: Americas (189), Asia (68), Europe (143). Right-click a DESK
|
|
64
|
+
cell → **Drilldown by "DESK"**.
|
|
65
|
+
4. **Group rows…**: set the id columns to **Nothing** and **PRICE** to **Average**; **Close**.
|
|
66
|
+
5. Expand **Americas**, then **Commodities** (65): each level is its own query.
|
|
67
|
+
6. Right-click a NOTIONAL_USD cell → **Format Column…**: **Currency**, decimal places **0**, **Apply**:
|
|
68
|
+
$81,410,352 for Americas.
|
|
69
|
+
7. **Runs**: each run, sort and level fetched, with its SQL.
|
|
70
|
+
8. Right-click → **Export ▸ CSV (whole query)**: `Notional_by_desk_and_asset_class.csv`, a header and 400 trades.
|
|
71
|
+
9. **Local**: ag-grid's row groups, filters and the Columns panel with **Pivot Mode**. Back to **Server-side**.
|
|
72
|
+
|
|
73
|
+
## 4. Pivot (about 1.5 min)
|
|
74
|
+
|
|
75
|
+
1. On any sample cube (H2), point at **Pivot by Column** in the palette: greyed, _"Pivot is not supported on H2."_
|
|
76
|
+
2. New page → **Connect to a source → Direct Connection**: Database **DuckDB**, paste the setup SQL below into
|
|
77
|
+
**Setup SQL**, **Test connection**, schema **demo**, pick **sales**, **Add**, **F9**: 10 sales.
|
|
78
|
+
3. Palette **Pivot by Column**: pivot column **year**, **Load values** (2022, 2023, 2024), **All**, row column
|
|
79
|
+
**country**, aggregation **Sum** of **amount**. **Apply**, **F9**: a row per country, a column per year: France
|
|
80
|
+
120, 80, 180; Germany 150, –, 110; Japan –, 200, 40; Spain 70, –, –.
|
|
81
|
+
4. _(Fallback: Import `duckdb-sales-pivot.cube.json`, F9.)_
|
|
82
|
+
|
|
83
|
+
The DuckDB setup SQL:
|
|
84
|
+
|
|
85
|
+
```sql
|
|
86
|
+
drop schema if exists demo cascade;
|
|
87
|
+
create schema demo;
|
|
88
|
+
create table demo.sales (id INTEGER PRIMARY KEY, country VARCHAR(10), product VARCHAR(10), year INTEGER, amount INTEGER, price DOUBLE);
|
|
89
|
+
insert into demo.sales values (1, 'France', 'Tea', 2022, 120, 2.5), (2, 'France', 'Coffee', 2023, 80, 3.1), (3, 'France', 'Tea', 2024, 150, 2.7), (4, 'Germany', 'Tea', 2022, 90, 2.4), (5, 'Germany', 'Coffee', 2022, 60, 3.0), (6, 'Germany', 'Coffee', 2024, 110, 3.3), (7, 'Japan', 'Tea', 2023, 200, 2.9), (8, 'Japan', 'Tea', 2024, 40, 2.9), (9, 'France', 'Coffee', 2024, 30, 3.2), (10, 'Spain', 'Coffee', 2022, 70, 3.0);
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## 5. A function as a source (about 1 min)
|
|
93
|
+
|
|
94
|
+
1. Palette **Function**: Dataset **Trades**, Read **Functions**: `tradesAbove(minNotionalUsd: Float)` and
|
|
95
|
+
`deskBook(desk, side?)`, which runs on its own runtime.
|
|
96
|
+
2. Pick **tradesAbove**, value **1000000**, **Add**, **F9**: **44 trades** above a million dollars.
|
|
97
|
+
|
|
98
|
+
## Not shown, and why
|
|
99
|
+
|
|
100
|
+
- **Data products:** the data product servers don't run locally. The Data Product tab now takes several access points
|
|
101
|
+
at once, like tables.
|
|
102
|
+
- **Services:** work in progress.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"formatVersion": 1,
|
|
3
|
+
"context": {
|
|
4
|
+
"model": {
|
|
5
|
+
"_type": "cubeDirectConnection",
|
|
6
|
+
"connection": {
|
|
7
|
+
"_type": "RelationalDatabaseConnection",
|
|
8
|
+
"type": "DuckDB",
|
|
9
|
+
"databaseType": "DuckDB",
|
|
10
|
+
"datasourceSpecification": {
|
|
11
|
+
"_type": "duckDB",
|
|
12
|
+
"path": "",
|
|
13
|
+
"testDataSetupSqls": [
|
|
14
|
+
"drop schema if exists demo cascade",
|
|
15
|
+
"create schema demo",
|
|
16
|
+
"create table demo.sales (id INTEGER PRIMARY KEY, country VARCHAR(10), product VARCHAR(10), year INTEGER, amount INTEGER, price DOUBLE)",
|
|
17
|
+
"insert into demo.sales values (1, 'France', 'Tea', 2022, 120, 2.5), (2, 'France', 'Coffee', 2023, 80, 3.1), (3, 'France', 'Tea', 2024, 150, 2.7), (4, 'Germany', 'Tea', 2022, 90, 2.4), (5, 'Germany', 'Coffee', 2022, 60, 3.0), (6, 'Germany', 'Coffee', 2024, 110, 3.3), (7, 'Japan', 'Tea', 2023, 200, 2.9), (8, 'Japan', 'Tea', 2024, 40, 2.9), (9, 'France', 'Coffee', 2024, 30, 3.2), (10, 'Spain', 'Coffee', 2022, 70, 3.0)"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"authenticationStrategy": {
|
|
21
|
+
"_type": "test"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"runtime": "cube::direct::Runtime"
|
|
26
|
+
},
|
|
27
|
+
"query": {
|
|
28
|
+
"selected": "pivot101",
|
|
29
|
+
"nodes": [
|
|
30
|
+
{
|
|
31
|
+
"kind": "relational",
|
|
32
|
+
"id": "relational101",
|
|
33
|
+
"database": "cube::direct::Database",
|
|
34
|
+
"schema": "\"demo\"",
|
|
35
|
+
"table": "\"sales\"",
|
|
36
|
+
"schemaSnapshot": [
|
|
37
|
+
{
|
|
38
|
+
"name": "id",
|
|
39
|
+
"type": {
|
|
40
|
+
"path": "meta::pure::precisePrimitives::Int"
|
|
41
|
+
},
|
|
42
|
+
"nullable": false
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "country",
|
|
46
|
+
"type": {
|
|
47
|
+
"path": "meta::pure::precisePrimitives::Varchar",
|
|
48
|
+
"params": [0]
|
|
49
|
+
},
|
|
50
|
+
"nullable": true
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "product",
|
|
54
|
+
"type": {
|
|
55
|
+
"path": "meta::pure::precisePrimitives::Varchar",
|
|
56
|
+
"params": [0]
|
|
57
|
+
},
|
|
58
|
+
"nullable": true
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "year",
|
|
62
|
+
"type": {
|
|
63
|
+
"path": "meta::pure::precisePrimitives::Int"
|
|
64
|
+
},
|
|
65
|
+
"nullable": true
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "amount",
|
|
69
|
+
"type": {
|
|
70
|
+
"path": "meta::pure::precisePrimitives::Int"
|
|
71
|
+
},
|
|
72
|
+
"nullable": true
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "price",
|
|
76
|
+
"type": {
|
|
77
|
+
"path": "meta::pure::precisePrimitives::Double"
|
|
78
|
+
},
|
|
79
|
+
"nullable": true
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"kind": "pivot",
|
|
85
|
+
"id": "pivot101",
|
|
86
|
+
"inputs": ["relational101"],
|
|
87
|
+
"rows": ["country"],
|
|
88
|
+
"column": "year",
|
|
89
|
+
"values": [
|
|
90
|
+
{
|
|
91
|
+
"kind": "integer",
|
|
92
|
+
"value": "2022"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"kind": "integer",
|
|
96
|
+
"value": "2023"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"kind": "integer",
|
|
100
|
+
"value": "2024"
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"aggregation": {
|
|
104
|
+
"column": "amount",
|
|
105
|
+
"function": "Sum"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
{
|
|
2
|
+
"formatVersion": 1,
|
|
3
|
+
"context": {
|
|
4
|
+
"model": {
|
|
5
|
+
"_type": "text",
|
|
6
|
+
"code": "###Relational\nDatabase cube::samples::trades::TradesDatabase\n(\n Schema TRADES_SAMPLE\n (\n Table DESKS\n (\n ID INTEGER PRIMARY KEY,\n DESK VARCHAR(20) NOT NULL,\n REGION VARCHAR(10) NOT NULL\n )\n Table INSTRUMENTS\n (\n ID INTEGER PRIMARY KEY,\n SYMBOL VARCHAR(10) NOT NULL,\n INSTRUMENT VARCHAR(30) NOT NULL,\n ASSET_CLASS VARCHAR(10) NOT NULL,\n CURRENCY VARCHAR(3) NOT NULL\n )\n Table TRADES\n (\n TRADE_ID INTEGER PRIMARY KEY,\n TRADE_DATE DATE NOT NULL,\n DESK_ID INTEGER NOT NULL,\n INSTRUMENT_ID INTEGER NOT NULL,\n SIDE VARCHAR(4) NOT NULL,\n QUANTITY INTEGER NOT NULL,\n PRICE DECIMAL(14,4) NOT NULL,\n NOTIONAL_USD DECIMAL(18,2) NOT NULL\n )\n )\n\n Join TRADE_DESK(TRADES_SAMPLE.TRADES.DESK_ID = TRADES_SAMPLE.DESKS.ID)\n Join TRADE_INSTRUMENT(TRADES_SAMPLE.TRADES.INSTRUMENT_ID = TRADES_SAMPLE.INSTRUMENTS.ID)\n)\n\n\n###Connection\nRelationalDatabaseConnection cube::samples::trades::TradesConnection\n{\n store: cube::samples::trades::TradesDatabase;\n type: H2;\n specification: LocalH2\n {\n testDataSetupSqls: [\n 'drop schema if exists TRADES_SAMPLE cascade',\n 'create schema TRADES_SAMPLE',\n 'create table TRADES_SAMPLE.DESKS (ID INTEGER PRIMARY KEY, DESK VARCHAR(20) NOT NULL, REGION VARCHAR(10) NOT NULL)',\n 'insert into TRADES_SAMPLE.DESKS values (1, \\'Equities Cash\\', \\'Americas\\'), (2, \\'Equity Derivatives\\', \\'Europe\\'), (3, \\'Rates\\', \\'Americas\\'), (4, \\'Credit\\', \\'Europe\\'), (5, \\'FX\\', \\'Asia\\'), (6, \\'Commodities\\', \\'Americas\\')',\n 'create table TRADES_SAMPLE.INSTRUMENTS (ID INTEGER PRIMARY KEY, SYMBOL VARCHAR(10) NOT NULL, INSTRUMENT VARCHAR(30) NOT NULL, ASSET_CLASS VARCHAR(10) NOT NULL, CURRENCY VARCHAR(3) NOT NULL)',\n 'insert into TRADES_SAMPLE.INSTRUMENTS values (1, \\'ACME\\', \\'Acme Industries\\', \\'Equity\\', \\'USD\\'), (2, \\'GLBX\\', \\'Globex Corp\\', \\'Equity\\', \\'USD\\'), (3, \\'INIT\\', \\'Initech\\', \\'Equity\\', \\'USD\\'), (4, \\'UMBR\\', \\'Umbrella Holdings\\', \\'Equity\\', \\'EUR\\'), (5, \\'STRK\\', \\'Stark Works\\', \\'Equity\\', \\'EUR\\'), (6, \\'UST10\\', \\'Treasury 10Y\\', \\'Bond\\', \\'USD\\'), (7, \\'UST2\\', \\'Treasury 2Y\\', \\'Bond\\', \\'USD\\'), (8, \\'BUND10\\', \\'Bund 10Y\\', \\'Bond\\', \\'EUR\\'), (9, \\'ACME28\\', \\'Acme 4.5% 2028\\', \\'Bond\\', \\'USD\\'), (10, \\'EURUSD\\', \\'Euro / Dollar\\', \\'FX\\', \\'USD\\'), (11, \\'USDJPY\\', \\'Dollar / Yen\\', \\'FX\\', \\'JPY\\'), (12, \\'GBPUSD\\', \\'Pound / Dollar\\', \\'FX\\', \\'USD\\'), (13, \\'GOLD\\', \\'Gold\\', \\'Commodity\\', \\'USD\\'), (14, \\'BRENT\\', \\'Brent Crude\\', \\'Commodity\\', \\'USD\\'), (15, \\'COPPER\\', \\'Copper\\', \\'Commodity\\', \\'USD\\')',\n 'create table TRADES_SAMPLE.TRADES (TRADE_ID INTEGER PRIMARY KEY, TRADE_DATE DATE NOT NULL, DESK_ID INTEGER NOT NULL, INSTRUMENT_ID INTEGER NOT NULL, SIDE VARCHAR(4) NOT NULL, QUANTITY INTEGER NOT NULL, PRICE DECIMAL(14,4) NOT NULL, NOTIONAL_USD DECIMAL(18,2) NOT NULL)',\n 'insert into TRADES_SAMPLE.TRADES values (1, DATE \\'2026-01-27\\', 1, 1, \\'BUY\\', 1988, 180.2454, 358327.86), (2, DATE \\'2026-03-16\\', 2, 15, \\'BUY\\', 285, 4.3514, 1240.15), (3, DATE \\'2026-04-20\\', 6, 14, \\'SELL\\', 533, 79.8848, 42578.60), (4, DATE \\'2026-05-04\\', 6, 13, \\'SELL\\', 183, 2374.1961, 434477.89), (5, DATE \\'2026-01-26\\', 5, 11, \\'SELL\\', 684501, 150.7060, 691161.33), (6, DATE \\'2026-04-20\\', 2, 15, \\'SELL\\', 915, 4.2042, 3846.84), (7, DATE \\'2026-02-27\\', 1, 4, \\'SELL\\', 2192, 92.2117, 218298.29), (8, DATE \\'2026-01-08\\', 6, 15, \\'SELL\\', 971, 4.1100, 3990.81), (9, DATE \\'2026-02-17\\', 4, 6, \\'BUY\\', 460, 95.8977, 44112.94), (10, DATE \\'2026-05-18\\', 6, 13, \\'BUY\\', 253, 2326.9778, 588725.38), (11, DATE \\'2026-03-16\\', 1, 5, \\'BUY\\', 2138, 295.5412, 682416.45), (12, DATE \\'2026-03-24\\', 6, 13, \\'SELL\\', 85, 2266.6839, 192668.13), (13, DATE \\'2026-06-23\\', 1, 1, \\'BUY\\', 1842, 181.0524, 333498.52), (14, DATE \\'2026-04-24\\', 4, 9, \\'SELL\\', 1966, 97.1767, 191049.39), (15, DATE \\'2026-02-02\\', 3, 12, \\'SELL\\', 112534, 1.2114, 136323.69), (16, DATE \\'2026-03-30\\', 5, 11, \\'BUY\\', 857165, 149.3481, 857706.96), (17, DATE \\'2026-04-20\\', 2, 2, \\'SELL\\', 430, 61.2826, 26351.52), (18, DATE \\'2026-04-20\\', 1, 1, \\'SELL\\', 1875, 191.2751, 358640.81), (19, DATE \\'2026-04-17\\', 1, 1, \\'SELL\\', 2083, 181.0241, 377073.20), (20, DATE \\'2026-03-24\\', 4, 6, \\'BUY\\', 1589, 97.9857, 155699.28), (21, DATE \\'2026-02-23\\', 6, 12, \\'SELL\\', 716973, 1.2287, 880944.73), (22, DATE \\'2026-06-26\\', 1, 2, \\'SELL\\', 1192, 64.9309, 77397.63), (23, DATE \\'2026-06-25\\', 3, 8, \\'SELL\\', 1828, 104.9003, 207098.37), (24, DATE \\'2026-02-23\\', 5, 12, \\'SELL\\', 374446, 1.3038, 488202.69), (25, DATE \\'2026-05-22\\', 6, 12, \\'BUY\\', 24188, 1.3220, 31976.54), (26, DATE \\'2026-01-06\\', 4, 7, \\'SELL\\', 53, 96.0875, 5092.64), (27, DATE \\'2026-03-05\\', 5, 12, \\'SELL\\', 470426, 1.2506, 588314.76), (28, DATE \\'2026-02-02\\', 4, 6, \\'BUY\\', 960, 103.4019, 99265.82), (29, DATE \\'2026-02-12\\', 3, 6, \\'BUY\\', 1103, 102.1229, 112641.56), (30, DATE \\'2026-02-17\\', 4, 7, \\'BUY\\', 1149, 97.6100, 112153.89), (31, DATE \\'2026-02-11\\', 2, 5, \\'SELL\\', 1231, 316.7103, 421060.01), (32, DATE \\'2026-03-05\\', 4, 8, \\'BUY\\', 350, 98.4764, 37224.08), (33, DATE \\'2026-01-22\\', 5, 11, \\'BUY\\', 93598, 153.4066, 96202.29), (34, DATE \\'2026-04-06\\', 5, 10, \\'SELL\\', 970828, 1.0343, 1004127.40), (35, DATE \\'2026-01-06\\', 5, 11, \\'BUY\\', 729753, 146.3302, 715458.85), (36, DATE \\'2026-02-19\\', 1, 4, \\'BUY\\', 3160, 100.3738, 342555.70), (37, DATE \\'2026-05-22\\', 4, 6, \\'BUY\\', 195, 99.1184, 19328.09), (38, DATE \\'2026-01-16\\', 6, 12, \\'SELL\\', 911331, 1.2794, 1165956.88), (39, DATE \\'2026-01-22\\', 6, 15, \\'BUY\\', 260, 4.1129, 1069.35), (40, DATE \\'2026-05-13\\', 1, 3, \\'SELL\\', 1853, 24.1691, 44785.34), (41, DATE \\'2026-05-27\\', 4, 7, \\'BUY\\', 969, 95.2850, 92331.17), (42, DATE \\'2026-05-20\\', 3, 12, \\'SELL\\', 735699, 1.2716, 935514.85), (43, DATE \\'2026-01-01\\', 4, 8, \\'SELL\\', 163, 96.2890, 16950.72), (44, DATE \\'2026-02-27\\', 6, 10, \\'SELL\\', 373588, 1.0685, 399178.78), (45, DATE \\'2026-05-11\\', 2, 1, \\'SELL\\', 922, 185.8442, 171348.35), (46, DATE \\'2026-01-22\\', 3, 7, \\'BUY\\', 1964, 95.7410, 188035.32), (47, DATE \\'2026-05-04\\', 4, 8, \\'BUY\\', 277, 100.0080, 29918.39), (48, DATE \\'2026-06-15\\', 6, 14, \\'BUY\\', 454, 80.0959, 36363.54), (49, DATE \\'2026-03-23\\', 2, 4, \\'SELL\\', 1373, 99.9519, 148212.68), (50, DATE \\'2026-06-22\\', 6, 12, \\'BUY\\', 462334, 1.3046, 603160.94), (51, DATE \\'2026-03-30\\', 2, 14, \\'BUY\\', 456, 79.9388, 36452.09), (52, DATE \\'2026-05-12\\', 2, 1, \\'BUY\\', 1108, 181.0392, 200591.43), (53, DATE \\'2026-02-02\\', 4, 6, \\'SELL\\', 1263, 99.3245, 125446.84), (54, DATE \\'2026-05-14\\', 3, 10, \\'SELL\\', 980434, 1.0644, 1043573.95), (55, DATE \\'2026-02-25\\', 6, 14, \\'SELL\\', 565, 78.8410, 44545.17), (56, DATE \\'2026-02-12\\', 5, 11, \\'SELL\\', 206146, 145.5407, 201017.64), (57, DATE \\'2026-05-21\\', 6, 13, \\'BUY\\', 262, 2273.4484, 595643.48), (58, DATE \\'2026-03-11\\', 5, 12, \\'SELL\\', 128966, 1.3011, 167797.66), (59, DATE \\'2026-02-05\\', 3, 10, \\'SELL\\', 950036, 1.0532, 1000577.92), (60, DATE \\'2026-06-15\\', 5, 12, \\'SELL\\', 651801, 1.3172, 858552.28), (61, DATE \\'2026-05-19\\', 5, 10, \\'SELL\\', 500670, 1.0490, 525202.83), (62, DATE \\'2026-04-24\\', 6, 12, \\'SELL\\', 58609, 1.2430, 72850.99), (63, DATE \\'2026-01-19\\', 5, 12, \\'BUY\\', 733789, 1.2741, 934920.56), (64, DATE \\'2026-05-06\\', 5, 12, \\'SELL\\', 10908, 1.2426, 13554.28), (65, DATE \\'2026-03-16\\', 4, 6, \\'BUY\\', 398, 100.0161, 39806.41), (66, DATE \\'2026-06-11\\', 6, 14, \\'SELL\\', 704, 84.3082, 59352.97), (67, DATE \\'2026-03-10\\', 1, 5, \\'BUY\\', 952, 298.3861, 306788.65), (68, DATE \\'2026-01-21\\', 4, 8, \\'BUY\\', 1437, 103.2999, 160317.31), (69, DATE \\'2026-05-04\\', 4, 8, \\'BUY\\', 1754, 98.6905, 186951.39), (70, DATE \\'2026-03-20\\', 2, 2, \\'BUY\\', 2247, 66.3178, 149016.10), (71, DATE \\'2026-04-02\\', 2, 14, \\'SELL\\', 669, 85.3384, 57091.39), (72, DATE \\'2026-03-04\\', 1, 1, \\'SELL\\', 3099, 190.0419, 588939.85), (73, DATE \\'2026-06-15\\', 1, 3, \\'SELL\\', 1702, 24.1905, 41172.23), (74, DATE \\'2026-06-05\\', 6, 14, \\'BUY\\', 974, 83.1397, 80978.07), (75, DATE \\'2026-05-11\\', 4, 8, \\'BUY\\', 1177, 99.1855, 126080.64), (76, DATE \\'2026-03-09\\', 2, 13, \\'SELL\\', 660, 2327.1055, 1535889.63), (77, DATE \\'2026-01-26\\', 2, 14, \\'BUY\\', 781, 82.8449, 64701.87), (78, DATE \\'2026-04-10\\', 3, 11, \\'BUY\\', 745503, 148.4396, 741436.52), (79, DATE \\'2026-04-21\\', 2, 5, \\'SELL\\', 4837, 298.3668, 1558656.23), (80, DATE \\'2026-04-08\\', 6, 10, \\'SELL\\', 159347, 1.0720, 170819.98), (81, DATE \\'2026-02-23\\', 5, 10, \\'SELL\\', 678391, 1.1139, 755659.73), (82, DATE \\'2026-03-10\\', 1, 4, \\'BUY\\', 2513, 91.6710, 248798.76), (83, DATE \\'2026-05-04\\', 5, 12, \\'BUY\\', 362922, 1.2284, 445813.38), (84, DATE \\'2026-02-11\\', 5, 10, \\'SELL\\', 480051, 1.0361, 497380.84), (85, DATE \\'2026-04-03\\', 1, 2, \\'BUY\\', 4527, 62.1340, 281280.62), (86, DATE \\'2026-03-11\\', 6, 13, \\'BUY\\', 547, 2404.6109, 1315322.16), (87, DATE \\'2026-03-02\\', 5, 11, \\'SELL\\', 47862, 153.9900, 49380.80), (88, DATE \\'2026-06-30\\', 5, 10, \\'BUY\\', 962637, 1.0375, 998735.89), (89, DATE \\'2026-06-24\\', 3, 6, \\'SELL\\', 1531, 97.7766, 149695.97), (90, DATE \\'2026-05-11\\', 2, 2, \\'BUY\\', 1116, 61.7075, 68865.57), (91, DATE \\'2026-05-26\\', 5, 10, \\'SELL\\', 940560, 1.0876, 1022953.06), (92, DATE \\'2026-02-13\\', 4, 8, \\'BUY\\', 563, 101.7719, 61881.39), (93, DATE \\'2026-05-27\\', 3, 12, \\'SELL\\', 797119, 1.2650, 1008355.54), (94, DATE \\'2026-05-29\\', 5, 12, \\'BUY\\', 204135, 1.2448, 254107.25), (95, DATE \\'2026-05-25\\', 3, 11, \\'SELL\\', 795234, 144.3187, 768939.82), (96, DATE \\'2026-03-04\\', 2, 2, \\'SELL\\', 3497, 61.9331, 216580.05), (97, DATE \\'2026-02-27\\', 1, 3, \\'BUY\\', 2773, 24.2652, 67287.40), (98, DATE \\'2026-03-10\\', 2, 3, \\'BUY\\', 4712, 23.6982, 111665.92), (99, DATE \\'2026-06-23\\', 2, 15, \\'BUY\\', 868, 4.0140, 3484.15), (100, DATE \\'2026-01-12\\', 6, 11, \\'SELL\\', 769152, 141.5099, 729245.57), (101, DATE \\'2026-06-08\\', 5, 11, \\'SELL\\', 349618, 141.5310, 331527.96), (102, DATE \\'2026-05-21\\', 5, 11, \\'BUY\\', 473838, 148.0425, 469992.69), (103, DATE \\'2026-06-15\\', 1, 1, \\'BUY\\', 1303, 182.0929, 237267.05), (104, DATE \\'2026-01-22\\', 5, 10, \\'SELL\\', 130815, 1.0430, 136440.05), (105, DATE \\'2026-02-04\\', 5, 11, \\'BUY\\', 223732, 152.5360, 228652.14), (106, DATE \\'2026-04-14\\', 4, 6, \\'SELL\\', 1379, 97.1083, 133912.35), (107, DATE \\'2026-01-02\\', 3, 11, \\'SELL\\', 131892, 150.2284, 132753.29), (108, DATE \\'2026-04-29\\', 3, 11, \\'BUY\\', 242943, 141.3051, 230004.87), (109, DATE \\'2026-05-15\\', 2, 13, \\'SELL\\', 66, 2362.8790, 155950.01), (110, DATE \\'2026-04-15\\', 4, 7, \\'BUY\\', 1172, 102.0146, 119561.11), (111, DATE \\'2026-03-18\\', 1, 3, \\'SELL\\', 3221, 24.9131, 80245.10), (112, DATE \\'2026-01-27\\', 3, 9, \\'SELL\\', 1157, 92.3720, 106874.40), (113, DATE \\'2026-06-02\\', 4, 8, \\'BUY\\', 120, 99.2472, 12862.44), (114, DATE \\'2026-04-15\\', 5, 10, \\'BUY\\', 631488, 1.1202, 707392.86), (115, DATE \\'2026-04-06\\', 1, 2, \\'SELL\\', 1031, 64.9655, 66979.43), (116, DATE \\'2026-03-31\\', 5, 10, \\'BUY\\', 698808, 1.0411, 727529.01), (117, DATE \\'2026-03-13\\', 2, 13, \\'SELL\\', 630, 2371.1618, 1493831.93), (118, DATE \\'2026-04-27\\', 6, 14, \\'SELL\\', 246, 84.1510, 20701.15), (119, DATE \\'2026-02-04\\', 1, 4, \\'SELL\\', 2791, 93.8686, 282946.24), (120, DATE \\'2026-05-15\\', 5, 10, \\'BUY\\', 137924, 1.1317, 156088.59), (121, DATE \\'2026-04-06\\', 1, 1, \\'SELL\\', 2398, 184.1916, 441691.46), (122, DATE \\'2026-03-25\\', 4, 7, \\'SELL\\', 547, 98.7103, 53994.53), (123, DATE \\'2026-01-26\\', 6, 14, \\'BUY\\', 955, 84.6430, 80834.07), (124, DATE \\'2026-04-30\\', 1, 1, \\'SELL\\', 4949, 176.7440, 874706.06), (125, DATE \\'2026-06-30\\', 3, 10, \\'SELL\\', 464545, 1.1359, 527676.67), (126, DATE \\'2026-01-14\\', 3, 12, \\'BUY\\', 768075, 1.2307, 945269.90), (127, DATE \\'2026-04-14\\', 4, 6, \\'SELL\\', 1231, 102.0452, 125617.64), (128, DATE \\'2026-03-09\\', 4, 6, \\'BUY\\', 283, 100.8364, 28536.70), (129, DATE \\'2026-02-16\\', 3, 7, \\'BUY\\', 786, 98.6210, 77516.11), (130, DATE \\'2026-04-21\\', 6, 11, \\'SELL\\', 148325, 152.6076, 151658.00), (131, DATE \\'2026-04-06\\', 1, 4, \\'SELL\\', 4252, 98.5889, 452736.00), (132, DATE \\'2026-03-12\\', 5, 12, \\'BUY\\', 761198, 1.3275, 1010490.35), (133, DATE \\'2026-02-06\\', 2, 2, \\'SELL\\', 4980, 61.5006, 306272.99), (134, DATE \\'2026-06-04\\', 2, 1, \\'SELL\\', 1328, 174.4152, 231623.39), (135, DATE \\'2026-01-09\\', 3, 11, \\'SELL\\', 794371, 144.9323, 771371.11), (136, DATE \\'2026-02-23\\', 1, 4, \\'SELL\\', 947, 92.5952, 94702.67), (137, DATE \\'2026-04-02\\', 4, 8, \\'BUY\\', 442, 96.7027, 46162.00), (138, DATE \\'2026-04-21\\', 5, 10, \\'BUY\\', 615473, 1.0443, 642738.45), (139, DATE \\'2026-04-22\\', 3, 8, \\'SELL\\', 174, 102.1615, 19198.19), (140, DATE \\'2026-02-06\\', 5, 12, \\'BUY\\', 14766, 1.2999, 19194.32), (141, DATE \\'2026-03-11\\', 3, 10, \\'BUY\\', 839553, 1.1147, 935849.73), (142, DATE \\'2026-01-22\\', 3, 11, \\'BUY\\', 249426, 143.1486, 239223.38), (143, DATE \\'2026-03-16\\', 2, 5, \\'SELL\\', 3655, 315.9410, 1247145.50), (144, DATE \\'2026-03-02\\', 2, 3, \\'SELL\\', 3661, 23.0361, 84335.16), (145, DATE \\'2026-04-06\\', 2, 4, \\'SELL\\', 3737, 93.5343, 377500.69), (146, DATE \\'2026-02-02\\', 4, 6, \\'SELL\\', 257, 100.5325, 25836.85), (147, DATE \\'2026-02-11\\', 5, 10, \\'SELL\\', 30608, 1.0562, 32328.17), (148, DATE \\'2026-05-04\\', 3, 6, \\'BUY\\', 1260, 99.6784, 125594.78), (149, DATE \\'2026-05-05\\', 2, 14, \\'SELL\\', 865, 83.5902, 72305.52), (150, DATE \\'2026-02-10\\', 3, 12, \\'SELL\\', 26656, 1.2400, 33053.44), (151, DATE \\'2026-04-29\\', 4, 7, \\'BUY\\', 99, 98.8201, 9783.19), (152, DATE \\'2026-03-02\\', 4, 9, \\'SELL\\', 1477, 101.8644, 150453.72), (153, DATE \\'2026-01-30\\', 4, 9, \\'BUY\\', 1092, 99.2963, 108431.56), (154, DATE \\'2026-01-21\\', 1, 2, \\'SELL\\', 4022, 62.0813, 249690.99), (155, DATE \\'2026-03-06\\', 5, 12, \\'SELL\\', 884030, 1.2089, 1068703.87), (156, DATE \\'2026-05-27\\', 3, 12, \\'BUY\\', 835197, 1.2040, 1005577.19), (157, DATE \\'2026-04-27\\', 1, 2, \\'BUY\\', 3311, 66.7841, 221122.16), (158, DATE \\'2026-06-25\\', 4, 8, \\'SELL\\', 889, 96.2606, 92421.73), (159, DATE \\'2026-06-22\\', 3, 11, \\'BUY\\', 191096, 144.5445, 185066.57), (160, DATE \\'2026-03-30\\', 5, 11, \\'BUY\\', 24910, 146.0548, 24376.11), (161, DATE \\'2026-04-27\\', 4, 6, \\'BUY\\', 619, 100.1139, 61970.50), (162, DATE \\'2026-03-23\\', 6, 13, \\'BUY\\', 938, 2352.1713, 2206336.68), (163, DATE \\'2026-03-17\\', 5, 11, \\'SELL\\', 546439, 151.3862, 554246.27), (164, DATE \\'2026-06-29\\', 5, 10, \\'SELL\\', 596463, 1.1238, 670305.12), (165, DATE \\'2026-02-09\\', 4, 7, \\'BUY\\', 893, 95.1653, 84982.61), (166, DATE \\'2026-02-11\\', 5, 12, \\'BUY\\', 353538, 1.2133, 428947.66), (167, DATE \\'2026-04-29\\', 2, 15, \\'BUY\\', 740, 3.9846, 2948.60), (168, DATE \\'2026-04-08\\', 2, 1, \\'BUY\\', 2568, 174.2819, 447555.92), (169, DATE \\'2026-04-17\\', 5, 11, \\'SELL\\', 517629, 152.7864, 529880.70), (170, DATE \\'2026-06-15\\', 3, 8, \\'BUY\\', 1694, 104.1916, 190620.62), (171, DATE \\'2026-01-26\\', 3, 9, \\'BUY\\', 1184, 99.0112, 117229.26), (172, DATE \\'2026-04-14\\', 5, 10, \\'SELL\\', 612879, 1.0416, 638374.77), (173, DATE \\'2026-04-30\\', 5, 12, \\'SELL\\', 135697, 1.2175, 165211.10), (174, DATE \\'2026-03-30\\', 4, 9, \\'SELL\\', 208, 99.3502, 20664.84), (175, DATE \\'2026-04-23\\', 2, 1, \\'BUY\\', 1089, 177.6269, 193435.69), (176, DATE \\'2026-06-22\\', 1, 5, \\'BUY\\', 4588, 322.4327, 1597666.93), (177, DATE \\'2026-05-25\\', 5, 12, \\'BUY\\', 656852, 1.2317, 809044.61), (178, DATE \\'2026-03-25\\', 5, 10, \\'BUY\\', 764555, 1.0449, 798883.52), (179, DATE \\'2026-01-14\\', 3, 10, \\'BUY\\', 43602, 1.1239, 49004.29), (180, DATE \\'2026-04-20\\', 3, 6, \\'SELL\\', 291, 100.8923, 29359.66), (181, DATE \\'2026-06-01\\', 5, 12, \\'BUY\\', 937145, 1.3241, 1240873.69), (182, DATE \\'2026-03-18\\', 2, 4, \\'SELL\\', 4823, 97.8547, 509709.48), (183, DATE \\'2026-06-16\\', 3, 10, \\'SELL\\', 950526, 1.0721, 1019058.92), (184, DATE \\'2026-06-08\\', 1, 4, \\'SELL\\', 4153, 98.0250, 439665.65), (185, DATE \\'2026-06-08\\', 6, 10, \\'BUY\\', 405220, 1.0518, 426210.40), (186, DATE \\'2026-05-26\\', 5, 12, \\'SELL\\', 504406, 1.2165, 613609.90), (187, DATE \\'2026-02-04\\', 6, 15, \\'BUY\\', 976, 4.1288, 4029.71), (188, DATE \\'2026-04-20\\', 5, 12, \\'SELL\\', 932114, 1.2570, 1171667.30), (189, DATE \\'2026-01-19\\', 4, 6, \\'SELL\\', 305, 97.8096, 29831.93), (190, DATE \\'2026-02-23\\', 6, 10, \\'SELL\\', 39142, 1.1071, 43334.11), (191, DATE \\'2026-03-30\\', 3, 7, \\'BUY\\', 352, 103.5452, 36447.91), (192, DATE \\'2026-02-25\\', 4, 7, \\'BUY\\', 1637, 104.6929, 171382.28), (193, DATE \\'2026-04-30\\', 4, 6, \\'BUY\\', 955, 101.6063, 97034.02), (194, DATE \\'2026-03-23\\', 3, 12, \\'SELL\\', 292870, 1.3157, 385329.06), (195, DATE \\'2026-01-26\\', 6, 13, \\'BUY\\', 98, 2394.3764, 234648.89), (196, DATE \\'2026-02-05\\', 1, 3, \\'SELL\\', 3895, 24.0550, 93694.23), (197, DATE \\'2026-03-04\\', 6, 13, \\'SELL\\', 238, 2318.4881, 551800.17), (198, DATE \\'2026-01-23\\', 3, 11, \\'BUY\\', 78817, 146.3708, 77294.60), (199, DATE \\'2026-01-26\\', 3, 10, \\'BUY\\', 520965, 1.1018, 573999.24), (200, DATE \\'2026-06-15\\', 6, 15, \\'SELL\\', 553, 4.2663, 2359.26), (201, DATE \\'2026-02-16\\', 3, 10, \\'BUY\\', 254317, 1.0344, 263065.50), (202, DATE \\'2026-06-03\\', 6, 13, \\'BUY\\', 156, 2317.0730, 361463.39), (203, DATE \\'2026-05-18\\', 1, 5, \\'BUY\\', 3537, 308.3561, 1177907.97), (204, DATE \\'2026-02-19\\', 3, 10, \\'SELL\\', 105659, 1.0491, 110846.86), (205, DATE \\'2026-01-16\\', 6, 11, \\'BUY\\', 37563, 144.4345, 36350.13), (206, DATE \\'2026-05-01\\', 3, 11, \\'BUY\\', 494050, 154.6795, 512010.03), (207, DATE \\'2026-01-29\\', 5, 10, \\'SELL\\', 813178, 1.0774, 876117.98), (208, DATE \\'2026-04-28\\', 4, 9, \\'SELL\\', 620, 96.7304, 59972.85), (209, DATE \\'2026-01-23\\', 4, 6, \\'BUY\\', 314, 99.1741, 31140.67), (210, DATE \\'2026-02-11\\', 2, 13, \\'BUY\\', 490, 2258.3097, 1106571.75), (211, DATE \\'2026-04-01\\', 2, 15, \\'SELL\\', 463, 4.2626, 1973.58), (212, DATE \\'2026-05-11\\', 5, 10, \\'BUY\\', 937868, 1.0561, 990482.39), (213, DATE \\'2026-06-11\\', 4, 9, \\'BUY\\', 1594, 95.3005, 151909.00), (214, DATE \\'2026-03-03\\', 5, 10, \\'SELL\\', 126526, 1.0863, 137445.19), (215, DATE \\'2026-05-25\\', 2, 13, \\'BUY\\', 591, 2389.6236, 1412267.55), (216, DATE \\'2026-04-20\\', 2, 14, \\'SELL\\', 454, 78.6230, 35694.84), (217, DATE \\'2026-02-12\\', 2, 5, \\'SELL\\', 3394, 315.3463, 1155908.17), (218, DATE \\'2026-05-12\\', 6, 10, \\'BUY\\', 230492, 1.0486, 241693.91), (219, DATE \\'2026-06-01\\', 6, 12, \\'SELL\\', 939635, 1.3257, 1245674.12), (220, DATE \\'2026-01-08\\', 3, 9, \\'SELL\\', 699, 93.0870, 65067.81), (221, DATE \\'2026-04-15\\', 4, 8, \\'BUY\\', 591, 102.4619, 65399.38), (222, DATE \\'2026-05-13\\', 2, 13, \\'BUY\\', 824, 2441.6115, 2011887.88), (223, DATE \\'2026-01-16\\', 2, 15, \\'SELL\\', 413, 4.0712, 1681.41), (224, DATE \\'2026-05-19\\', 3, 7, \\'BUY\\', 1316, 97.5229, 128340.14), (225, DATE \\'2026-04-02\\', 2, 15, \\'BUY\\', 50, 4.3433, 217.17), (226, DATE \\'2026-01-05\\', 6, 10, \\'SELL\\', 132661, 1.1319, 150158.99), (227, DATE \\'2026-03-13\\', 3, 12, \\'BUY\\', 370416, 1.3031, 482689.09), (228, DATE \\'2026-04-15\\', 6, 13, \\'BUY\\', 610, 2370.4446, 1445971.21), (229, DATE \\'2026-04-09\\', 1, 4, \\'SELL\\', 3604, 98.4544, 383216.03), (230, DATE \\'2026-03-31\\', 2, 14, \\'SELL\\', 848, 79.4994, 67415.49), (231, DATE \\'2026-02-09\\', 2, 14, \\'BUY\\', 340, 83.2575, 28307.55), (232, DATE \\'2026-01-22\\', 2, 13, \\'SELL\\', 979, 2335.6072, 2286559.45), (233, DATE \\'2026-03-23\\', 1, 2, \\'SELL\\', 1747, 66.0883, 115456.26), (234, DATE \\'2026-05-13\\', 6, 11, \\'SELL\\', 862778, 154.6767, 894126.08), (235, DATE \\'2026-05-15\\', 6, 12, \\'BUY\\', 221540, 1.2606, 279273.32), (236, DATE \\'2026-05-04\\', 6, 12, \\'SELL\\', 503522, 1.2392, 623964.46), (237, DATE \\'2026-05-22\\', 2, 15, \\'SELL\\', 13, 3.9729, 51.65), (238, DATE \\'2026-02-27\\', 4, 8, \\'SELL\\', 825, 104.4955, 93105.49), (239, DATE \\'2026-06-01\\', 3, 12, \\'BUY\\', 923244, 1.2052, 1112693.67), (240, DATE \\'2026-02-09\\', 3, 11, \\'SELL\\', 276883, 155.4363, 288352.38), (241, DATE \\'2026-02-23\\', 6, 11, \\'BUY\\', 965160, 152.3386, 985108.53), (242, DATE \\'2026-05-04\\', 6, 15, \\'BUY\\', 83, 4.2791, 355.17), (243, DATE \\'2026-01-14\\', 4, 8, \\'BUY\\', 632, 97.5770, 66602.16), (244, DATE \\'2026-06-15\\', 2, 13, \\'BUY\\', 139, 2258.9873, 313999.23), (245, DATE \\'2026-03-23\\', 6, 10, \\'SELL\\', 491019, 1.0896, 535014.30), (246, DATE \\'2026-05-20\\', 3, 11, \\'BUY\\', 412148, 151.7373, 419006.11), (247, DATE \\'2026-05-04\\', 4, 8, \\'BUY\\', 1484, 105.5286, 169132.80), (248, DATE \\'2026-03-31\\', 5, 12, \\'SELL\\', 524240, 1.2260, 642718.24), (249, DATE \\'2026-05-08\\', 5, 11, \\'BUY\\', 376681, 145.0881, 366167.93), (250, DATE \\'2026-06-26\\', 5, 10, \\'SELL\\', 752218, 1.0576, 795545.76), (251, DATE \\'2026-04-30\\', 1, 1, \\'SELL\\', 456, 191.2063, 87190.07), (252, DATE \\'2026-03-18\\', 4, 6, \\'SELL\\', 446, 101.4085, 45228.19), (253, DATE \\'2026-01-21\\', 4, 6, \\'SELL\\', 27, 95.0576, 2566.56), (254, DATE \\'2026-05-25\\', 2, 13, \\'SELL\\', 6, 2331.1287, 13986.77), (255, DATE \\'2026-02-17\\', 2, 1, \\'BUY\\', 4555, 190.6628, 868469.05), (256, DATE \\'2026-03-30\\', 2, 2, \\'BUY\\', 3564, 66.9604, 238646.87), (257, DATE \\'2026-05-28\\', 4, 8, \\'SELL\\', 1970, 99.4968, 211689.39), (258, DATE \\'2026-06-22\\', 4, 9, \\'SELL\\', 395, 101.0953, 39932.64), (259, DATE \\'2026-06-22\\', 2, 5, \\'BUY\\', 800, 314.8361, 272018.39), (260, DATE \\'2026-05-08\\', 2, 4, \\'SELL\\', 2388, 98.3016, 253523.76), (261, DATE \\'2026-04-23\\', 5, 10, \\'SELL\\', 539258, 1.1408, 615185.53), (262, DATE \\'2026-02-13\\', 6, 12, \\'BUY\\', 211808, 1.2692, 268826.71), (263, DATE \\'2026-06-22\\', 1, 5, \\'BUY\\', 1544, 309.8015, 516600.20), (264, DATE \\'2026-06-15\\', 4, 6, \\'SELL\\', 71, 97.3793, 6913.93), (265, DATE \\'2026-05-08\\', 6, 12, \\'SELL\\', 775921, 1.2319, 955857.08), (266, DATE \\'2026-06-16\\', 4, 8, \\'BUY\\', 1992, 102.6797, 220901.00), (267, DATE \\'2026-03-30\\', 2, 15, \\'BUY\\', 787, 4.1876, 3295.64), (268, DATE \\'2026-06-24\\', 2, 1, \\'BUY\\', 1389, 183.3142, 254623.42), (269, DATE \\'2026-01-05\\', 6, 15, \\'BUY\\', 215, 4.2089, 904.91), (270, DATE \\'2026-06-25\\', 6, 13, \\'SELL\\', 67, 2246.6311, 150524.28), (271, DATE \\'2026-03-26\\', 6, 12, \\'SELL\\', 796418, 1.2951, 1031440.95), (272, DATE \\'2026-04-13\\', 6, 14, \\'SELL\\', 820, 81.7932, 67070.42), (273, DATE \\'2026-03-04\\', 2, 4, \\'BUY\\', 4349, 99.9376, 469398.91), (274, DATE \\'2026-03-16\\', 2, 5, \\'BUY\\', 4077, 297.6381, 1310548.18), (275, DATE \\'2026-06-15\\', 6, 13, \\'BUY\\', 375, 2465.2057, 924452.14), (276, DATE \\'2026-06-01\\', 5, 10, \\'SELL\\', 21581, 1.0653, 22990.24), (277, DATE \\'2026-01-12\\', 3, 10, \\'SELL\\', 379896, 1.0697, 406374.75), (278, DATE \\'2026-05-14\\', 6, 10, \\'SELL\\', 991242, 1.0868, 1077281.81), (279, DATE \\'2026-04-13\\', 2, 13, \\'SELL\\', 722, 2419.7534, 1747061.95), (280, DATE \\'2026-02-23\\', 3, 9, \\'SELL\\', 1809, 96.2894, 174187.52), (281, DATE \\'2026-04-13\\', 2, 2, \\'BUY\\', 4164, 63.5512, 264627.20), (282, DATE \\'2026-01-19\\', 1, 2, \\'SELL\\', 434, 62.0680, 26937.51), (283, DATE \\'2026-02-09\\', 1, 4, \\'SELL\\', 2604, 99.3937, 279526.89), (284, DATE \\'2026-03-19\\', 6, 15, \\'BUY\\', 304, 4.0033, 1217.00), (285, DATE \\'2026-02-26\\', 4, 6, \\'BUY\\', 432, 102.9263, 44464.16), (286, DATE \\'2026-02-19\\', 1, 5, \\'SELL\\', 1010, 323.2966, 352651.93), (287, DATE \\'2026-04-20\\', 1, 1, \\'BUY\\', 3516, 184.0417, 647090.62), (288, DATE \\'2026-01-26\\', 3, 10, \\'SELL\\', 962581, 1.0783, 1037951.09), (289, DATE \\'2026-06-01\\', 1, 1, \\'SELL\\', 1922, 187.2411, 359877.39), (290, DATE \\'2026-04-06\\', 2, 14, \\'BUY\\', 884, 82.6645, 73075.42), (291, DATE \\'2026-02-25\\', 4, 9, \\'SELL\\', 730, 95.2391, 69524.54), (292, DATE \\'2026-04-28\\', 3, 8, \\'SELL\\', 1229, 101.3361, 134505.43), (293, DATE \\'2026-02-09\\', 1, 1, \\'SELL\\', 577, 187.9590, 108452.34), (294, DATE \\'2026-03-23\\', 4, 9, \\'BUY\\', 1849, 100.6429, 186088.72), (295, DATE \\'2026-04-22\\', 2, 4, \\'SELL\\', 724, 92.7333, 72510.02), (296, DATE \\'2026-03-09\\', 6, 12, \\'BUY\\', 398229, 1.2343, 491534.05), (297, DATE \\'2026-05-01\\', 5, 11, \\'BUY\\', 984189, 150.2616, 990834.95), (298, DATE \\'2026-06-04\\', 4, 7, \\'SELL\\', 164, 98.8027, 16203.64), (299, DATE \\'2026-01-27\\', 2, 3, \\'BUY\\', 4803, 24.8939, 119565.40), (300, DATE \\'2026-02-09\\', 2, 4, \\'BUY\\', 2166, 95.1015, 222469.04), (301, DATE \\'2026-02-19\\', 3, 7, \\'SELL\\', 399, 103.6754, 41366.48), (302, DATE \\'2026-06-08\\', 5, 12, \\'BUY\\', 50461, 1.3233, 66775.04), (303, DATE \\'2026-03-12\\', 2, 3, \\'SELL\\', 2519, 23.7356, 59789.98), (304, DATE \\'2026-05-04\\', 4, 7, \\'SELL\\', 1872, 104.6197, 195848.08), (305, DATE \\'2026-05-06\\', 5, 10, \\'SELL\\', 331959, 1.1161, 370499.44), (306, DATE \\'2026-01-07\\', 2, 5, \\'SELL\\', 2474, 319.5341, 853769.55), (307, DATE \\'2026-04-02\\', 3, 6, \\'BUY\\', 459, 95.1537, 43675.55), (308, DATE \\'2026-03-09\\', 3, 9, \\'BUY\\', 853, 101.1572, 86287.09), (309, DATE \\'2026-06-10\\', 1, 4, \\'BUY\\', 2181, 92.1987, 217172.19), (310, DATE \\'2026-03-31\\', 6, 10, \\'SELL\\', 390662, 1.0535, 411562.42), (311, DATE \\'2026-01-20\\', 1, 1, \\'SELL\\', 2132, 178.6231, 380824.45), (312, DATE \\'2026-02-16\\', 2, 13, \\'SELL\\', 288, 2306.4420, 664255.30), (313, DATE \\'2026-01-27\\', 3, 12, \\'SELL\\', 147414, 1.3041, 192242.60), (314, DATE \\'2026-04-27\\', 6, 13, \\'SELL\\', 843, 2290.9560, 1931275.91), (315, DATE \\'2026-06-15\\', 2, 13, \\'SELL\\', 260, 2459.6078, 639498.03), (316, DATE \\'2026-03-06\\', 3, 12, \\'SELL\\', 444048, 1.2159, 539917.96), (317, DATE \\'2026-01-30\\', 2, 13, \\'BUY\\', 793, 2371.8328, 1880863.41), (318, DATE \\'2026-05-28\\', 4, 9, \\'SELL\\', 1696, 95.8143, 162501.05), (319, DATE \\'2026-06-24\\', 6, 12, \\'BUY\\', 892464, 1.3043, 1164040.80), (320, DATE \\'2026-03-17\\', 1, 2, \\'SELL\\', 3324, 66.9617, 222580.69), (321, DATE \\'2026-02-17\\', 1, 4, \\'SELL\\', 3895, 97.9061, 411851.80), (322, DATE \\'2026-05-14\\', 5, 10, \\'BUY\\', 288781, 1.0925, 315493.24), (323, DATE \\'2026-06-24\\', 1, 5, \\'BUY\\', 2307, 305.5669, 761338.27), (324, DATE \\'2026-04-06\\', 1, 3, \\'SELL\\', 4878, 24.5807, 119904.65), (325, DATE \\'2026-04-28\\', 1, 2, \\'SELL\\', 1645, 65.9161, 108431.98), (326, DATE \\'2026-04-06\\', 1, 3, \\'SELL\\', 4066, 23.6808, 96286.13), (327, DATE \\'2026-05-13\\', 4, 9, \\'BUY\\', 486, 101.5579, 49357.14), (328, DATE \\'2026-05-26\\', 3, 10, \\'SELL\\', 768915, 1.0383, 798364.44), (329, DATE \\'2026-06-04\\', 2, 3, \\'BUY\\', 1105, 24.7976, 27401.35), (330, DATE \\'2026-04-24\\', 2, 3, \\'BUY\\', 1294, 23.9716, 31019.25), (331, DATE \\'2026-02-03\\', 2, 13, \\'BUY\\', 769, 2354.8062, 1810845.97), (332, DATE \\'2026-02-16\\', 2, 13, \\'SELL\\', 963, 2359.1403, 2271852.11), (333, DATE \\'2026-01-12\\', 4, 6, \\'SELL\\', 57, 97.8541, 5577.68), (334, DATE \\'2026-01-06\\', 5, 11, \\'SELL\\', 313463, 143.3610, 301087.07), (335, DATE \\'2026-06-03\\', 1, 1, \\'SELL\\', 3104, 182.3688, 566072.76), (336, DATE \\'2026-06-17\\', 5, 12, \\'BUY\\', 610476, 1.2590, 768589.28), (337, DATE \\'2026-01-12\\', 2, 14, \\'BUY\\', 345, 85.2124, 29398.28), (338, DATE \\'2026-02-04\\', 4, 6, \\'SELL\\', 1525, 100.4646, 153208.52), (339, DATE \\'2026-04-27\\', 4, 9, \\'SELL\\', 1923, 101.2850, 194771.06), (340, DATE \\'2026-03-03\\', 3, 11, \\'BUY\\', 845730, 146.7726, 831670.94), (341, DATE \\'2026-02-05\\', 2, 5, \\'BUY\\', 2810, 300.5069, 911978.34), (342, DATE \\'2026-06-05\\', 1, 2, \\'BUY\\', 1409, 66.2048, 93282.56), (343, DATE \\'2026-02-16\\', 4, 8, \\'SELL\\', 1320, 98.9363, 141043.59), (344, DATE \\'2026-06-25\\', 4, 9, \\'BUY\\', 738, 92.8139, 68496.66), (345, DATE \\'2026-05-18\\', 1, 5, \\'SELL\\', 3349, 321.5805, 1163130.94), (346, DATE \\'2026-04-15\\', 3, 12, \\'SELL\\', 680284, 1.2832, 872940.43), (347, DATE \\'2026-01-16\\', 1, 1, \\'BUY\\', 3240, 183.2225, 593640.90), (348, DATE \\'2026-06-26\\', 3, 6, \\'BUY\\', 1641, 94.6551, 155329.02), (349, DATE \\'2026-01-16\\', 6, 10, \\'BUY\\', 229174, 1.0716, 245582.86), (350, DATE \\'2026-01-19\\', 2, 15, \\'SELL\\', 571, 4.2722, 2439.43), (351, DATE \\'2026-06-26\\', 1, 2, \\'BUY\\', 961, 64.2259, 61721.09), (352, DATE \\'2026-02-09\\', 6, 11, \\'BUY\\', 184240, 150.0145, 185179.10), (353, DATE \\'2026-05-11\\', 3, 10, \\'BUY\\', 185116, 1.0658, 197296.63), (354, DATE \\'2026-01-05\\', 1, 1, \\'BUY\\', 3067, 187.7571, 575851.03), (355, DATE \\'2026-03-09\\', 6, 10, \\'SELL\\', 291592, 1.0667, 311041.19), (356, DATE \\'2026-05-26\\', 3, 11, \\'SELL\\', 884735, 147.4219, 873876.41), (357, DATE \\'2026-03-02\\', 2, 13, \\'BUY\\', 194, 2257.1086, 437879.07), (358, DATE \\'2026-02-09\\', 2, 14, \\'SELL\\', 224, 83.3550, 18671.52), (359, DATE \\'2026-01-05\\', 4, 9, \\'BUY\\', 633, 95.8982, 60703.56), (360, DATE \\'2026-05-28\\', 5, 11, \\'BUY\\', 208715, 144.9290, 202667.34), (361, DATE \\'2026-04-24\\', 5, 12, \\'SELL\\', 325414, 1.3152, 427984.49), (362, DATE \\'2026-05-07\\', 4, 8, \\'SELL\\', 1276, 97.2777, 134056.45), (363, DATE \\'2026-06-23\\', 5, 12, \\'BUY\\', 988116, 1.2443, 1229512.74), (364, DATE \\'2026-06-26\\', 2, 3, \\'SELL\\', 4848, 23.0348, 111672.71), (365, DATE \\'2026-01-05\\', 6, 11, \\'SELL\\', 62681, 148.0194, 62162.63), (366, DATE \\'2026-01-07\\', 1, 5, \\'BUY\\', 1649, 313.6511, 558587.52), (367, DATE \\'2026-02-02\\', 6, 11, \\'BUY\\', 388219, 154.9858, 403128.50), (368, DATE \\'2026-05-21\\', 3, 10, \\'SELL\\', 574488, 1.1206, 643771.25), (369, DATE \\'2026-03-30\\', 2, 14, \\'BUY\\', 974, 82.9383, 80781.90), (370, DATE \\'2026-01-12\\', 5, 10, \\'BUY\\', 199977, 1.1381, 227593.82), (371, DATE \\'2026-05-06\\', 2, 1, \\'SELL\\', 3908, 185.4041, 724559.22), (372, DATE \\'2026-02-16\\', 5, 10, \\'SELL\\', 506123, 1.0378, 525254.45), (373, DATE \\'2026-06-18\\', 6, 13, \\'SELL\\', 712, 2282.4577, 1625109.88), (374, DATE \\'2026-01-20\\', 5, 12, \\'BUY\\', 525785, 1.2988, 682889.56), (375, DATE \\'2026-05-26\\', 1, 4, \\'BUY\\', 4714, 96.8808, 493231.78), (376, DATE \\'2026-05-04\\', 5, 10, \\'BUY\\', 337787, 1.0922, 368930.96), (377, DATE \\'2026-05-06\\', 3, 11, \\'BUY\\', 136687, 153.9022, 140944.08), (378, DATE \\'2026-03-05\\', 4, 7, \\'BUY\\', 429, 99.7353, 42786.44), (379, DATE \\'2026-06-11\\', 3, 11, \\'BUY\\', 843312, 147.2800, 832160.04), (380, DATE \\'2026-05-20\\', 6, 14, \\'SELL\\', 850, 85.7841, 72916.49), (381, DATE \\'2026-05-18\\', 3, 12, \\'SELL\\', 713416, 1.2453, 888416.94), (382, DATE \\'2026-04-09\\', 1, 5, \\'BUY\\', 3595, 314.9429, 1222797.30), (383, DATE \\'2026-02-16\\', 4, 9, \\'BUY\\', 649, 99.4541, 64545.71), (384, DATE \\'2026-06-15\\', 5, 11, \\'BUY\\', 990397, 143.7568, 953921.23), (385, DATE \\'2026-01-26\\', 2, 4, \\'SELL\\', 3589, 98.5136, 381850.54), (386, DATE \\'2026-05-05\\', 6, 15, \\'SELL\\', 308, 4.3007, 1324.62), (387, DATE \\'2026-01-12\\', 4, 7, \\'BUY\\', 32, 95.8221, 3066.31), (388, DATE \\'2026-06-05\\', 1, 1, \\'SELL\\', 4028, 181.9324, 732823.71), (389, DATE \\'2026-04-01\\', 3, 10, \\'SELL\\', 433776, 1.0483, 454727.38), (390, DATE \\'2026-03-12\\', 3, 12, \\'BUY\\', 318855, 1.2279, 391522.05), (391, DATE \\'2026-02-11\\', 6, 13, \\'BUY\\', 755, 2315.9759, 1748561.80), (392, DATE \\'2026-06-18\\', 5, 10, \\'SELL\\', 244354, 1.0418, 254568.00), (393, DATE \\'2026-03-23\\', 4, 6, \\'SELL\\', 1858, 98.1079, 182284.48), (394, DATE \\'2026-04-09\\', 1, 5, \\'BUY\\', 2304, 295.5175, 735342.11), (395, DATE \\'2026-02-06\\', 1, 1, \\'BUY\\', 939, 190.9736, 179324.21), (396, DATE \\'2026-06-17\\', 5, 11, \\'BUY\\', 708167, 142.1063, 674254.45), (397, DATE \\'2026-04-13\\', 6, 15, \\'BUY\\', 26, 4.3519, 113.15), (398, DATE \\'2026-01-21\\', 2, 13, \\'BUY\\', 733, 2317.7718, 1698926.73), (399, DATE \\'2026-06-10\\', 4, 7, \\'SELL\\', 1852, 102.4321, 189704.25), (400, DATE \\'2026-04-01\\', 3, 12, \\'BUY\\', 212966, 1.2851, 273682.61)'\n ];\n };\n auth: DefaultH2;\n}\n\n\n###Runtime\nRuntime cube::samples::trades::TradesRuntime\n{\n mappings:\n [\n ];\n connections:\n [\n cube::samples::trades::TradesDatabase:\n [\n connection_1: cube::samples::trades::TradesConnection\n ]\n ];\n}\n\n\n###Pure\nfunction cube::samples::trades::tradesAbove(minNotionalUsd: Float[1]): Relation<(TRADE_ID:Integer, TRADE_DATE:StrictDate, DESK_ID:Integer, SIDE:String, NOTIONAL_USD:Decimal)>[1]\n{\n #>{cube::samples::trades::TradesDatabase.TRADES_SAMPLE.TRADES}#\n ->filter(t|$t.NOTIONAL_USD > $minNotionalUsd)\n ->select(~[TRADE_ID, TRADE_DATE, DESK_ID, SIDE, NOTIONAL_USD])\n}\n\nfunction cube::samples::trades::deskBook(desk: String[1], side: String[0..1]): Relation<(TRADE_ID:Integer, TRADE_DATE:StrictDate, DESK:String, REGION:String, SIDE:String, NOTIONAL_USD:Decimal)>[1]\n{\n #>{cube::samples::trades::TradesDatabase.TRADES_SAMPLE.TRADES}#\n ->join(#>{cube::samples::trades::TradesDatabase.TRADES_SAMPLE.DESKS}#, JoinKind.INNER, {t, d|$t.DESK_ID == $d.ID})\n ->filter(r|($r.DESK == $desk) && ($side->isEmpty() || ($r.SIDE == $side->toOne())))\n ->select(~[TRADE_ID, TRADE_DATE, DESK, REGION, SIDE, NOTIONAL_USD])\n ->from(cube::samples::trades::TradesRuntime)\n}\n"
|
|
7
|
+
},
|
|
8
|
+
"runtime": "cube::samples::trades::TradesRuntime"
|
|
9
|
+
},
|
|
10
|
+
"query": {
|
|
11
|
+
"selected": "join101",
|
|
12
|
+
"nodes": [
|
|
13
|
+
{
|
|
14
|
+
"kind": "relational",
|
|
15
|
+
"id": "relational101",
|
|
16
|
+
"database": "cube::samples::trades::TradesDatabase",
|
|
17
|
+
"schema": "TRADES_SAMPLE",
|
|
18
|
+
"table": "TRADES",
|
|
19
|
+
"schemaSnapshot": [
|
|
20
|
+
{
|
|
21
|
+
"name": "TRADE_ID",
|
|
22
|
+
"type": {
|
|
23
|
+
"path": "meta::pure::precisePrimitives::Int"
|
|
24
|
+
},
|
|
25
|
+
"nullable": false
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "TRADE_DATE",
|
|
29
|
+
"type": {
|
|
30
|
+
"path": "StrictDate"
|
|
31
|
+
},
|
|
32
|
+
"nullable": false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "DESK_ID",
|
|
36
|
+
"type": {
|
|
37
|
+
"path": "meta::pure::precisePrimitives::Int"
|
|
38
|
+
},
|
|
39
|
+
"nullable": false
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"name": "INSTRUMENT_ID",
|
|
43
|
+
"type": {
|
|
44
|
+
"path": "meta::pure::precisePrimitives::Int"
|
|
45
|
+
},
|
|
46
|
+
"nullable": false
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "SIDE",
|
|
50
|
+
"type": {
|
|
51
|
+
"path": "meta::pure::precisePrimitives::Varchar",
|
|
52
|
+
"params": [4]
|
|
53
|
+
},
|
|
54
|
+
"nullable": false
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "QUANTITY",
|
|
58
|
+
"type": {
|
|
59
|
+
"path": "meta::pure::precisePrimitives::Int"
|
|
60
|
+
},
|
|
61
|
+
"nullable": false
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "PRICE",
|
|
65
|
+
"type": {
|
|
66
|
+
"path": "meta::pure::precisePrimitives::Numeric",
|
|
67
|
+
"params": [14, 4]
|
|
68
|
+
},
|
|
69
|
+
"nullable": false
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "NOTIONAL_USD",
|
|
73
|
+
"type": {
|
|
74
|
+
"path": "meta::pure::precisePrimitives::Numeric",
|
|
75
|
+
"params": [18, 2]
|
|
76
|
+
},
|
|
77
|
+
"nullable": false
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"kind": "relational",
|
|
83
|
+
"id": "relational102",
|
|
84
|
+
"database": "cube::samples::trades::TradesDatabase",
|
|
85
|
+
"schema": "TRADES_SAMPLE",
|
|
86
|
+
"table": "DESKS",
|
|
87
|
+
"schemaSnapshot": [
|
|
88
|
+
{
|
|
89
|
+
"name": "ID",
|
|
90
|
+
"type": {
|
|
91
|
+
"path": "meta::pure::precisePrimitives::Int"
|
|
92
|
+
},
|
|
93
|
+
"nullable": false
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"name": "DESK",
|
|
97
|
+
"type": {
|
|
98
|
+
"path": "meta::pure::precisePrimitives::Varchar",
|
|
99
|
+
"params": [20]
|
|
100
|
+
},
|
|
101
|
+
"nullable": false
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"name": "REGION",
|
|
105
|
+
"type": {
|
|
106
|
+
"path": "meta::pure::precisePrimitives::Varchar",
|
|
107
|
+
"params": [10]
|
|
108
|
+
},
|
|
109
|
+
"nullable": false
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"kind": "join",
|
|
115
|
+
"id": "join101",
|
|
116
|
+
"inputs": ["relational101", "relational102"],
|
|
117
|
+
"joinType": "LEFT_OUTER",
|
|
118
|
+
"leftColumns": ["DESK_ID"],
|
|
119
|
+
"rightColumns": ["ID"]
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
}
|