diff --git a/.changes/unreleased/Features-20250124-133535.yaml b/.changes/unreleased/Features-20250124-133535.yaml new file mode 100644 index 0000000000..2392bf1b1e --- /dev/null +++ b/.changes/unreleased/Features-20250124-133535.yaml @@ -0,0 +1,6 @@ +kind: Features +body: Allow querying SCDs without metric_time. +time: 2025-01-24T13:35:35.800322-08:00 +custom: + Author: courtneyholcomb + Issue: "1621" diff --git a/metricflow-semantics/metricflow_semantics/query/validation_rules/metric_time_requirements.py b/metricflow-semantics/metricflow_semantics/query/validation_rules/metric_time_requirements.py index 3bc7d55e70..04b3f4c38b 100644 --- a/metricflow-semantics/metricflow_semantics/query/validation_rules/metric_time_requirements.py +++ b/metricflow-semantics/metricflow_semantics/query/validation_rules/metric_time_requirements.py @@ -15,7 +15,6 @@ from metricflow_semantics.model.linkable_element_property import LinkableElementProperty from metricflow_semantics.model.semantic_manifest_lookup import SemanticManifestLookup from metricflow_semantics.model.semantics.element_filter import LinkableElementFilter -from metricflow_semantics.model.semantics.linkable_element_set import LinkableElementSet from metricflow_semantics.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath from metricflow_semantics.query.issues.issues_base import ( MetricFlowQueryResolutionIssue, @@ -27,9 +26,6 @@ from metricflow_semantics.query.issues.parsing.offset_metric_requires_metric_time import ( OffsetMetricRequiresMetricTimeIssue, ) -from metricflow_semantics.query.issues.parsing.scd_requires_metric_time import ( - ScdRequiresMetricTimeIssue, -) from metricflow_semantics.query.resolver_inputs.query_resolver_inputs import ResolverInputForQuery from metricflow_semantics.query.validation_rules.base_validation_rule import PostResolutionQueryValidationRule @@ -44,7 +40,6 @@ class MetricTimeQueryValidationRule(PostResolutionQueryValidationRule): * Cumulative metrics. * Derived metrics with an offset time. - * Slowly changing dimensions """ def __init__( # noqa: D107 @@ -134,14 +129,6 @@ def _validate_derived_metric( ), ) - def _scd_linkable_element_set_for_measure(self, measure_reference: MeasureReference) -> LinkableElementSet: - """Returns subset of the query's `LinkableElements` that are SCDs and associated with the measure.""" - measure_semantic_model = self._manifest_lookup.semantic_model_lookup.measure_lookup.get_properties( - measure_reference - ).model_reference - - return self._scd_linkable_element_set.filter_by_left_semantic_model(measure_semantic_model) - @override def validate_metric_in_resolution_dag( self, @@ -192,19 +179,4 @@ def validate_measure_in_resolution_dag( measure_reference: MeasureReference, resolution_path: MetricFlowQueryResolutionPath, ) -> MetricFlowQueryResolutionIssueSet: - scd_linkable_elemenent_set_for_measure = self._scd_linkable_element_set_for_measure(measure_reference) - - if scd_linkable_elemenent_set_for_measure.spec_count == 0: - return MetricFlowQueryResolutionIssueSet.empty_instance() - - if self._query_includes_metric_time: - return MetricFlowQueryResolutionIssueSet.empty_instance() - - # Queries that join to an SCD don't support direct references to agg_time_dimension, so we - # only check for metric_time. If we decide to support agg_time_dimension, we should add a check - - return MetricFlowQueryResolutionIssueSet.from_issue( - ScdRequiresMetricTimeIssue.from_parameters( - scds_in_query=scd_linkable_elemenent_set_for_measure.specs, query_resolution_path=resolution_path - ) - ) + return MetricFlowQueryResolutionIssueSet.empty_instance() diff --git a/metricflow-semantics/tests_metricflow_semantics/query/test_query_parser.py b/metricflow-semantics/tests_metricflow_semantics/query/test_query_parser.py index a1d159a882..64538342b2 100644 --- a/metricflow-semantics/tests_metricflow_semantics/query/test_query_parser.py +++ b/metricflow-semantics/tests_metricflow_semantics/query/test_query_parser.py @@ -29,7 +29,7 @@ EXAMPLE_PROJECT_CONFIGURATION_YAML_CONFIG_FILE, ) from metricflow_semantics.test_helpers.metric_time_dimension import MTD -from metricflow_semantics.test_helpers.snapshot_helpers import assert_object_snapshot_equal, assert_str_snapshot_equal +from metricflow_semantics.test_helpers.snapshot_helpers import assert_object_snapshot_equal logger = logging.getLogger(__name__) @@ -465,52 +465,6 @@ def test_cumulative_metric_agg_time_dimension_name_validation( assert_object_snapshot_equal(request=request, mf_test_configuration=mf_test_configuration, obj=result) -def test_join_to_scd_no_time_dimension_validation( - request: FixtureRequest, - mf_test_configuration: MetricFlowTestConfiguration, - scd_query_parser: MetricFlowQueryParser, -) -> None: - """Test that queries that join to SCD semantic models fail if no time dimensions are selected.""" - with pytest.raises(InvalidQueryException) as exc_info: - scd_query_parser.parse_and_validate_query( - metric_names=["bookings"], - group_by_names=["listing__country"], - ) - - assert len(exc_info.value.args) == 1 - assert isinstance(exc_info.value.args[0], str) - assert_str_snapshot_equal( - request=request, - mf_test_configuration=mf_test_configuration, - snapshot_id="error", - snapshot_str=exc_info.value.args[0], - ) - - -def test_join_through_scd_no_time_dimension_validation( - request: FixtureRequest, - mf_test_configuration: MetricFlowTestConfiguration, - scd_query_parser: MetricFlowQueryParser, -) -> None: - """Test that queries that join through SCDs semantic models fail if no time dimensions are selected.""" - with pytest.raises(InvalidQueryException) as exc_info: - # "user__home_state_latest" is not an SCD itself, but since we go through - # "listing" and that is an SCD, we should raise an exception here as well - scd_query_parser.parse_and_validate_query( - metric_names=["bookings"], - group_by_names=["listing__user__home_state_latest"], - ) - - assert len(exc_info.value.args) == 1 - assert isinstance(exc_info.value.args[0], str) - assert_str_snapshot_equal( - request=request, - mf_test_configuration=mf_test_configuration, - snapshot_id="error", - snapshot_str=exc_info.value.args[0], - ) - - def test_derived_metric_query_parsing( request: FixtureRequest, mf_test_configuration: MetricFlowTestConfiguration, diff --git a/metricflow-semantics/tests_metricflow_semantics/snapshots/test_query_parser.py/str/test_join_through_scd_no_time_dimension_validation__error.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_query_parser.py/str/test_join_through_scd_no_time_dimension_validation__error.txt deleted file mode 100644 index 4fe1d3d7d9..0000000000 --- a/metricflow-semantics/tests_metricflow_semantics/snapshots/test_query_parser.py/str/test_join_through_scd_no_time_dimension_validation__error.txt +++ /dev/null @@ -1,23 +0,0 @@ -test_name: test_join_through_scd_no_time_dimension_validation -test_filename: test_query_parser.py -docstring: - Test that queries that join through SCDs semantic models fail if no time dimensions are selected. ---- -Got errors while resolving the query. - -Error #1: - Message: - - Your query contains the following group bys, which are SCDs or contain SCDs in the join path: ['listing__user__home_state_latest']. - - A query containing SCDs must also contain the metric_time dimension in order to join the SCD table to the valid time range. Please add metric_time to the query and try again. If you're using agg_time_dimension, use metric_time instead. - - Query Input: - - Query(['bookings'], ['listing__user__home_state_latest'] - - Issue Location: - - [Resolve Query(['bookings'])] - -> [Resolve Metric('bookings')] - -> [Resolve Measure('bookings')] diff --git a/metricflow-semantics/tests_metricflow_semantics/snapshots/test_query_parser.py/str/test_join_to_scd_no_time_dimension_validation__error.txt b/metricflow-semantics/tests_metricflow_semantics/snapshots/test_query_parser.py/str/test_join_to_scd_no_time_dimension_validation__error.txt deleted file mode 100644 index 5e1530d7c6..0000000000 --- a/metricflow-semantics/tests_metricflow_semantics/snapshots/test_query_parser.py/str/test_join_to_scd_no_time_dimension_validation__error.txt +++ /dev/null @@ -1,23 +0,0 @@ -test_name: test_join_to_scd_no_time_dimension_validation -test_filename: test_query_parser.py -docstring: - Test that queries that join to SCD semantic models fail if no time dimensions are selected. ---- -Got errors while resolving the query. - -Error #1: - Message: - - Your query contains the following group bys, which are SCDs or contain SCDs in the join path: ['listing__country']. - - A query containing SCDs must also contain the metric_time dimension in order to join the SCD table to the valid time range. Please add metric_time to the query and try again. If you're using agg_time_dimension, use metric_time instead. - - Query Input: - - Query(['bookings'], ['listing__country'] - - Issue Location: - - [Resolve Query(['bookings'])] - -> [Resolve Metric('bookings')] - -> [Resolve Measure('bookings')] diff --git a/tests_metricflow/integration/conftest.py b/tests_metricflow/integration/conftest.py index b546dbac51..0d71a9e278 100644 --- a/tests_metricflow/integration/conftest.py +++ b/tests_metricflow/integration/conftest.py @@ -45,3 +45,24 @@ def it_helpers( # noqa: D103 source_schema=mf_test_configuration.mf_source_schema, sql_client=sql_client, ) + + +@pytest.fixture +def scd_it_helpers( # noqa: D103 + sql_client: SqlClient, + create_source_tables: bool, + scd_semantic_manifest_lookup: SemanticManifestLookup, + time_spine_sources: Mapping[TimeGranularity, TimeSpineSource], + mf_test_configuration: MetricFlowTestConfiguration, +) -> IntegrationTestHelpers: + return IntegrationTestHelpers( + mf_engine=MetricFlowEngine( + semantic_manifest_lookup=scd_semantic_manifest_lookup, + sql_client=sql_client, + column_association_resolver=DunderColumnAssociationResolver(), + time_source=ConfigurableTimeSource(as_datetime("2020-01-01")), + ), + mf_system_schema=mf_test_configuration.mf_system_schema, + source_schema=mf_test_configuration.mf_source_schema, + sql_client=sql_client, + ) diff --git a/tests_metricflow/integration/query_output/test_query_output.py b/tests_metricflow/integration/query_output/test_query_output.py index 356b14c0e7..28825e9b64 100644 --- a/tests_metricflow/integration/query_output/test_query_output.py +++ b/tests_metricflow/integration/query_output/test_query_output.py @@ -93,3 +93,80 @@ def test_derived_metric_alias( # noqa: D103 snapshot_str=query_result.result_df.text_format(), sql_engine=sql_client.sql_engine_type, ) + + +@pytest.mark.sql_engine_snapshot +@pytest.mark.duckdb_only +def test_scd_with_coarser_grain( # noqa: D103 + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + sql_client: SqlClient, + scd_it_helpers: IntegrationTestHelpers, +) -> None: + query_result = scd_it_helpers.mf_engine.query( + MetricFlowQueryRequest.create_with_random_request_id( + metrics=(MetricParameter(name="family_bookings"),), + group_by_names=["listing__capacity", "metric_time__month"], + order_by_names=["listing__capacity", "metric_time__month"], + ) + ) + assert query_result.result_df is not None, "Unexpected empty result." + + assert_str_snapshot_equal( + request=request, + mf_test_configuration=mf_test_configuration, + snapshot_id="query_output", + snapshot_str=query_result.result_df.text_format(), + sql_engine=sql_client.sql_engine_type, + ) + + +@pytest.mark.sql_engine_snapshot +@pytest.mark.duckdb_only +def test_scd_group_by_without_metric_time( # noqa: D103 + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + sql_client: SqlClient, + scd_it_helpers: IntegrationTestHelpers, +) -> None: + query_result = scd_it_helpers.mf_engine.query( + MetricFlowQueryRequest.create_with_random_request_id( + metrics=(MetricParameter(name="family_bookings"),), + group_by_names=["listing__capacity"], + order_by_names=["listing__capacity"], + ) + ) + assert query_result.result_df is not None, "Unexpected empty result." + + assert_str_snapshot_equal( + request=request, + mf_test_configuration=mf_test_configuration, + snapshot_id="query_output", + snapshot_str=query_result.result_df.text_format(), + sql_engine=sql_client.sql_engine_type, + ) + + +@pytest.mark.sql_engine_snapshot +@pytest.mark.duckdb_only +def test_scd_filter_without_metric_time( # noqa: D103 + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + sql_client: SqlClient, + scd_it_helpers: IntegrationTestHelpers, +) -> None: + query_result = scd_it_helpers.mf_engine.query( + MetricFlowQueryRequest.create_with_random_request_id( + metrics=(MetricParameter(name="family_bookings"),), + where_constraints=("{{ Dimension('listing__capacity') }} > 2",), + ) + ) + assert query_result.result_df is not None, "Unexpected empty result." + + assert_str_snapshot_equal( + request=request, + mf_test_configuration=mf_test_configuration, + snapshot_id="query_output", + snapshot_str=query_result.result_df.text_format(), + sql_engine=sql_client.sql_engine_type, + ) diff --git a/tests_metricflow/query_rendering/test_query_rendering.py b/tests_metricflow/query_rendering/test_query_rendering.py index 624c80e856..81080a6f08 100644 --- a/tests_metricflow/query_rendering/test_query_rendering.py +++ b/tests_metricflow/query_rendering/test_query_rendering.py @@ -668,3 +668,81 @@ def test_derived_metric_alias( dataflow_plan_builder=dataflow_plan_builder, query_spec=query_spec, ) + + +@pytest.mark.sql_engine_snapshot +def test_scd_dimension_filter_without_metric_time( # noqa: D103 + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + scd_column_association_resolver: ColumnAssociationResolver, + scd_query_parser: MetricFlowQueryParser, + scd_dataflow_plan_builder: DataflowPlanBuilder, + scd_dataflow_to_sql_converter: DataflowToSqlPlanConverter, + sql_client: SqlClient, +) -> None: + query_spec = scd_query_parser.parse_and_validate_query( + metric_names=("family_bookings",), + where_constraints=[ + PydanticWhereFilter( + where_sql_template="{{ Dimension('listing__capacity') }} > 2", + ) + ], + ).query_spec + + render_and_check( + request=request, + mf_test_configuration=mf_test_configuration, + dataflow_to_sql_converter=scd_dataflow_to_sql_converter, + sql_client=sql_client, + dataflow_plan_builder=scd_dataflow_plan_builder, + query_spec=query_spec, + ) + + +@pytest.mark.sql_engine_snapshot +def test_scd_dimension_group_by_without_metric_time( # noqa: D103 + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + scd_column_association_resolver: ColumnAssociationResolver, + scd_query_parser: MetricFlowQueryParser, + scd_dataflow_plan_builder: DataflowPlanBuilder, + scd_dataflow_to_sql_converter: DataflowToSqlPlanConverter, + sql_client: SqlClient, +) -> None: + query_spec = scd_query_parser.parse_and_validate_query( + metric_names=("family_bookings",), + group_by_names=("listing__capacity",), + ).query_spec + + render_and_check( + request=request, + mf_test_configuration=mf_test_configuration, + dataflow_to_sql_converter=scd_dataflow_to_sql_converter, + sql_client=sql_client, + dataflow_plan_builder=scd_dataflow_plan_builder, + query_spec=query_spec, + ) + + +@pytest.mark.sql_engine_snapshot +def test_scd_group_by_and_coarser_grain( # noqa: D103 + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + scd_query_parser: MetricFlowQueryParser, + scd_dataflow_plan_builder: DataflowPlanBuilder, + scd_dataflow_to_sql_converter: DataflowToSqlPlanConverter, + sql_client: SqlClient, +) -> None: + query_spec = scd_query_parser.parse_and_validate_query( + metric_names=("family_bookings",), + group_by_names=("listing__capacity", "metric_time__month"), + ).query_spec + + render_and_check( + request=request, + mf_test_configuration=mf_test_configuration, + dataflow_to_sql_converter=scd_dataflow_to_sql_converter, + sql_client=sql_client, + dataflow_plan_builder=scd_dataflow_plan_builder, + query_spec=query_spec, + ) diff --git a/tests_metricflow/snapshots/test_query_output.py/str/DuckDB/test_scd_filter_without_metric_time__query_output.txt b/tests_metricflow/snapshots/test_query_output.py/str/DuckDB/test_scd_filter_without_metric_time__query_output.txt new file mode 100644 index 0000000000..467922045b --- /dev/null +++ b/tests_metricflow/snapshots/test_query_output.py/str/DuckDB/test_scd_filter_without_metric_time__query_output.txt @@ -0,0 +1,6 @@ +test_name: test_scd_filter_without_metric_time +test_filename: test_query_output.py +--- + family_bookings +----------------- + 9 diff --git a/tests_metricflow/snapshots/test_query_output.py/str/DuckDB/test_scd_group_by_without_metric_time__query_output.txt b/tests_metricflow/snapshots/test_query_output.py/str/DuckDB/test_scd_group_by_without_metric_time__query_output.txt new file mode 100644 index 0000000000..d914a085a5 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_output.py/str/DuckDB/test_scd_group_by_without_metric_time__query_output.txt @@ -0,0 +1,8 @@ +test_name: test_scd_group_by_without_metric_time +test_filename: test_query_output.py +--- + listing__capacity family_bookings +------------------- ----------------- + 3 2 + 4 5 + 5 2 diff --git a/tests_metricflow/snapshots/test_query_output.py/str/DuckDB/test_scd_with_coarser_grain__query_output.txt b/tests_metricflow/snapshots/test_query_output.py/str/DuckDB/test_scd_with_coarser_grain__query_output.txt new file mode 100644 index 0000000000..db4c684c16 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_output.py/str/DuckDB/test_scd_with_coarser_grain__query_output.txt @@ -0,0 +1,8 @@ +test_name: test_scd_with_coarser_grain +test_filename: test_query_output.py +--- +metric_time__month listing__capacity family_bookings +-------------------- ------------------- ----------------- +2020-01-01T00:00:00 3 2 +2020-01-01T00:00:00 4 5 +2020-01-01T00:00:00 5 2 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_dimension_filter_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_dimension_filter_without_metric_time__plan0.sql new file mode 100644 index 0000000000..addf9f094a --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_dimension_filter_without_metric_time__plan0.sql @@ -0,0 +1,479 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: BigQuery +--- +-- Compute Metrics via Expressions +SELECT + subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings',] + SELECT + subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATETIME_TRUNC(bookings_source_src_26000.ds, day) AS ds__day + , DATETIME_TRUNC(bookings_source_src_26000.ds, isoweek) AS ds__week + , DATETIME_TRUNC(bookings_source_src_26000.ds, month) AS ds__month + , DATETIME_TRUNC(bookings_source_src_26000.ds, quarter) AS ds__quarter + , DATETIME_TRUNC(bookings_source_src_26000.ds, year) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.ds) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.ds) - 1) AS ds__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, day) AS ds_partitioned__day + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, isoweek) AS ds_partitioned__week + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, month) AS ds_partitioned__month + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, quarter) AS ds_partitioned__quarter + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, year) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.ds_partitioned) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.ds_partitioned) - 1) AS ds_partitioned__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, day) AS paid_at__day + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, isoweek) AS paid_at__week + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, month) AS paid_at__month + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, quarter) AS paid_at__quarter + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, year) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.paid_at) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.paid_at) - 1) AS paid_at__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATETIME_TRUNC(bookings_source_src_26000.ds, day) AS booking__ds__day + , DATETIME_TRUNC(bookings_source_src_26000.ds, isoweek) AS booking__ds__week + , DATETIME_TRUNC(bookings_source_src_26000.ds, month) AS booking__ds__month + , DATETIME_TRUNC(bookings_source_src_26000.ds, quarter) AS booking__ds__quarter + , DATETIME_TRUNC(bookings_source_src_26000.ds, year) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.ds) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.ds) - 1) AS booking__ds__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, day) AS booking__ds_partitioned__day + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, isoweek) AS booking__ds_partitioned__week + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, month) AS booking__ds_partitioned__month + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, quarter) AS booking__ds_partitioned__quarter + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, year) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.ds_partitioned) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.ds_partitioned) - 1) AS booking__ds_partitioned__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, day) AS booking__paid_at__day + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, isoweek) AS booking__paid_at__week + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, month) AS booking__paid_at__month + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, quarter) AS booking__paid_at__quarter + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, year) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.paid_at) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.paid_at) - 1) AS booking__paid_at__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATETIME_TRUNC(listings_src_26000.active_from, isoweek) AS window_start__week + , DATETIME_TRUNC(listings_src_26000.active_from, month) AS window_start__month + , DATETIME_TRUNC(listings_src_26000.active_from, quarter) AS window_start__quarter + , DATETIME_TRUNC(listings_src_26000.active_from, year) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , IF(EXTRACT(dayofweek FROM listings_src_26000.active_from) = 1, 7, EXTRACT(dayofweek FROM listings_src_26000.active_from) - 1) AS window_start__extract_dow + , EXTRACT(dayofyear FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATETIME_TRUNC(listings_src_26000.active_to, isoweek) AS window_end__week + , DATETIME_TRUNC(listings_src_26000.active_to, month) AS window_end__month + , DATETIME_TRUNC(listings_src_26000.active_to, quarter) AS window_end__quarter + , DATETIME_TRUNC(listings_src_26000.active_to, year) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , IF(EXTRACT(dayofweek FROM listings_src_26000.active_to) = 1, 7, EXTRACT(dayofweek FROM listings_src_26000.active_to) - 1) AS window_end__extract_dow + , EXTRACT(dayofyear FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATETIME_TRUNC(listings_src_26000.active_from, isoweek) AS listing__window_start__week + , DATETIME_TRUNC(listings_src_26000.active_from, month) AS listing__window_start__month + , DATETIME_TRUNC(listings_src_26000.active_from, quarter) AS listing__window_start__quarter + , DATETIME_TRUNC(listings_src_26000.active_from, year) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , IF(EXTRACT(dayofweek FROM listings_src_26000.active_from) = 1, 7, EXTRACT(dayofweek FROM listings_src_26000.active_from) - 1) AS listing__window_start__extract_dow + , EXTRACT(dayofyear FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATETIME_TRUNC(listings_src_26000.active_to, isoweek) AS listing__window_end__week + , DATETIME_TRUNC(listings_src_26000.active_to, month) AS listing__window_end__month + , DATETIME_TRUNC(listings_src_26000.active_to, quarter) AS listing__window_end__quarter + , DATETIME_TRUNC(listings_src_26000.active_to, year) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , IF(EXTRACT(dayofweek FROM listings_src_26000.active_to) = 1, 7, EXTRACT(dayofweek FROM listings_src_26000.active_to) - 1) AS listing__window_end__extract_dow + , EXTRACT(dayofyear FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..5e3670f4b0 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: BigQuery +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATETIME_TRUNC(ds, day) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_dimension_group_by_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_dimension_group_by_without_metric_time__plan0.sql new file mode 100644 index 0000000000..768dd8691e --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_dimension_group_by_without_metric_time__plan0.sql @@ -0,0 +1,484 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: BigQuery +--- +-- Compute Metrics via Expressions +SELECT + subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity'] + SELECT + subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATETIME_TRUNC(bookings_source_src_26000.ds, day) AS ds__day + , DATETIME_TRUNC(bookings_source_src_26000.ds, isoweek) AS ds__week + , DATETIME_TRUNC(bookings_source_src_26000.ds, month) AS ds__month + , DATETIME_TRUNC(bookings_source_src_26000.ds, quarter) AS ds__quarter + , DATETIME_TRUNC(bookings_source_src_26000.ds, year) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.ds) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.ds) - 1) AS ds__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, day) AS ds_partitioned__day + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, isoweek) AS ds_partitioned__week + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, month) AS ds_partitioned__month + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, quarter) AS ds_partitioned__quarter + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, year) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.ds_partitioned) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.ds_partitioned) - 1) AS ds_partitioned__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, day) AS paid_at__day + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, isoweek) AS paid_at__week + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, month) AS paid_at__month + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, quarter) AS paid_at__quarter + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, year) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.paid_at) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.paid_at) - 1) AS paid_at__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATETIME_TRUNC(bookings_source_src_26000.ds, day) AS booking__ds__day + , DATETIME_TRUNC(bookings_source_src_26000.ds, isoweek) AS booking__ds__week + , DATETIME_TRUNC(bookings_source_src_26000.ds, month) AS booking__ds__month + , DATETIME_TRUNC(bookings_source_src_26000.ds, quarter) AS booking__ds__quarter + , DATETIME_TRUNC(bookings_source_src_26000.ds, year) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.ds) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.ds) - 1) AS booking__ds__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, day) AS booking__ds_partitioned__day + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, isoweek) AS booking__ds_partitioned__week + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, month) AS booking__ds_partitioned__month + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, quarter) AS booking__ds_partitioned__quarter + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, year) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.ds_partitioned) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.ds_partitioned) - 1) AS booking__ds_partitioned__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, day) AS booking__paid_at__day + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, isoweek) AS booking__paid_at__week + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, month) AS booking__paid_at__month + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, quarter) AS booking__paid_at__quarter + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, year) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.paid_at) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.paid_at) - 1) AS booking__paid_at__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATETIME_TRUNC(listings_src_26000.active_from, isoweek) AS window_start__week + , DATETIME_TRUNC(listings_src_26000.active_from, month) AS window_start__month + , DATETIME_TRUNC(listings_src_26000.active_from, quarter) AS window_start__quarter + , DATETIME_TRUNC(listings_src_26000.active_from, year) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , IF(EXTRACT(dayofweek FROM listings_src_26000.active_from) = 1, 7, EXTRACT(dayofweek FROM listings_src_26000.active_from) - 1) AS window_start__extract_dow + , EXTRACT(dayofyear FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATETIME_TRUNC(listings_src_26000.active_to, isoweek) AS window_end__week + , DATETIME_TRUNC(listings_src_26000.active_to, month) AS window_end__month + , DATETIME_TRUNC(listings_src_26000.active_to, quarter) AS window_end__quarter + , DATETIME_TRUNC(listings_src_26000.active_to, year) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , IF(EXTRACT(dayofweek FROM listings_src_26000.active_to) = 1, 7, EXTRACT(dayofweek FROM listings_src_26000.active_to) - 1) AS window_end__extract_dow + , EXTRACT(dayofyear FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATETIME_TRUNC(listings_src_26000.active_from, isoweek) AS listing__window_start__week + , DATETIME_TRUNC(listings_src_26000.active_from, month) AS listing__window_start__month + , DATETIME_TRUNC(listings_src_26000.active_from, quarter) AS listing__window_start__quarter + , DATETIME_TRUNC(listings_src_26000.active_from, year) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , IF(EXTRACT(dayofweek FROM listings_src_26000.active_from) = 1, 7, EXTRACT(dayofweek FROM listings_src_26000.active_from) - 1) AS listing__window_start__extract_dow + , EXTRACT(dayofyear FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATETIME_TRUNC(listings_src_26000.active_to, isoweek) AS listing__window_end__week + , DATETIME_TRUNC(listings_src_26000.active_to, month) AS listing__window_end__month + , DATETIME_TRUNC(listings_src_26000.active_to, quarter) AS listing__window_end__quarter + , DATETIME_TRUNC(listings_src_26000.active_to, year) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , IF(EXTRACT(dayofweek FROM listings_src_26000.active_to) = 1, 7, EXTRACT(dayofweek FROM listings_src_26000.active_to) - 1) AS listing__window_end__extract_dow + , EXTRACT(dayofyear FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..1c757da2a9 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql @@ -0,0 +1,45 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: BigQuery +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATETIME_TRUNC(ds, day) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_group_by_and_coarser_grain__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_group_by_and_coarser_grain__plan0.sql new file mode 100644 index 0000000000..3438899d94 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_group_by_and_coarser_grain__plan0.sql @@ -0,0 +1,488 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: BigQuery +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__month + , subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__month + , subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] + SELECT + subq_5.metric_time__month + , subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATETIME_TRUNC(bookings_source_src_26000.ds, day) AS ds__day + , DATETIME_TRUNC(bookings_source_src_26000.ds, isoweek) AS ds__week + , DATETIME_TRUNC(bookings_source_src_26000.ds, month) AS ds__month + , DATETIME_TRUNC(bookings_source_src_26000.ds, quarter) AS ds__quarter + , DATETIME_TRUNC(bookings_source_src_26000.ds, year) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.ds) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.ds) - 1) AS ds__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, day) AS ds_partitioned__day + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, isoweek) AS ds_partitioned__week + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, month) AS ds_partitioned__month + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, quarter) AS ds_partitioned__quarter + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, year) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.ds_partitioned) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.ds_partitioned) - 1) AS ds_partitioned__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, day) AS paid_at__day + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, isoweek) AS paid_at__week + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, month) AS paid_at__month + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, quarter) AS paid_at__quarter + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, year) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.paid_at) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.paid_at) - 1) AS paid_at__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATETIME_TRUNC(bookings_source_src_26000.ds, day) AS booking__ds__day + , DATETIME_TRUNC(bookings_source_src_26000.ds, isoweek) AS booking__ds__week + , DATETIME_TRUNC(bookings_source_src_26000.ds, month) AS booking__ds__month + , DATETIME_TRUNC(bookings_source_src_26000.ds, quarter) AS booking__ds__quarter + , DATETIME_TRUNC(bookings_source_src_26000.ds, year) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.ds) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.ds) - 1) AS booking__ds__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, day) AS booking__ds_partitioned__day + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, isoweek) AS booking__ds_partitioned__week + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, month) AS booking__ds_partitioned__month + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, quarter) AS booking__ds_partitioned__quarter + , DATETIME_TRUNC(bookings_source_src_26000.ds_partitioned, year) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.ds_partitioned) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.ds_partitioned) - 1) AS booking__ds_partitioned__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, day) AS booking__paid_at__day + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, isoweek) AS booking__paid_at__week + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, month) AS booking__paid_at__month + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, quarter) AS booking__paid_at__quarter + , DATETIME_TRUNC(bookings_source_src_26000.paid_at, year) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , IF(EXTRACT(dayofweek FROM bookings_source_src_26000.paid_at) = 1, 7, EXTRACT(dayofweek FROM bookings_source_src_26000.paid_at) - 1) AS booking__paid_at__extract_dow + , EXTRACT(dayofyear FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATETIME_TRUNC(listings_src_26000.active_from, isoweek) AS window_start__week + , DATETIME_TRUNC(listings_src_26000.active_from, month) AS window_start__month + , DATETIME_TRUNC(listings_src_26000.active_from, quarter) AS window_start__quarter + , DATETIME_TRUNC(listings_src_26000.active_from, year) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , IF(EXTRACT(dayofweek FROM listings_src_26000.active_from) = 1, 7, EXTRACT(dayofweek FROM listings_src_26000.active_from) - 1) AS window_start__extract_dow + , EXTRACT(dayofyear FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATETIME_TRUNC(listings_src_26000.active_to, isoweek) AS window_end__week + , DATETIME_TRUNC(listings_src_26000.active_to, month) AS window_end__month + , DATETIME_TRUNC(listings_src_26000.active_to, quarter) AS window_end__quarter + , DATETIME_TRUNC(listings_src_26000.active_to, year) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , IF(EXTRACT(dayofweek FROM listings_src_26000.active_to) = 1, 7, EXTRACT(dayofweek FROM listings_src_26000.active_to) - 1) AS window_end__extract_dow + , EXTRACT(dayofyear FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATETIME_TRUNC(listings_src_26000.active_from, isoweek) AS listing__window_start__week + , DATETIME_TRUNC(listings_src_26000.active_from, month) AS listing__window_start__month + , DATETIME_TRUNC(listings_src_26000.active_from, quarter) AS listing__window_start__quarter + , DATETIME_TRUNC(listings_src_26000.active_from, year) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , IF(EXTRACT(dayofweek FROM listings_src_26000.active_from) = 1, 7, EXTRACT(dayofweek FROM listings_src_26000.active_from) - 1) AS listing__window_start__extract_dow + , EXTRACT(dayofyear FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATETIME_TRUNC(listings_src_26000.active_to, isoweek) AS listing__window_end__week + , DATETIME_TRUNC(listings_src_26000.active_to, month) AS listing__window_end__month + , DATETIME_TRUNC(listings_src_26000.active_to, quarter) AS listing__window_end__quarter + , DATETIME_TRUNC(listings_src_26000.active_to, year) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , IF(EXTRACT(dayofweek FROM listings_src_26000.active_to) = 1, 7, EXTRACT(dayofweek FROM listings_src_26000.active_to) - 1) AS listing__window_end__extract_dow + , EXTRACT(dayofyear FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + metric_time__month + , listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_group_by_and_coarser_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_group_by_and_coarser_grain__plan0_optimized.sql new file mode 100644 index 0000000000..aec246d506 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/BigQuery/test_scd_group_by_and_coarser_grain__plan0_optimized.sql @@ -0,0 +1,49 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: BigQuery +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__month + , listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.metric_time__month AS metric_time__month + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATETIME_TRUNC(ds, day) AS metric_time__day + , DATETIME_TRUNC(ds, month) AS metric_time__month + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + metric_time__month + , listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_dimension_filter_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_dimension_filter_without_metric_time__plan0.sql new file mode 100644 index 0000000000..e55ce58c95 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_dimension_filter_without_metric_time__plan0.sql @@ -0,0 +1,479 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Databricks +--- +-- Compute Metrics via Expressions +SELECT + subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings',] + SELECT + subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..1db20ff061 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Databricks +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_dimension_group_by_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_dimension_group_by_without_metric_time__plan0.sql new file mode 100644 index 0000000000..8a511182e5 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_dimension_group_by_without_metric_time__plan0.sql @@ -0,0 +1,484 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Databricks +--- +-- Compute Metrics via Expressions +SELECT + subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity'] + SELECT + subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + subq_6.listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..1c10bcf127 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql @@ -0,0 +1,45 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Databricks +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_group_by_and_coarser_grain__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_group_by_and_coarser_grain__plan0.sql new file mode 100644 index 0000000000..01f46d0bf9 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_group_by_and_coarser_grain__plan0.sql @@ -0,0 +1,488 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: Databricks +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__month + , subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__month + , subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] + SELECT + subq_5.metric_time__month + , subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(DAYOFWEEK_ISO FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + subq_6.metric_time__month + , subq_6.listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_group_by_and_coarser_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_group_by_and_coarser_grain__plan0_optimized.sql new file mode 100644 index 0000000000..7a1e756e15 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Databricks/test_scd_group_by_and_coarser_grain__plan0_optimized.sql @@ -0,0 +1,49 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: Databricks +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__month + , listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.metric_time__month AS metric_time__month + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('month', ds) AS metric_time__month + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + metric_time__month + , listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_dimension_filter_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_dimension_filter_without_metric_time__plan0.sql new file mode 100644 index 0000000000..a9076ad160 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_dimension_filter_without_metric_time__plan0.sql @@ -0,0 +1,479 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: DuckDB +--- +-- Compute Metrics via Expressions +SELECT + subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings',] + SELECT + subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..713fc82c6f --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: DuckDB +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_dimension_group_by_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_dimension_group_by_without_metric_time__plan0.sql new file mode 100644 index 0000000000..54859d5b86 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_dimension_group_by_without_metric_time__plan0.sql @@ -0,0 +1,484 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: DuckDB +--- +-- Compute Metrics via Expressions +SELECT + subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity'] + SELECT + subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + subq_6.listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..fa40332357 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql @@ -0,0 +1,45 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: DuckDB +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_group_by_and_coarser_grain__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_group_by_and_coarser_grain__plan0.sql new file mode 100644 index 0000000000..03e0a00850 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_group_by_and_coarser_grain__plan0.sql @@ -0,0 +1,488 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: DuckDB +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__month + , subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__month + , subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] + SELECT + subq_5.metric_time__month + , subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + subq_6.metric_time__month + , subq_6.listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_group_by_and_coarser_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_group_by_and_coarser_grain__plan0_optimized.sql new file mode 100644 index 0000000000..b814c10e94 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/DuckDB/test_scd_group_by_and_coarser_grain__plan0_optimized.sql @@ -0,0 +1,49 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: DuckDB +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__month + , listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.metric_time__month AS metric_time__month + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('month', ds) AS metric_time__month + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + metric_time__month + , listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_dimension_filter_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_dimension_filter_without_metric_time__plan0.sql new file mode 100644 index 0000000000..4ee870464c --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_dimension_filter_without_metric_time__plan0.sql @@ -0,0 +1,479 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Postgres +--- +-- Compute Metrics via Expressions +SELECT + subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings',] + SELECT + subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..6550f32f04 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Postgres +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_dimension_group_by_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_dimension_group_by_without_metric_time__plan0.sql new file mode 100644 index 0000000000..5c6b7f0d80 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_dimension_group_by_without_metric_time__plan0.sql @@ -0,0 +1,484 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Postgres +--- +-- Compute Metrics via Expressions +SELECT + subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity'] + SELECT + subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + subq_6.listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..fcdea83a0d --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql @@ -0,0 +1,45 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Postgres +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_group_by_and_coarser_grain__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_group_by_and_coarser_grain__plan0.sql new file mode 100644 index 0000000000..a1af1959b5 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_group_by_and_coarser_grain__plan0.sql @@ -0,0 +1,488 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: Postgres +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__month + , subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__month + , subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] + SELECT + subq_5.metric_time__month + , subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(isodow FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(isodow FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + subq_6.metric_time__month + , subq_6.listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_group_by_and_coarser_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_group_by_and_coarser_grain__plan0_optimized.sql new file mode 100644 index 0000000000..3d923b43b9 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Postgres/test_scd_group_by_and_coarser_grain__plan0_optimized.sql @@ -0,0 +1,49 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: Postgres +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__month + , listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.metric_time__month AS metric_time__month + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('month', ds) AS metric_time__month + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + metric_time__month + , listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_dimension_filter_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_dimension_filter_without_metric_time__plan0.sql new file mode 100644 index 0000000000..e9dc6ba2cc --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_dimension_filter_without_metric_time__plan0.sql @@ -0,0 +1,479 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Redshift +--- +-- Compute Metrics via Expressions +SELECT + subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings',] + SELECT + subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.ds) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.ds) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.ds) END AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) END AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.paid_at) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.paid_at) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.paid_at) END AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.ds) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.ds) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.ds) END AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) END AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.paid_at) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.paid_at) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.paid_at) END AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , CASE WHEN EXTRACT(dow FROM listings_src_26000.active_from) = 0 THEN EXTRACT(dow FROM listings_src_26000.active_from) + 7 ELSE EXTRACT(dow FROM listings_src_26000.active_from) END AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , CASE WHEN EXTRACT(dow FROM listings_src_26000.active_to) = 0 THEN EXTRACT(dow FROM listings_src_26000.active_to) + 7 ELSE EXTRACT(dow FROM listings_src_26000.active_to) END AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , CASE WHEN EXTRACT(dow FROM listings_src_26000.active_from) = 0 THEN EXTRACT(dow FROM listings_src_26000.active_from) + 7 ELSE EXTRACT(dow FROM listings_src_26000.active_from) END AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , CASE WHEN EXTRACT(dow FROM listings_src_26000.active_to) = 0 THEN EXTRACT(dow FROM listings_src_26000.active_to) + 7 ELSE EXTRACT(dow FROM listings_src_26000.active_to) END AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..f4c2bbb330 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Redshift +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_dimension_group_by_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_dimension_group_by_without_metric_time__plan0.sql new file mode 100644 index 0000000000..6f8c222aae --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_dimension_group_by_without_metric_time__plan0.sql @@ -0,0 +1,484 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Redshift +--- +-- Compute Metrics via Expressions +SELECT + subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity'] + SELECT + subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.ds) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.ds) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.ds) END AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) END AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.paid_at) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.paid_at) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.paid_at) END AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.ds) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.ds) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.ds) END AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) END AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.paid_at) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.paid_at) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.paid_at) END AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , CASE WHEN EXTRACT(dow FROM listings_src_26000.active_from) = 0 THEN EXTRACT(dow FROM listings_src_26000.active_from) + 7 ELSE EXTRACT(dow FROM listings_src_26000.active_from) END AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , CASE WHEN EXTRACT(dow FROM listings_src_26000.active_to) = 0 THEN EXTRACT(dow FROM listings_src_26000.active_to) + 7 ELSE EXTRACT(dow FROM listings_src_26000.active_to) END AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , CASE WHEN EXTRACT(dow FROM listings_src_26000.active_from) = 0 THEN EXTRACT(dow FROM listings_src_26000.active_from) + 7 ELSE EXTRACT(dow FROM listings_src_26000.active_from) END AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , CASE WHEN EXTRACT(dow FROM listings_src_26000.active_to) = 0 THEN EXTRACT(dow FROM listings_src_26000.active_to) + 7 ELSE EXTRACT(dow FROM listings_src_26000.active_to) END AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + subq_6.listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..bf82f10980 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql @@ -0,0 +1,45 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Redshift +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_group_by_and_coarser_grain__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_group_by_and_coarser_grain__plan0.sql new file mode 100644 index 0000000000..3f79410ba3 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_group_by_and_coarser_grain__plan0.sql @@ -0,0 +1,488 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: Redshift +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__month + , subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__month + , subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] + SELECT + subq_5.metric_time__month + , subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.ds) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.ds) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.ds) END AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) END AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.paid_at) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.paid_at) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.paid_at) END AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.ds) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.ds) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.ds) END AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.ds_partitioned) END AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , CASE WHEN EXTRACT(dow FROM bookings_source_src_26000.paid_at) = 0 THEN EXTRACT(dow FROM bookings_source_src_26000.paid_at) + 7 ELSE EXTRACT(dow FROM bookings_source_src_26000.paid_at) END AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , CASE WHEN EXTRACT(dow FROM listings_src_26000.active_from) = 0 THEN EXTRACT(dow FROM listings_src_26000.active_from) + 7 ELSE EXTRACT(dow FROM listings_src_26000.active_from) END AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , CASE WHEN EXTRACT(dow FROM listings_src_26000.active_to) = 0 THEN EXTRACT(dow FROM listings_src_26000.active_to) + 7 ELSE EXTRACT(dow FROM listings_src_26000.active_to) END AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , CASE WHEN EXTRACT(dow FROM listings_src_26000.active_from) = 0 THEN EXTRACT(dow FROM listings_src_26000.active_from) + 7 ELSE EXTRACT(dow FROM listings_src_26000.active_from) END AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , CASE WHEN EXTRACT(dow FROM listings_src_26000.active_to) = 0 THEN EXTRACT(dow FROM listings_src_26000.active_to) + 7 ELSE EXTRACT(dow FROM listings_src_26000.active_to) END AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + subq_6.metric_time__month + , subq_6.listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_group_by_and_coarser_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_group_by_and_coarser_grain__plan0_optimized.sql new file mode 100644 index 0000000000..6735dc2663 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Redshift/test_scd_group_by_and_coarser_grain__plan0_optimized.sql @@ -0,0 +1,49 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: Redshift +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__month + , listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.metric_time__month AS metric_time__month + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('month', ds) AS metric_time__month + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + metric_time__month + , listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_dimension_filter_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_dimension_filter_without_metric_time__plan0.sql new file mode 100644 index 0000000000..fe5e775254 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_dimension_filter_without_metric_time__plan0.sql @@ -0,0 +1,479 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Snowflake +--- +-- Compute Metrics via Expressions +SELECT + subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings',] + SELECT + subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(dayofweekiso FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(dayofweekiso FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(dayofweekiso FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(dayofweekiso FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..631cbd9c14 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Snowflake +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_dimension_group_by_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_dimension_group_by_without_metric_time__plan0.sql new file mode 100644 index 0000000000..887064d257 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_dimension_group_by_without_metric_time__plan0.sql @@ -0,0 +1,484 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Snowflake +--- +-- Compute Metrics via Expressions +SELECT + subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity'] + SELECT + subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(dayofweekiso FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(dayofweekiso FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(dayofweekiso FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(dayofweekiso FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + subq_6.listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..3d69717a93 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql @@ -0,0 +1,45 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Snowflake +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_group_by_and_coarser_grain__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_group_by_and_coarser_grain__plan0.sql new file mode 100644 index 0000000000..9f2d1fbdb9 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_group_by_and_coarser_grain__plan0.sql @@ -0,0 +1,488 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: Snowflake +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__month + , subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__month + , subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] + SELECT + subq_5.metric_time__month + , subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(dayofweekiso FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(dayofweekiso FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(dayofweekiso FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(dayofweekiso FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(dayofweekiso FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + subq_6.metric_time__month + , subq_6.listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_group_by_and_coarser_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_group_by_and_coarser_grain__plan0_optimized.sql new file mode 100644 index 0000000000..ac5f6540e9 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Snowflake/test_scd_group_by_and_coarser_grain__plan0_optimized.sql @@ -0,0 +1,49 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: Snowflake +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__month + , listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.metric_time__month AS metric_time__month + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('month', ds) AS metric_time__month + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + metric_time__month + , listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_dimension_filter_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_dimension_filter_without_metric_time__plan0.sql new file mode 100644 index 0000000000..a32b229380 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_dimension_filter_without_metric_time__plan0.sql @@ -0,0 +1,479 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Trino +--- +-- Compute Metrics via Expressions +SELECT + subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings',] + SELECT + subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(DAY_OF_WEEK FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(DAY_OF_WEEK FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(DAY_OF_WEEK FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(DAY_OF_WEEK FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..ea26b89602 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_dimension_filter_without_metric_time__plan0_optimized.sql @@ -0,0 +1,42 @@ +test_name: test_scd_dimension_filter_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Trino +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings',] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_dimension_group_by_without_metric_time__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_dimension_group_by_without_metric_time__plan0.sql new file mode 100644 index 0000000000..b5fef9202b --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_dimension_group_by_without_metric_time__plan0.sql @@ -0,0 +1,484 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Trino +--- +-- Compute Metrics via Expressions +SELECT + subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity'] + SELECT + subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(DAY_OF_WEEK FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(DAY_OF_WEEK FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(DAY_OF_WEEK FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(DAY_OF_WEEK FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + subq_6.listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql new file mode 100644 index 0000000000..a0c6cba99d --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_dimension_group_by_without_metric_time__plan0_optimized.sql @@ -0,0 +1,45 @@ +test_name: test_scd_dimension_group_by_without_metric_time +test_filename: test_query_rendering.py +sql_engine: Trino +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + listing__capacity diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_group_by_and_coarser_grain__plan0.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_group_by_and_coarser_grain__plan0.sql new file mode 100644 index 0000000000..d14d1233e0 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_group_by_and_coarser_grain__plan0.sql @@ -0,0 +1,488 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: Trino +--- +-- Compute Metrics via Expressions +SELECT + subq_7.metric_time__month + , subq_7.listing__capacity + , subq_7.bookings AS family_bookings +FROM ( + -- Aggregate Measures + SELECT + subq_6.metric_time__month + , subq_6.listing__capacity + , SUM(subq_6.bookings) AS bookings + FROM ( + -- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] + SELECT + subq_5.metric_time__month + , subq_5.listing__capacity + , subq_5.bookings + FROM ( + -- Constrain Output with WHERE + SELECT + subq_4.ds__day + , subq_4.ds__week + , subq_4.ds__month + , subq_4.ds__quarter + , subq_4.ds__year + , subq_4.ds__extract_year + , subq_4.ds__extract_quarter + , subq_4.ds__extract_month + , subq_4.ds__extract_day + , subq_4.ds__extract_dow + , subq_4.ds__extract_doy + , subq_4.ds_partitioned__day + , subq_4.ds_partitioned__week + , subq_4.ds_partitioned__month + , subq_4.ds_partitioned__quarter + , subq_4.ds_partitioned__year + , subq_4.ds_partitioned__extract_year + , subq_4.ds_partitioned__extract_quarter + , subq_4.ds_partitioned__extract_month + , subq_4.ds_partitioned__extract_day + , subq_4.ds_partitioned__extract_dow + , subq_4.ds_partitioned__extract_doy + , subq_4.paid_at__day + , subq_4.paid_at__week + , subq_4.paid_at__month + , subq_4.paid_at__quarter + , subq_4.paid_at__year + , subq_4.paid_at__extract_year + , subq_4.paid_at__extract_quarter + , subq_4.paid_at__extract_month + , subq_4.paid_at__extract_day + , subq_4.paid_at__extract_dow + , subq_4.paid_at__extract_doy + , subq_4.booking__ds__day + , subq_4.booking__ds__week + , subq_4.booking__ds__month + , subq_4.booking__ds__quarter + , subq_4.booking__ds__year + , subq_4.booking__ds__extract_year + , subq_4.booking__ds__extract_quarter + , subq_4.booking__ds__extract_month + , subq_4.booking__ds__extract_day + , subq_4.booking__ds__extract_dow + , subq_4.booking__ds__extract_doy + , subq_4.booking__ds_partitioned__day + , subq_4.booking__ds_partitioned__week + , subq_4.booking__ds_partitioned__month + , subq_4.booking__ds_partitioned__quarter + , subq_4.booking__ds_partitioned__year + , subq_4.booking__ds_partitioned__extract_year + , subq_4.booking__ds_partitioned__extract_quarter + , subq_4.booking__ds_partitioned__extract_month + , subq_4.booking__ds_partitioned__extract_day + , subq_4.booking__ds_partitioned__extract_dow + , subq_4.booking__ds_partitioned__extract_doy + , subq_4.booking__paid_at__day + , subq_4.booking__paid_at__week + , subq_4.booking__paid_at__month + , subq_4.booking__paid_at__quarter + , subq_4.booking__paid_at__year + , subq_4.booking__paid_at__extract_year + , subq_4.booking__paid_at__extract_quarter + , subq_4.booking__paid_at__extract_month + , subq_4.booking__paid_at__extract_day + , subq_4.booking__paid_at__extract_dow + , subq_4.booking__paid_at__extract_doy + , subq_4.metric_time__day + , subq_4.metric_time__week + , subq_4.metric_time__month + , subq_4.metric_time__quarter + , subq_4.metric_time__year + , subq_4.metric_time__extract_year + , subq_4.metric_time__extract_quarter + , subq_4.metric_time__extract_month + , subq_4.metric_time__extract_day + , subq_4.metric_time__extract_dow + , subq_4.metric_time__extract_doy + , subq_4.listing__window_start__day + , subq_4.listing__window_end__day + , subq_4.listing + , subq_4.guest + , subq_4.host + , subq_4.user + , subq_4.booking__listing + , subq_4.booking__guest + , subq_4.booking__host + , subq_4.booking__user + , subq_4.is_instant + , subq_4.booking__is_instant + , subq_4.listing__capacity + , subq_4.bookings + , subq_4.instant_bookings + , subq_4.booking_value + , subq_4.bookers + , subq_4.average_booking_value + FROM ( + -- Join Standard Outputs + SELECT + subq_3.capacity AS listing__capacity + , subq_3.window_start__day AS listing__window_start__day + , subq_3.window_end__day AS listing__window_end__day + , subq_1.ds__day AS ds__day + , subq_1.ds__week AS ds__week + , subq_1.ds__month AS ds__month + , subq_1.ds__quarter AS ds__quarter + , subq_1.ds__year AS ds__year + , subq_1.ds__extract_year AS ds__extract_year + , subq_1.ds__extract_quarter AS ds__extract_quarter + , subq_1.ds__extract_month AS ds__extract_month + , subq_1.ds__extract_day AS ds__extract_day + , subq_1.ds__extract_dow AS ds__extract_dow + , subq_1.ds__extract_doy AS ds__extract_doy + , subq_1.ds_partitioned__day AS ds_partitioned__day + , subq_1.ds_partitioned__week AS ds_partitioned__week + , subq_1.ds_partitioned__month AS ds_partitioned__month + , subq_1.ds_partitioned__quarter AS ds_partitioned__quarter + , subq_1.ds_partitioned__year AS ds_partitioned__year + , subq_1.ds_partitioned__extract_year AS ds_partitioned__extract_year + , subq_1.ds_partitioned__extract_quarter AS ds_partitioned__extract_quarter + , subq_1.ds_partitioned__extract_month AS ds_partitioned__extract_month + , subq_1.ds_partitioned__extract_day AS ds_partitioned__extract_day + , subq_1.ds_partitioned__extract_dow AS ds_partitioned__extract_dow + , subq_1.ds_partitioned__extract_doy AS ds_partitioned__extract_doy + , subq_1.paid_at__day AS paid_at__day + , subq_1.paid_at__week AS paid_at__week + , subq_1.paid_at__month AS paid_at__month + , subq_1.paid_at__quarter AS paid_at__quarter + , subq_1.paid_at__year AS paid_at__year + , subq_1.paid_at__extract_year AS paid_at__extract_year + , subq_1.paid_at__extract_quarter AS paid_at__extract_quarter + , subq_1.paid_at__extract_month AS paid_at__extract_month + , subq_1.paid_at__extract_day AS paid_at__extract_day + , subq_1.paid_at__extract_dow AS paid_at__extract_dow + , subq_1.paid_at__extract_doy AS paid_at__extract_doy + , subq_1.booking__ds__day AS booking__ds__day + , subq_1.booking__ds__week AS booking__ds__week + , subq_1.booking__ds__month AS booking__ds__month + , subq_1.booking__ds__quarter AS booking__ds__quarter + , subq_1.booking__ds__year AS booking__ds__year + , subq_1.booking__ds__extract_year AS booking__ds__extract_year + , subq_1.booking__ds__extract_quarter AS booking__ds__extract_quarter + , subq_1.booking__ds__extract_month AS booking__ds__extract_month + , subq_1.booking__ds__extract_day AS booking__ds__extract_day + , subq_1.booking__ds__extract_dow AS booking__ds__extract_dow + , subq_1.booking__ds__extract_doy AS booking__ds__extract_doy + , subq_1.booking__ds_partitioned__day AS booking__ds_partitioned__day + , subq_1.booking__ds_partitioned__week AS booking__ds_partitioned__week + , subq_1.booking__ds_partitioned__month AS booking__ds_partitioned__month + , subq_1.booking__ds_partitioned__quarter AS booking__ds_partitioned__quarter + , subq_1.booking__ds_partitioned__year AS booking__ds_partitioned__year + , subq_1.booking__ds_partitioned__extract_year AS booking__ds_partitioned__extract_year + , subq_1.booking__ds_partitioned__extract_quarter AS booking__ds_partitioned__extract_quarter + , subq_1.booking__ds_partitioned__extract_month AS booking__ds_partitioned__extract_month + , subq_1.booking__ds_partitioned__extract_day AS booking__ds_partitioned__extract_day + , subq_1.booking__ds_partitioned__extract_dow AS booking__ds_partitioned__extract_dow + , subq_1.booking__ds_partitioned__extract_doy AS booking__ds_partitioned__extract_doy + , subq_1.booking__paid_at__day AS booking__paid_at__day + , subq_1.booking__paid_at__week AS booking__paid_at__week + , subq_1.booking__paid_at__month AS booking__paid_at__month + , subq_1.booking__paid_at__quarter AS booking__paid_at__quarter + , subq_1.booking__paid_at__year AS booking__paid_at__year + , subq_1.booking__paid_at__extract_year AS booking__paid_at__extract_year + , subq_1.booking__paid_at__extract_quarter AS booking__paid_at__extract_quarter + , subq_1.booking__paid_at__extract_month AS booking__paid_at__extract_month + , subq_1.booking__paid_at__extract_day AS booking__paid_at__extract_day + , subq_1.booking__paid_at__extract_dow AS booking__paid_at__extract_dow + , subq_1.booking__paid_at__extract_doy AS booking__paid_at__extract_doy + , subq_1.metric_time__day AS metric_time__day + , subq_1.metric_time__week AS metric_time__week + , subq_1.metric_time__month AS metric_time__month + , subq_1.metric_time__quarter AS metric_time__quarter + , subq_1.metric_time__year AS metric_time__year + , subq_1.metric_time__extract_year AS metric_time__extract_year + , subq_1.metric_time__extract_quarter AS metric_time__extract_quarter + , subq_1.metric_time__extract_month AS metric_time__extract_month + , subq_1.metric_time__extract_day AS metric_time__extract_day + , subq_1.metric_time__extract_dow AS metric_time__extract_dow + , subq_1.metric_time__extract_doy AS metric_time__extract_doy + , subq_1.listing AS listing + , subq_1.guest AS guest + , subq_1.host AS host + , subq_1.user AS user + , subq_1.booking__listing AS booking__listing + , subq_1.booking__guest AS booking__guest + , subq_1.booking__host AS booking__host + , subq_1.booking__user AS booking__user + , subq_1.is_instant AS is_instant + , subq_1.booking__is_instant AS booking__is_instant + , subq_1.bookings AS bookings + , subq_1.instant_bookings AS instant_bookings + , subq_1.booking_value AS booking_value + , subq_1.bookers AS bookers + , subq_1.average_booking_value AS average_booking_value + FROM ( + -- Metric Time Dimension 'ds' + SELECT + subq_0.ds__day + , subq_0.ds__week + , subq_0.ds__month + , subq_0.ds__quarter + , subq_0.ds__year + , subq_0.ds__extract_year + , subq_0.ds__extract_quarter + , subq_0.ds__extract_month + , subq_0.ds__extract_day + , subq_0.ds__extract_dow + , subq_0.ds__extract_doy + , subq_0.ds_partitioned__day + , subq_0.ds_partitioned__week + , subq_0.ds_partitioned__month + , subq_0.ds_partitioned__quarter + , subq_0.ds_partitioned__year + , subq_0.ds_partitioned__extract_year + , subq_0.ds_partitioned__extract_quarter + , subq_0.ds_partitioned__extract_month + , subq_0.ds_partitioned__extract_day + , subq_0.ds_partitioned__extract_dow + , subq_0.ds_partitioned__extract_doy + , subq_0.paid_at__day + , subq_0.paid_at__week + , subq_0.paid_at__month + , subq_0.paid_at__quarter + , subq_0.paid_at__year + , subq_0.paid_at__extract_year + , subq_0.paid_at__extract_quarter + , subq_0.paid_at__extract_month + , subq_0.paid_at__extract_day + , subq_0.paid_at__extract_dow + , subq_0.paid_at__extract_doy + , subq_0.booking__ds__day + , subq_0.booking__ds__week + , subq_0.booking__ds__month + , subq_0.booking__ds__quarter + , subq_0.booking__ds__year + , subq_0.booking__ds__extract_year + , subq_0.booking__ds__extract_quarter + , subq_0.booking__ds__extract_month + , subq_0.booking__ds__extract_day + , subq_0.booking__ds__extract_dow + , subq_0.booking__ds__extract_doy + , subq_0.booking__ds_partitioned__day + , subq_0.booking__ds_partitioned__week + , subq_0.booking__ds_partitioned__month + , subq_0.booking__ds_partitioned__quarter + , subq_0.booking__ds_partitioned__year + , subq_0.booking__ds_partitioned__extract_year + , subq_0.booking__ds_partitioned__extract_quarter + , subq_0.booking__ds_partitioned__extract_month + , subq_0.booking__ds_partitioned__extract_day + , subq_0.booking__ds_partitioned__extract_dow + , subq_0.booking__ds_partitioned__extract_doy + , subq_0.booking__paid_at__day + , subq_0.booking__paid_at__week + , subq_0.booking__paid_at__month + , subq_0.booking__paid_at__quarter + , subq_0.booking__paid_at__year + , subq_0.booking__paid_at__extract_year + , subq_0.booking__paid_at__extract_quarter + , subq_0.booking__paid_at__extract_month + , subq_0.booking__paid_at__extract_day + , subq_0.booking__paid_at__extract_dow + , subq_0.booking__paid_at__extract_doy + , subq_0.ds__day AS metric_time__day + , subq_0.ds__week AS metric_time__week + , subq_0.ds__month AS metric_time__month + , subq_0.ds__quarter AS metric_time__quarter + , subq_0.ds__year AS metric_time__year + , subq_0.ds__extract_year AS metric_time__extract_year + , subq_0.ds__extract_quarter AS metric_time__extract_quarter + , subq_0.ds__extract_month AS metric_time__extract_month + , subq_0.ds__extract_day AS metric_time__extract_day + , subq_0.ds__extract_dow AS metric_time__extract_dow + , subq_0.ds__extract_doy AS metric_time__extract_doy + , subq_0.listing + , subq_0.guest + , subq_0.host + , subq_0.user + , subq_0.booking__listing + , subq_0.booking__guest + , subq_0.booking__host + , subq_0.booking__user + , subq_0.is_instant + , subq_0.booking__is_instant + , subq_0.bookings + , subq_0.instant_bookings + , subq_0.booking_value + , subq_0.bookers + , subq_0.average_booking_value + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + SELECT + 1 AS bookings + , CASE WHEN is_instant THEN 1 ELSE 0 END AS instant_bookings + , bookings_source_src_26000.booking_value + , bookings_source_src_26000.guest_id AS bookers + , bookings_source_src_26000.booking_value AS average_booking_value + , bookings_source_src_26000.booking_value AS booking_payments + , bookings_source_src_26000.is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS ds__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.ds) AS ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS paid_at__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.paid_at) AS paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS paid_at__extract_doy + , bookings_source_src_26000.is_instant AS booking__is_instant + , DATE_TRUNC('day', bookings_source_src_26000.ds) AS booking__ds__day + , DATE_TRUNC('week', bookings_source_src_26000.ds) AS booking__ds__week + , DATE_TRUNC('month', bookings_source_src_26000.ds) AS booking__ds__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds) AS booking__ds__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds) AS booking__ds__year + , EXTRACT(year FROM bookings_source_src_26000.ds) AS booking__ds__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds) AS booking__ds__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds) AS booking__ds__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds) AS booking__ds__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.ds) AS booking__ds__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds) AS booking__ds__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__day + , DATE_TRUNC('week', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__week + , DATE_TRUNC('month', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__month + , DATE_TRUNC('quarter', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__quarter + , DATE_TRUNC('year', bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__year + , EXTRACT(year FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_month + , EXTRACT(day FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.ds_partitioned) AS booking__ds_partitioned__extract_doy + , DATE_TRUNC('day', bookings_source_src_26000.paid_at) AS booking__paid_at__day + , DATE_TRUNC('week', bookings_source_src_26000.paid_at) AS booking__paid_at__week + , DATE_TRUNC('month', bookings_source_src_26000.paid_at) AS booking__paid_at__month + , DATE_TRUNC('quarter', bookings_source_src_26000.paid_at) AS booking__paid_at__quarter + , DATE_TRUNC('year', bookings_source_src_26000.paid_at) AS booking__paid_at__year + , EXTRACT(year FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_year + , EXTRACT(quarter FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_quarter + , EXTRACT(month FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_month + , EXTRACT(day FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_day + , EXTRACT(DAY_OF_WEEK FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_dow + , EXTRACT(doy FROM bookings_source_src_26000.paid_at) AS booking__paid_at__extract_doy + , bookings_source_src_26000.listing_id AS listing + , bookings_source_src_26000.guest_id AS guest + , bookings_source_src_26000.host_id AS host + , bookings_source_src_26000.guest_id AS user + , bookings_source_src_26000.listing_id AS booking__listing + , bookings_source_src_26000.guest_id AS booking__guest + , bookings_source_src_26000.host_id AS booking__host + , bookings_source_src_26000.guest_id AS booking__user + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_0 + ) subq_1 + LEFT OUTER JOIN ( + -- Pass Only Elements: ['capacity', 'window_start__day', 'window_end__day', 'listing'] + SELECT + subq_2.window_start__day + , subq_2.window_end__day + , subq_2.listing + , subq_2.capacity + FROM ( + -- Read Elements From Semantic Model 'listings' + SELECT + listings_src_26000.active_from AS window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS window_start__extract_day + , EXTRACT(DAY_OF_WEEK FROM listings_src_26000.active_from) AS window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS window_start__extract_doy + , listings_src_26000.active_to AS window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS window_end__extract_day + , EXTRACT(DAY_OF_WEEK FROM listings_src_26000.active_to) AS window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS window_end__extract_doy + , listings_src_26000.country + , listings_src_26000.is_lux + , listings_src_26000.capacity + , listings_src_26000.active_from AS listing__window_start__day + , DATE_TRUNC('week', listings_src_26000.active_from) AS listing__window_start__week + , DATE_TRUNC('month', listings_src_26000.active_from) AS listing__window_start__month + , DATE_TRUNC('quarter', listings_src_26000.active_from) AS listing__window_start__quarter + , DATE_TRUNC('year', listings_src_26000.active_from) AS listing__window_start__year + , EXTRACT(year FROM listings_src_26000.active_from) AS listing__window_start__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_from) AS listing__window_start__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_from) AS listing__window_start__extract_month + , EXTRACT(day FROM listings_src_26000.active_from) AS listing__window_start__extract_day + , EXTRACT(DAY_OF_WEEK FROM listings_src_26000.active_from) AS listing__window_start__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_from) AS listing__window_start__extract_doy + , listings_src_26000.active_to AS listing__window_end__day + , DATE_TRUNC('week', listings_src_26000.active_to) AS listing__window_end__week + , DATE_TRUNC('month', listings_src_26000.active_to) AS listing__window_end__month + , DATE_TRUNC('quarter', listings_src_26000.active_to) AS listing__window_end__quarter + , DATE_TRUNC('year', listings_src_26000.active_to) AS listing__window_end__year + , EXTRACT(year FROM listings_src_26000.active_to) AS listing__window_end__extract_year + , EXTRACT(quarter FROM listings_src_26000.active_to) AS listing__window_end__extract_quarter + , EXTRACT(month FROM listings_src_26000.active_to) AS listing__window_end__extract_month + , EXTRACT(day FROM listings_src_26000.active_to) AS listing__window_end__extract_day + , EXTRACT(DAY_OF_WEEK FROM listings_src_26000.active_to) AS listing__window_end__extract_dow + , EXTRACT(doy FROM listings_src_26000.active_to) AS listing__window_end__extract_doy + , listings_src_26000.country AS listing__country + , listings_src_26000.is_lux AS listing__is_lux + , listings_src_26000.capacity AS listing__capacity + , listings_src_26000.listing_id AS listing + , listings_src_26000.user_id AS user + , listings_src_26000.user_id AS listing__user + FROM ***************************.dim_listings listings_src_26000 + ) subq_2 + ) subq_3 + ON + ( + subq_1.listing = subq_3.listing + ) AND ( + ( + subq_1.metric_time__day >= subq_3.window_start__day + ) AND ( + ( + subq_1.metric_time__day < subq_3.window_end__day + ) OR ( + subq_3.window_end__day IS NULL + ) + ) + ) + ) subq_4 + WHERE listing__capacity > 2 + ) subq_5 + ) subq_6 + GROUP BY + subq_6.metric_time__month + , subq_6.listing__capacity +) subq_7 diff --git a/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_group_by_and_coarser_grain__plan0_optimized.sql b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_group_by_and_coarser_grain__plan0_optimized.sql new file mode 100644 index 0000000000..18e6cf17e9 --- /dev/null +++ b/tests_metricflow/snapshots/test_query_rendering.py/SqlPlan/Trino/test_scd_group_by_and_coarser_grain__plan0_optimized.sql @@ -0,0 +1,49 @@ +test_name: test_scd_group_by_and_coarser_grain +test_filename: test_query_rendering.py +sql_engine: Trino +--- +-- Constrain Output with WHERE +-- Pass Only Elements: ['bookings', 'listing__capacity', 'metric_time__month'] +-- Aggregate Measures +-- Compute Metrics via Expressions +SELECT + metric_time__month + , listing__capacity + , SUM(bookings) AS family_bookings +FROM ( + -- Join Standard Outputs + SELECT + listings_src_26000.capacity AS listing__capacity + , subq_9.metric_time__month AS metric_time__month + , subq_9.bookings AS bookings + FROM ( + -- Read Elements From Semantic Model 'bookings_source' + -- Metric Time Dimension 'ds' + SELECT + DATE_TRUNC('day', ds) AS metric_time__day + , DATE_TRUNC('month', ds) AS metric_time__month + , listing_id AS listing + , 1 AS bookings + FROM ***************************.fct_bookings bookings_source_src_26000 + ) subq_9 + LEFT OUTER JOIN + ***************************.dim_listings listings_src_26000 + ON + ( + subq_9.listing = listings_src_26000.listing_id + ) AND ( + ( + subq_9.metric_time__day >= listings_src_26000.active_from + ) AND ( + ( + subq_9.metric_time__day < listings_src_26000.active_to + ) OR ( + listings_src_26000.active_to IS NULL + ) + ) + ) +) subq_12 +WHERE listing__capacity > 2 +GROUP BY + metric_time__month + , listing__capacity