@finos/legend-cube-builder 0.0.4 → 0.0.5
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 +22 -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 +50 -3
- 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 +14 -2
- package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
- package/lib/__lib__/LegendCubeLabels.d.ts +100 -8
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeLabels.js +129 -14
- package/lib/__lib__/LegendCubeLabels.js.map +1 -1
- 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 +7 -0
- package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeTesting.js +7 -0
- package/lib/__lib__/LegendCubeTesting.js.map +1 -1
- 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__/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__/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 +9 -6
- 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 +16 -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 +77 -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 +5 -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 +38 -5
- 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 +8 -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 +50 -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 +3 -3
- 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/CubeExpressionFilterEditor.d.ts +25 -0
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js +83 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js.map +1 -0
- package/lib/components/editors/CubeExtendEditor.d.ts +2 -0
- package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeExtendEditor.js +3 -3
- 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/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 +9 -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 +40 -26
- package/lib/components/grid/CubeGridRegion.js.map +1 -1
- package/lib/components/grid/CubeGridValues.d.ts +31 -1
- package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
- package/lib/components/grid/CubeGridValues.js +108 -1
- package/lib/components/grid/CubeGridValues.js.map +1 -1
- package/lib/components/grid/CubeResultGrid.d.ts +68 -5
- package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
- package/lib/components/grid/CubeResultGrid.js +308 -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 +114 -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 +32 -13
- 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.map +1 -1
- package/lib/components/source-picker/CubeIngestTab.js +39 -16
- 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/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 +12 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -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 +173 -43
- package/lib/stores/CubeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeEditorState.js +498 -113
- 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 +39 -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 +2 -2
- 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 +18 -6
- package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
- package/lib/stores/CubeGridQuickActions.js +32 -12
- 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/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/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/CubeExpressionFilterDraft.d.ts +91 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js +254 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js.map +1 -0
- 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 +20 -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 +26 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js +46 -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 +22 -9
- package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.js +84 -29
- 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/package.json +10 -9
- package/src/__lib__/LegendCubeCommand.ts +7 -0
- package/src/__lib__/LegendCubeFunctionLabels.ts +41 -0
- package/src/__lib__/LegendCubeHelpText.ts +23 -1
- package/src/__lib__/LegendCubeLabels.ts +170 -13
- package/src/__lib__/LegendCubeProjectSourceLabels.ts +26 -0
- package/src/__lib__/LegendCubeServiceLabels.ts +41 -0
- package/src/__lib__/LegendCubeTesting.ts +7 -0
- package/src/__test-utils__/CubeEngineTestSupport.ts +2 -1
- 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__/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 +13 -6
- package/src/components/CubeDialogTheme.ts +25 -0
- package/src/components/CubeEditor.tsx +155 -129
- package/src/components/CubeFileMenu.tsx +127 -0
- package/src/components/CubeLambdaImportBanner.tsx +97 -0
- package/src/components/CubeNodeIcon.tsx +7 -0
- package/src/components/CubeSchemaColumnsTable.tsx +7 -2
- package/src/components/canvas/CubeCanvas.tsx +52 -13
- 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 +30 -3
- package/src/components/dev-settings/CubeDevSettings.tsx +154 -0
- package/src/components/editors/CubeColumnChecklist.tsx +8 -2
- package/src/components/editors/CubeColumnPicker.tsx +6 -3
- package/src/components/editors/CubeConcatEditor.tsx +2 -2
- package/src/components/editors/CubeExpressionFilterEditor.tsx +193 -0
- package/src/components/editors/CubeExtendEditor.tsx +3 -3
- 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/CubeNodeEditorPanel.tsx +22 -10
- package/src/components/editors/CubeNodeEditorPopper.tsx +9 -1
- package/src/components/editors/CubeNodeEditorRegistry.ts +12 -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 +170 -54
- package/src/components/grid/CubeGridValues.ts +146 -1
- package/src/components/grid/CubeResultGrid.tsx +443 -41
- package/src/components/grid/CubeRunStatsPanel.tsx +156 -0
- package/src/components/grid/CubeServerSideGrid.tsx +200 -0
- package/src/components/grid/CubeSqlDialog.tsx +90 -0
- package/src/components/grid/CubeSqlFormat.ts +37 -0
- package/src/components/palette/CubePalette.tsx +45 -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 +159 -79
- 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/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 +32 -2
- package/src/stores/CubeAddPlacement.ts +25 -5
- package/src/stores/CubeDevSettingsState.ts +117 -0
- package/src/stores/CubeEditorState.ts +687 -197
- package/src/stores/CubeEngineChecks.ts +240 -0
- package/src/stores/CubeExamples.ts +70 -1
- package/src/stores/CubeExamplesState.ts +4 -2
- 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 +33 -11
- 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/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/LocalModelCatalog.ts +6 -1
- package/src/stores/editors/CubeExpressionFilterDraft.ts +385 -0
- package/src/stores/editors/CubeFunctionDraft.ts +92 -0
- package/src/stores/editors/CubeNodeDraftRegistry.ts +27 -2
- package/src/stores/editors/CubePivotDraft.ts +355 -0
- package/src/stores/fixtures/CubeSalesDuckDbModel.ts +54 -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 +112 -38
- 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/tsconfig.json +50 -0
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,12 @@ 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`), and Pivot for an editor that loads values from the engine
|
|
15
|
+
through `runCubeQuery` (`CubePivotEditor`, `CubePivotDraft`). A node type a database can't run is greyed, with the
|
|
16
|
+
reason, in the palette and the Add menus (`getCubeAddDatabaseProblem` in `CubeAddPlacement.ts`): nothing to add for a
|
|
17
|
+
new type but the core's rule.
|
|
14
18
|
|
|
15
19
|
## 1. A draft
|
|
16
20
|
|
|
@@ -98,28 +102,34 @@ text (§17.9) where it has one.
|
|
|
98
102
|
|
|
99
103
|
Map the icon name of the node's definition to a legend-art icon in `NODE_ICONS` (`src/components/CubeNodeIcon.tsx`).
|
|
100
104
|
|
|
101
|
-
## A node the engine types
|
|
105
|
+
## A node the engine types or checks
|
|
102
106
|
|
|
103
|
-
Extend's types come from the engine (the core guide)
|
|
104
|
-
|
|
107
|
+
Extend's types come from the engine (the core guide), and so does the word that a Filter by Expression's condition is
|
|
108
|
+
one Boolean of a row (PLAN §11.11). `CubeEditorState` checks every such node that waits on `ERR_TYPING` or
|
|
109
|
+
`ERR_CHECKING` through a reaction (`nodesToCheck`, `checkExpressions`), in one `typeLambdas` call, outside the undo
|
|
110
|
+
history, through one path for both kinds (`src/stores/CubeEngineChecks.ts`): each kind gives a request, its lambdas
|
|
111
|
+
and how to read the engine's answers into the node to store. The
|
|
105
112
|
answer replaces the very nodes sent, in the cube shown and in the undo snapshots that give the engine the same input
|
|
106
113
|
(`replaceOutsideHistory` takes a predicate per snapshot), and an answer for a node changed meanwhile is dropped. Each
|
|
107
114
|
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.
|
|
115
|
+
so a failure names its column. A condition is checked as its input's relation filtered with it, and typed alone as an
|
|
116
|
+
extend column under a name no input column has, which names its type when it isn't one Boolean
|
|
117
|
+
(`src/stores/CubeExpressionFilterCheck.ts`).
|
|
109
118
|
|
|
110
119
|
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
120
|
columns are nullable to Cube, `[1]` to the engine after `toOne()`). So each typing records `upstream`, a digest of the
|
|
112
121
|
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
|
|
122
|
+
`analysis` (`createStaleCubeEngineCheckRule`): a node whose digest differs waits on `ERR_TYPING` or `ERR_CHECKING`
|
|
123
|
+
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
124
|
digest covers the whole relation, filter values included, so any edit above an Extend has it typed again. A typing
|
|
116
125
|
without a digest, as one loaded, is used as it is; on import every Extend is typed once more, as sources are checked
|
|
117
126
|
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 `
|
|
127
|
+
warning. Every way out of `checkExpressions` leaves the node not stale, or the reaction would loop.
|
|
119
128
|
|
|
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
|
-
|
|
129
|
+
The canvas shows a waiting node as resolving (`isTypingNode`), the header says so ("checking expressions"), and the
|
|
130
|
+
panel leaves the waiting marker out of its problems. A new node type the engine types or checks joins
|
|
131
|
+
`CubeEngineCheckedNode` and gives `buildCubeEngineCheckRequest` its request, so the reaction, the stale rule, the undo
|
|
132
|
+
snapshots, the kept check offline and the import serve it too; its draft joins F10 in `CubeEditorState`.
|
|
123
133
|
|
|
124
134
|
## Warnings
|
|
125
135
|
|
|
@@ -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, can be empty"_), **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
|
+
}
|