diff --git a/metricflow/model/semantics/linkable_spec_resolver.py b/metricflow/model/semantics/linkable_spec_resolver.py index 8b370258be..055b891389 100644 --- a/metricflow/model/semantics/linkable_spec_resolver.py +++ b/metricflow/model/semantics/linkable_spec_resolver.py @@ -823,7 +823,27 @@ def _get_joined_elements(self, measure_semantic_model: SemanticModel) -> Linkabl """Get the elements that can be generated by joining other models to the given model.""" # Create single-hop elements join_paths = [] + linkable_metrics_set = LinkableElementSet() for entity in measure_semantic_model.entities: + # Get LinkableMetrics. These can use fan-out join paths since they will be aggregated on the right side. + for semantic_model_for_metric_join in self._entity_to_semantic_model[entity.name]: + if semantic_model_for_metric_join.name == measure_semantic_model.name: + continue + new_linkable_metrics_set = self.get_joinable_metrics_for_semantic_model( + semantic_model=semantic_model_for_metric_join, + using_join_path=SemanticModelJoinPath( + ( + SemanticModelJoinPathElement( + semantic_model_reference=semantic_model_for_metric_join.reference, + join_on_entity=entity.reference, + ), + ) + ), + ) + linkable_metrics_set = LinkableElementSet.merge_by_path_key( + [linkable_metrics_set, new_linkable_metrics_set] + ) + # Get all other linkable elements. These can only use join paths that won't fan out. semantic_models = self._get_semantic_models_joinable_to_entity( left_semantic_model_reference=measure_semantic_model.reference, entity_reference=entity.reference, @@ -841,6 +861,7 @@ def _get_joined_elements(self, measure_semantic_model: SemanticModel) -> Linkabl ) ) ) + single_hop_elements = LinkableElementSet.merge_by_path_key( [ self.create_linkable_element_set_from_join_path( @@ -851,6 +872,8 @@ def _get_joined_elements(self, measure_semantic_model: SemanticModel) -> Linkabl ] ) + # TODO: enable more hops for linkable metrics? + # Create multi-hop elements. At each iteration, we generate the list of valid elements based on the current join # path, extend all paths to include the next valid semantic model, then repeat. multi_hop_elements = LinkableElementSet() @@ -880,7 +903,7 @@ def _get_joined_elements(self, measure_semantic_model: SemanticModel) -> Linkabl ) join_paths = new_join_paths - return LinkableElementSet.merge_by_path_key((single_hop_elements, multi_hop_elements)) + return LinkableElementSet.merge_by_path_key((single_hop_elements, linkable_metrics_set, multi_hop_elements)) def _get_linkable_element_set_for_measure( self, @@ -1006,7 +1029,10 @@ def create_linkable_element_set_from_join_path( join_path: SemanticModelJoinPath, with_properties: FrozenSet[LinkableElementProperties], ) -> LinkableElementSet: - """Given the current path, generate the respective linkable elements from the last semantic model in the path.""" + """Given the current path, generate the respective linkable elements from the last semantic model in the path. + + Does not include LinkableMetrics. + """ semantic_model = self._semantic_model_lookup.get_by_reference(join_path.last_semantic_model_reference) assert semantic_model @@ -1042,7 +1068,6 @@ def create_linkable_element_set_from_join_path( for entity in semantic_model.entities: # Avoid creating "booking_id__booking_id" - # TODO: we are getting the above - figure out why if entity.reference != join_path.last_entity_link: linkable_entities.append( LinkableEntity( @@ -1061,9 +1086,6 @@ def create_linkable_element_set_from_join_path( path_key_to_linkable_entities={ linkable_entity.path_key: (linkable_entity,) for linkable_entity in linkable_entities }, - path_key_to_linkable_metrics=self.get_joinable_metrics_for_semantic_model( - semantic_model=semantic_model, using_join_path=join_path - ).path_key_to_linkable_metrics, ) def get_joinable_metrics_for_entity(self, entity_reference: EntityReference) -> Set[MetricReference]: diff --git a/tests/model/test_semantic_model_container.py b/tests/model/test_semantic_model_container.py index d646f3adad..e360d03f41 100644 --- a/tests/model/test_semantic_model_container.py +++ b/tests/model/test_semantic_model_container.py @@ -204,8 +204,6 @@ def test_get_agg_time_dimension_specs_for_measure(semantic_model_lookup: Semanti def test_linkable_metrics_for_measure( # noqa: D103 - request: FixtureRequest, - mf_test_configuration: MetricFlowTestConfiguration, metric_lookup: MetricLookup, semantic_model_lookup: SemanticModelLookup, ) -> None: @@ -218,7 +216,6 @@ def test_linkable_metrics_for_measure( # noqa: D103 ).path_key_to_linkable_metrics.values() for linkable_metric in linkable_metric_tuple } - print("num::", len(actual_metrics)) semantic_models = semantic_model_lookup.get_semantic_models_for_measure(measure_reference) assert len(semantic_models) == 1 @@ -226,7 +223,6 @@ def test_linkable_metrics_for_measure( # noqa: D103 already_seen = set() - # Check for all single-hop metrics expected_single_hop_metrics = [ linkable_metric for linkable_metrics in metric_lookup._linkable_spec_resolver.get_joinable_metrics_for_semantic_model( @@ -243,24 +239,24 @@ def test_linkable_metrics_for_measure( # noqa: D103 expected_multi_hop_metrics = [] for entity in measure_semantic_model.entities: - next_semantic_models = metric_lookup._linkable_spec_resolver._get_semantic_models_joinable_to_entity( - left_semantic_model_reference=measure_semantic_model.reference, entity_reference=entity.reference - ) + next_semantic_models = metric_lookup._linkable_spec_resolver._entity_to_semantic_model[entity.name] for next_semantic_model in next_semantic_models: - expected_multi_hop_metrics += [ - linkable_metric - for linkable_metrics in metric_lookup._linkable_spec_resolver.get_joinable_metrics_for_semantic_model( - semantic_model=next_semantic_model, - using_join_path=SemanticModelJoinPath( - ( - SemanticModelJoinPathElement( - semantic_model_reference=next_semantic_model.reference, join_on_entity=entity.reference - ), - ) + if next_semantic_model.name == measure_semantic_model.name: + continue + # TODO: use SemanticModelJoinPath.from_single_element when merged + join_path = SemanticModelJoinPath( + ( + SemanticModelJoinPathElement( + semantic_model_reference=next_semantic_model.reference, join_on_entity=entity.reference ), - ).path_key_to_linkable_metrics.values() - for linkable_metric in linkable_metrics - ] + ) + ) + for linkable_metrics in metric_lookup._linkable_spec_resolver.get_joinable_metrics_for_semantic_model( + semantic_model=next_semantic_model, + using_join_path=join_path, + ).path_key_to_linkable_metrics.values(): + for linkable_metric in linkable_metrics: + expected_multi_hop_metrics.append(linkable_metric) for expected_metric in expected_multi_hop_metrics: assert expected_metric in actual_metrics @@ -269,5 +265,4 @@ def test_linkable_metrics_for_measure( # noqa: D103 actual_metrics.remove(expected_metric) # Check that we didn't return any unexpected linkable metrics. - # LinkableMetric(element_name='booking_value_sub_instant_add_10', join_by_semantic_model=SemanticModelReference(semantic_model_name='visits_source'), entity_links=(EntityReference(element_name='user'),), properties=frozenset({, }), join_path=(SemanticModelJoinPathElement(semantic_model_reference=SemanticModelReference(semantic_model_name='visits_source'), join_on_entity=EntityReference(element_name='user')),)) assert len(actual_metrics) == 0, f"Didn't find linkable metrics: {actual_metrics}" diff --git a/tests/snapshots/test_linkable_spec_resolver.py/list/test_linkable_element_set_as_spec_set__set0.txt b/tests/snapshots/test_linkable_spec_resolver.py/list/test_linkable_element_set_as_spec_set__set0.txt index 17b183e31e..79de333985 100644 --- a/tests/snapshots/test_linkable_spec_resolver.py/list/test_linkable_element_set_as_spec_set__set0.txt +++ b/tests/snapshots/test_linkable_spec_resolver.py/list/test_linkable_element_set_as_spec_set__set0.txt @@ -84,6 +84,110 @@ 'listing__every_2_days_bookers_2_days_ago', 'listing__every_two_days_bookers', 'listing__every_two_days_bookers_fill_nulls_with_0', + 'listing__guest__approximate_continuous_booking_value_p99', + 'listing__guest__approximate_discrete_booking_value_p99', + 'listing__guest__average_booking_value', + 'listing__guest__average_instant_booking_value', + 'listing__guest__bookers', + 'listing__guest__booking_fees', + 'listing__guest__booking_fees_last_week_per_booker_this_week', + 'listing__guest__booking_fees_per_booker', + 'listing__guest__booking_fees_since_start_of_month', + 'listing__guest__booking_payments', + 'listing__guest__booking_value', + 'listing__guest__booking_value_for_non_null_listing_id', + 'listing__guest__booking_value_p99', + 'listing__guest__booking_value_sub_instant', + 'listing__guest__booking_value_sub_instant_add_10', + 'listing__guest__bookings', + 'listing__guest__bookings_5_day_lag', + 'listing__guest__bookings_at_start_of_month', + 'listing__guest__bookings_fill_nulls_with_0', + 'listing__guest__bookings_fill_nulls_with_0_without_time_spine', + 'listing__guest__bookings_growth_2_weeks', + 'listing__guest__bookings_growth_2_weeks_fill_nulls_with_0', + 'listing__guest__bookings_growth_2_weeks_fill_nulls_with_0_for_non_offset', + 'listing__guest__bookings_growth_since_start_of_month', + 'listing__guest__bookings_join_to_time_spine', + 'listing__guest__bookings_month_start_compared_to_1_month_prior', + 'listing__guest__bookings_offset_once', + 'listing__guest__bookings_offset_twice', + 'listing__guest__bookings_per_booker', + 'listing__guest__bookings_per_dollar', + 'listing__guest__derived_bookings_0', + 'listing__guest__derived_bookings_1', + 'listing__guest__discrete_booking_value_p99', + 'listing__guest__double_counted_delayed_bookings', + 'listing__guest__every_2_days_bookers_2_days_ago', + 'listing__guest__every_two_days_bookers', + 'listing__guest__every_two_days_bookers_fill_nulls_with_0', + 'listing__guest__instant_booking_fraction_of_max_value', + 'listing__guest__instant_booking_value', + 'listing__guest__instant_booking_value_ratio', + 'listing__guest__instant_bookings', + 'listing__guest__instant_lux_booking_value_rate', + 'listing__guest__instant_plus_non_referred_bookings_pct', + 'listing__guest__lux_booking_fraction_of_max_value', + 'listing__guest__lux_booking_value_rate_expr', + 'listing__guest__max_booking_value', + 'listing__guest__median_booking_value', + 'listing__guest__min_booking_value', + 'listing__guest__nested_fill_nulls_without_time_spine', + 'listing__guest__non_referred_bookings_pct', + 'listing__guest__referred_bookings', + 'listing__guest__twice_bookings_fill_nulls_with_0_without_time_spine', + 'listing__host__approximate_continuous_booking_value_p99', + 'listing__host__approximate_discrete_booking_value_p99', + 'listing__host__average_booking_value', + 'listing__host__average_instant_booking_value', + 'listing__host__bookers', + 'listing__host__booking_fees', + 'listing__host__booking_fees_last_week_per_booker_this_week', + 'listing__host__booking_fees_per_booker', + 'listing__host__booking_fees_since_start_of_month', + 'listing__host__booking_payments', + 'listing__host__booking_value', + 'listing__host__booking_value_for_non_null_listing_id', + 'listing__host__booking_value_p99', + 'listing__host__booking_value_sub_instant', + 'listing__host__booking_value_sub_instant_add_10', + 'listing__host__bookings', + 'listing__host__bookings_5_day_lag', + 'listing__host__bookings_at_start_of_month', + 'listing__host__bookings_fill_nulls_with_0', + 'listing__host__bookings_fill_nulls_with_0_without_time_spine', + 'listing__host__bookings_growth_2_weeks', + 'listing__host__bookings_growth_2_weeks_fill_nulls_with_0', + 'listing__host__bookings_growth_2_weeks_fill_nulls_with_0_for_non_offset', + 'listing__host__bookings_growth_since_start_of_month', + 'listing__host__bookings_join_to_time_spine', + 'listing__host__bookings_month_start_compared_to_1_month_prior', + 'listing__host__bookings_offset_once', + 'listing__host__bookings_offset_twice', + 'listing__host__bookings_per_booker', + 'listing__host__bookings_per_dollar', + 'listing__host__derived_bookings_0', + 'listing__host__derived_bookings_1', + 'listing__host__discrete_booking_value_p99', + 'listing__host__double_counted_delayed_bookings', + 'listing__host__every_2_days_bookers_2_days_ago', + 'listing__host__every_two_days_bookers', + 'listing__host__every_two_days_bookers_fill_nulls_with_0', + 'listing__host__instant_booking_fraction_of_max_value', + 'listing__host__instant_booking_value', + 'listing__host__instant_booking_value_ratio', + 'listing__host__instant_bookings', + 'listing__host__instant_lux_booking_value_rate', + 'listing__host__instant_plus_non_referred_bookings_pct', + 'listing__host__lux_booking_fraction_of_max_value', + 'listing__host__lux_booking_value_rate_expr', + 'listing__host__max_booking_value', + 'listing__host__median_booking_value', + 'listing__host__min_booking_value', + 'listing__host__nested_fill_nulls_without_time_spine', + 'listing__host__non_referred_bookings_pct', + 'listing__host__referred_bookings', + 'listing__host__twice_bookings_fill_nulls_with_0_without_time_spine', 'listing__instant_booking_fraction_of_max_value', 'listing__instant_booking_value', 'listing__instant_booking_value_ratio', @@ -169,6 +273,83 @@ 'listing__smallest_listing', 'listing__twice_bookings_fill_nulls_with_0_without_time_spine', 'listing__user', + 'listing__user__active_listings', + 'listing__user__approximate_continuous_booking_value_p99', + 'listing__user__approximate_discrete_booking_value_p99', + 'listing__user__average_booking_value', + 'listing__user__average_instant_booking_value', + 'listing__user__bookers', + 'listing__user__booking_fees', + 'listing__user__booking_fees_last_week_per_booker_this_week', + 'listing__user__booking_fees_per_booker', + 'listing__user__booking_fees_since_start_of_month', + 'listing__user__booking_payments', + 'listing__user__booking_value', + 'listing__user__booking_value_for_non_null_listing_id', + 'listing__user__booking_value_p99', + 'listing__user__booking_value_per_view', + 'listing__user__booking_value_sub_instant', + 'listing__user__booking_value_sub_instant_add_10', + 'listing__user__bookings', + 'listing__user__bookings_5_day_lag', + 'listing__user__bookings_at_start_of_month', + 'listing__user__bookings_fill_nulls_with_0', + 'listing__user__bookings_fill_nulls_with_0_without_time_spine', + 'listing__user__bookings_growth_2_weeks', + 'listing__user__bookings_growth_2_weeks_fill_nulls_with_0', + 'listing__user__bookings_growth_2_weeks_fill_nulls_with_0_for_non_offset', + 'listing__user__bookings_growth_since_start_of_month', + 'listing__user__bookings_join_to_time_spine', + 'listing__user__bookings_month_start_compared_to_1_month_prior', + 'listing__user__bookings_offset_once', + 'listing__user__bookings_offset_twice', + 'listing__user__bookings_per_booker', + 'listing__user__bookings_per_dollar', + 'listing__user__bookings_per_listing', + 'listing__user__bookings_per_lux_listing_derived', + 'listing__user__bookings_per_view', + 'listing__user__current_account_balance_by_user', + 'listing__user__derived_bookings_0', + 'listing__user__derived_bookings_1', + 'listing__user__discrete_booking_value_p99', + 'listing__user__double_counted_delayed_bookings', + 'listing__user__every_2_days_bookers_2_days_ago', + 'listing__user__every_two_days_bookers', + 'listing__user__every_two_days_bookers_fill_nulls_with_0', + 'listing__user__identity_verifications', + 'listing__user__instant_booking_fraction_of_max_value', + 'listing__user__instant_booking_value', + 'listing__user__instant_booking_value_ratio', + 'listing__user__instant_bookings', + 'listing__user__instant_lux_booking_value_rate', + 'listing__user__instant_plus_non_referred_bookings_pct', + 'listing__user__largest_listing', + 'listing__user__listings', + 'listing__user__lux_booking_fraction_of_max_value', + 'listing__user__lux_booking_value_rate_expr', + 'listing__user__lux_listings', + 'listing__user__max_booking_value', + 'listing__user__median_booking_value', + 'listing__user__min_booking_value', + 'listing__user__nested_fill_nulls_without_time_spine', + 'listing__user__non_referred_bookings_pct', + 'listing__user__referred_bookings', + 'listing__user__regional_starting_balance_ratios', + 'listing__user__revenue', + 'listing__user__revenue_all_time', + 'listing__user__revenue_mtd', + 'listing__user__smallest_listing', + 'listing__user__total_account_balance_first_day', + 'listing__user__trailing_2_months_revenue', + 'listing__user__trailing_2_months_revenue_sub_10', + 'listing__user__twice_bookings_fill_nulls_with_0_without_time_spine', + 'listing__user__views', + 'listing__user__views_times_booking_value', + 'listing__user__visit_buy_conversion_rate', + 'listing__user__visit_buy_conversion_rate_7days', + 'listing__user__visit_buy_conversion_rate_7days_fill_nulls_with_0', + 'listing__user__visit_buy_conversion_rate_by_session', + 'listing__user__visit_buy_conversions', 'listing__views', 'listing__views_times_booking_value', 'metric_time__day', @@ -402,6 +583,69 @@ 'user__instant_lux_booking_value_rate', 'user__instant_plus_non_referred_bookings_pct', 'user__largest_listing', + 'user__listing__active_listings', + 'user__listing__approximate_continuous_booking_value_p99', + 'user__listing__approximate_discrete_booking_value_p99', + 'user__listing__average_booking_value', + 'user__listing__average_instant_booking_value', + 'user__listing__bookers', + 'user__listing__booking_fees', + 'user__listing__booking_fees_last_week_per_booker_this_week', + 'user__listing__booking_fees_per_booker', + 'user__listing__booking_fees_since_start_of_month', + 'user__listing__booking_payments', + 'user__listing__booking_value', + 'user__listing__booking_value_for_non_null_listing_id', + 'user__listing__booking_value_p99', + 'user__listing__booking_value_per_view', + 'user__listing__booking_value_sub_instant', + 'user__listing__booking_value_sub_instant_add_10', + 'user__listing__bookings', + 'user__listing__bookings_5_day_lag', + 'user__listing__bookings_at_start_of_month', + 'user__listing__bookings_fill_nulls_with_0', + 'user__listing__bookings_fill_nulls_with_0_without_time_spine', + 'user__listing__bookings_growth_2_weeks', + 'user__listing__bookings_growth_2_weeks_fill_nulls_with_0', + 'user__listing__bookings_growth_2_weeks_fill_nulls_with_0_for_non_offset', + 'user__listing__bookings_growth_since_start_of_month', + 'user__listing__bookings_join_to_time_spine', + 'user__listing__bookings_month_start_compared_to_1_month_prior', + 'user__listing__bookings_offset_once', + 'user__listing__bookings_offset_twice', + 'user__listing__bookings_per_booker', + 'user__listing__bookings_per_dollar', + 'user__listing__bookings_per_listing', + 'user__listing__bookings_per_lux_listing_derived', + 'user__listing__bookings_per_view', + 'user__listing__derived_bookings_0', + 'user__listing__derived_bookings_1', + 'user__listing__discrete_booking_value_p99', + 'user__listing__double_counted_delayed_bookings', + 'user__listing__every_2_days_bookers_2_days_ago', + 'user__listing__every_two_days_bookers', + 'user__listing__every_two_days_bookers_fill_nulls_with_0', + 'user__listing__instant_booking_fraction_of_max_value', + 'user__listing__instant_booking_value', + 'user__listing__instant_booking_value_ratio', + 'user__listing__instant_bookings', + 'user__listing__instant_lux_booking_value_rate', + 'user__listing__instant_plus_non_referred_bookings_pct', + 'user__listing__largest_listing', + 'user__listing__listings', + 'user__listing__lux_booking_fraction_of_max_value', + 'user__listing__lux_booking_value_rate_expr', + 'user__listing__lux_listings', + 'user__listing__max_booking_value', + 'user__listing__median_booking_value', + 'user__listing__min_booking_value', + 'user__listing__nested_fill_nulls_without_time_spine', + 'user__listing__non_referred_bookings_pct', + 'user__listing__referred_bookings', + 'user__listing__smallest_listing', + 'user__listing__twice_bookings_fill_nulls_with_0_without_time_spine', + 'user__listing__views', + 'user__listing__views_times_booking_value', 'user__listings', 'user__lux_booking_fraction_of_max_value', 'user__lux_booking_value_rate_expr', @@ -416,11 +660,17 @@ 'user__revenue', 'user__revenue_all_time', 'user__revenue_mtd', + 'user__session__visit_buy_conversion_rate', + 'user__session__visit_buy_conversion_rate_7days', + 'user__session__visit_buy_conversion_rate_7days_fill_nulls_with_0', + 'user__session__visit_buy_conversion_rate_by_session', + 'user__session__visit_buy_conversions', 'user__smallest_listing', 'user__total_account_balance_first_day', 'user__trailing_2_months_revenue', 'user__trailing_2_months_revenue_sub_10', 'user__twice_bookings_fill_nulls_with_0_without_time_spine', + 'user__verification__identity_verifications', 'user__views', 'user__views_times_booking_value', 'user__visit_buy_conversion_rate', diff --git a/tests/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path__result0.txt b/tests/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path__result0.txt index 2e9b833cc9..5e883fe5be 100644 --- a/tests/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path__result0.txt +++ b/tests/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path__result0.txt @@ -1,123 +1,46 @@ -Semantic Model Entity Links Name Time Granularity Date Part Properties ----------------- -------------- -------------------------------------------------------- ------------------ ----------- -------------------------------------- -listings_latest ('listing',) active_listings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) approximate_continuous_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) approximate_discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) average_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) average_instant_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookers ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_fees ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_fees_last_week_per_booker_this_week ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_fees_per_booker ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_fees_since_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_payments ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_value_for_non_null_listing_id ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_value_per_view ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_value_sub_instant ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_value_sub_instant_add_10 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_5_day_lag ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_at_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_fill_nulls_with_0_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_growth_2_weeks ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_growth_2_weeks_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_growth_2_weeks_fill_nulls_with_0_for_non_offset ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_growth_since_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_join_to_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_month_start_compared_to_1_month_prior ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_offset_once ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_offset_twice ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_per_booker ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_per_dollar ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_per_listing ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_per_lux_listing_derived ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_per_view ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) capacity_latest ['JOINED'] -listings_latest ('listing',) country_latest ['JOINED'] -listings_latest ('listing',) created_at DAY ['JOINED'] -listings_latest ('listing',) created_at DAY DAY ['JOINED'] -listings_latest ('listing',) created_at DAY DOW ['JOINED'] -listings_latest ('listing',) created_at DAY DOY ['JOINED'] -listings_latest ('listing',) created_at DAY MONTH ['JOINED'] -listings_latest ('listing',) created_at DAY QUARTER ['JOINED'] -listings_latest ('listing',) created_at DAY YEAR ['JOINED'] -listings_latest ('listing',) created_at MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) created_at MONTH MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) created_at MONTH QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) created_at MONTH YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) created_at QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) created_at QUARTER QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) created_at QUARTER YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) created_at WEEK ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) created_at WEEK MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) created_at WEEK QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) created_at WEEK YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) created_at YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) created_at YEAR YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) current_account_balance_by_user ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) derived_bookings_0 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) derived_bookings_1 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) double_counted_delayed_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) ds DAY ['JOINED'] -listings_latest ('listing',) ds DAY DAY ['JOINED'] -listings_latest ('listing',) ds DAY DOW ['JOINED'] -listings_latest ('listing',) ds DAY DOY ['JOINED'] -listings_latest ('listing',) ds DAY MONTH ['JOINED'] -listings_latest ('listing',) ds DAY QUARTER ['JOINED'] -listings_latest ('listing',) ds DAY YEAR ['JOINED'] -listings_latest ('listing',) ds MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) ds MONTH MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) ds MONTH QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) ds MONTH YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) ds QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) ds QUARTER QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) ds QUARTER YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) ds WEEK ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) ds WEEK MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) ds WEEK QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) ds WEEK YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) ds YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) ds YEAR YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] -listings_latest ('listing',) every_2_days_bookers_2_days_ago ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) every_two_days_bookers ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) every_two_days_bookers_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) identity_verifications ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) instant_booking_fraction_of_max_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) instant_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) instant_booking_value_ratio ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) instant_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) instant_lux_booking_value_rate ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) instant_plus_non_referred_bookings_pct ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) is_lux_latest ['JOINED'] -listings_latest ('listing',) largest_listing ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) listings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) lux_booking_fraction_of_max_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) lux_booking_value_rate_expr ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) lux_listings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) max_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) median_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) min_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) nested_fill_nulls_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) non_referred_bookings_pct ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) referred_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) regional_starting_balance_ratios ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) revenue ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) revenue_all_time ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) revenue_mtd ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) smallest_listing ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) total_account_balance_first_day ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) trailing_2_months_revenue ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) trailing_2_months_revenue_sub_10 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) twice_bookings_fill_nulls_with_0_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) user ['ENTITY', 'JOINED'] -listings_latest ('listing',) views ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) views_times_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) visit_buy_conversion_rate ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) visit_buy_conversion_rate_7days ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) visit_buy_conversion_rate_7days_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) visit_buy_conversion_rate_by_session ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) visit_buy_conversions ['JOINED', 'METRIC', 'MULTI_HOP'] +Semantic Model Entity Links Name Time Granularity Date Part Properties +---------------- -------------- --------------- ------------------ ----------- -------------------------------------- +listings_latest ('listing',) capacity_latest ['JOINED'] +listings_latest ('listing',) country_latest ['JOINED'] +listings_latest ('listing',) created_at DAY ['JOINED'] +listings_latest ('listing',) created_at DAY DAY ['JOINED'] +listings_latest ('listing',) created_at DAY DOW ['JOINED'] +listings_latest ('listing',) created_at DAY DOY ['JOINED'] +listings_latest ('listing',) created_at DAY MONTH ['JOINED'] +listings_latest ('listing',) created_at DAY QUARTER ['JOINED'] +listings_latest ('listing',) created_at DAY YEAR ['JOINED'] +listings_latest ('listing',) created_at MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) created_at MONTH MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) created_at MONTH QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) created_at MONTH YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) created_at QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) created_at QUARTER QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) created_at QUARTER YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) created_at WEEK ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) created_at WEEK MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) created_at WEEK QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) created_at WEEK YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) created_at YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) created_at YEAR YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds DAY ['JOINED'] +listings_latest ('listing',) ds DAY DAY ['JOINED'] +listings_latest ('listing',) ds DAY DOW ['JOINED'] +listings_latest ('listing',) ds DAY DOY ['JOINED'] +listings_latest ('listing',) ds DAY MONTH ['JOINED'] +listings_latest ('listing',) ds DAY QUARTER ['JOINED'] +listings_latest ('listing',) ds DAY YEAR ['JOINED'] +listings_latest ('listing',) ds MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds MONTH MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds MONTH QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds MONTH YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds QUARTER QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds QUARTER YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds WEEK ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds WEEK MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds WEEK QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds WEEK YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) ds YEAR YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] +listings_latest ('listing',) is_lux_latest ['JOINED'] +listings_latest ('listing',) user ['ENTITY', 'JOINED'] diff --git a/tests/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path_multi_hop__result0.txt b/tests/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path_multi_hop__result0.txt index d7c8f77930..8568ccb8ea 100644 --- a/tests/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path_multi_hop__result0.txt +++ b/tests/snapshots/test_linkable_spec_resolver.py/str/test_create_linkable_element_set_from_join_path_multi_hop__result0.txt @@ -1,123 +1,46 @@ -Semantic Model Entity Links Name Time Granularity Date Part Properties ----------------- -------------- -------------------------------------------------------- ------------------ ----------- --------------------------------------------------- -listings_latest ('listing',) active_listings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) approximate_continuous_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) approximate_discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) average_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) average_instant_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookers ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_fees ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_fees_last_week_per_booker_this_week ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_fees_per_booker ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_fees_since_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_payments ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_value_for_non_null_listing_id ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_value_per_view ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_value_sub_instant ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) booking_value_sub_instant_add_10 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_5_day_lag ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_at_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_fill_nulls_with_0_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_growth_2_weeks ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_growth_2_weeks_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_growth_2_weeks_fill_nulls_with_0_for_non_offset ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_growth_since_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_join_to_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_month_start_compared_to_1_month_prior ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_offset_once ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_offset_twice ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_per_booker ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_per_dollar ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_per_listing ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_per_lux_listing_derived ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) bookings_per_view ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) capacity_latest ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) country_latest ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at DAY ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at DAY DAY ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at DAY DOW ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at DAY DOY ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at DAY MONTH ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at DAY QUARTER ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at DAY YEAR ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at MONTH MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at MONTH QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at MONTH YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at QUARTER QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at QUARTER YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at WEEK ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at WEEK MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at WEEK QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at WEEK YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) created_at YEAR YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) current_account_balance_by_user ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) derived_bookings_0 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) derived_bookings_1 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) double_counted_delayed_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) ds DAY ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds DAY DAY ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds DAY DOW ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds DAY DOY ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds DAY MONTH ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds DAY QUARTER ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds DAY YEAR ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds MONTH MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds MONTH QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds MONTH YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds QUARTER QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds QUARTER YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds WEEK ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds WEEK MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds WEEK QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds WEEK YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) ds YEAR YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) every_2_days_bookers_2_days_ago ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) every_two_days_bookers ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) every_two_days_bookers_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) identity_verifications ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) instant_booking_fraction_of_max_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) instant_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) instant_booking_value_ratio ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) instant_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) instant_lux_booking_value_rate ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) instant_plus_non_referred_bookings_pct ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) is_lux_latest ['JOINED', 'MULTI_HOP'] -listings_latest ('listing',) largest_listing ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) listings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) lux_booking_fraction_of_max_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) lux_booking_value_rate_expr ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) lux_listings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) max_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) median_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) min_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) nested_fill_nulls_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) non_referred_bookings_pct ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) referred_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) regional_starting_balance_ratios ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) revenue ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) revenue_all_time ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) revenue_mtd ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) smallest_listing ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) total_account_balance_first_day ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) trailing_2_months_revenue ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) trailing_2_months_revenue_sub_10 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) twice_bookings_fill_nulls_with_0_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) user ['ENTITY', 'JOINED', 'MULTI_HOP'] -listings_latest ('listing',) views ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) views_times_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) visit_buy_conversion_rate ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) visit_buy_conversion_rate_7days ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) visit_buy_conversion_rate_7days_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) visit_buy_conversion_rate_by_session ['JOINED', 'METRIC', 'MULTI_HOP'] -listings_latest ('listing',) visit_buy_conversions ['JOINED', 'METRIC', 'MULTI_HOP'] +Semantic Model Entity Links Name Time Granularity Date Part Properties +---------------- -------------- --------------- ------------------ ----------- --------------------------------------------------- +listings_latest ('listing',) capacity_latest ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) country_latest ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at DAY ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at DAY DAY ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at DAY DOW ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at DAY DOY ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at DAY MONTH ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at DAY QUARTER ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at DAY YEAR ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at MONTH MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at MONTH QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at MONTH YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at QUARTER QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at QUARTER YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at WEEK ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at WEEK MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at WEEK QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at WEEK YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) created_at YEAR YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds DAY ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds DAY DAY ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds DAY DOW ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds DAY DOY ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds DAY MONTH ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds DAY QUARTER ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds DAY YEAR ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds MONTH MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds MONTH QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds MONTH YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds QUARTER QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds QUARTER YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds WEEK ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds WEEK MONTH ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds WEEK QUARTER ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds WEEK YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) ds YEAR YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED', 'MULTI_HOP'] +listings_latest ('listing',) is_lux_latest ['JOINED', 'MULTI_HOP'] +listings_latest ('listing',) user ['ENTITY', 'JOINED', 'MULTI_HOP'] diff --git a/tests/snapshots/test_semantic_model_container.py/str/test_linkable_elements_for_measure__result0.txt b/tests/snapshots/test_semantic_model_container.py/str/test_linkable_elements_for_measure__result0.txt index 2a42415975..0334c8e3b4 100644 --- a/tests/snapshots/test_semantic_model_container.py/str/test_linkable_elements_for_measure__result0.txt +++ b/tests/snapshots/test_semantic_model_container.py/str/test_linkable_elements_for_measure__result0.txt @@ -140,6 +140,110 @@ Semantic Model Entity Links Name ('user',) visit_buy_conversion_rate_7days_fill_nulls_with_0 ['JOINED', 'METRIC'] ('user',) visit_buy_conversion_rate_by_session ['JOINED', 'METRIC'] ('user',) visit_buy_conversions ['JOINED', 'METRIC'] +bookings_source ('user',) approximate_continuous_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) approximate_continuous_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) approximate_discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) approximate_discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) average_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) average_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) average_instant_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) average_instant_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookers ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookers ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_fees ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_fees ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_fees_last_week_per_booker_this_week ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_fees_last_week_per_booker_this_week ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_fees_per_booker ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_fees_per_booker ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_fees_since_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_fees_since_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_payments ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_payments ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_value_for_non_null_listing_id ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_value_for_non_null_listing_id ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_value_sub_instant ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_value_sub_instant ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_value_sub_instant_add_10 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) booking_value_sub_instant_add_10 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_5_day_lag ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_5_day_lag ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_at_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_at_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_fill_nulls_with_0_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_fill_nulls_with_0_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_growth_2_weeks ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_growth_2_weeks ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_growth_2_weeks_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_growth_2_weeks_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_growth_2_weeks_fill_nulls_with_0_for_non_offset ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_growth_2_weeks_fill_nulls_with_0_for_non_offset ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_growth_since_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_growth_since_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_join_to_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_join_to_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_month_start_compared_to_1_month_prior ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_month_start_compared_to_1_month_prior ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_offset_once ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_offset_once ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_offset_twice ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_offset_twice ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_per_booker ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_per_booker ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_per_dollar ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) bookings_per_dollar ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) derived_bookings_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) derived_bookings_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) derived_bookings_1 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) derived_bookings_1 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) double_counted_delayed_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) double_counted_delayed_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) every_2_days_bookers_2_days_ago ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) every_2_days_bookers_2_days_ago ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) every_two_days_bookers ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) every_two_days_bookers ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) every_two_days_bookers_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) every_two_days_bookers_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) instant_booking_fraction_of_max_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) instant_booking_fraction_of_max_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) instant_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) instant_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) instant_booking_value_ratio ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) instant_booking_value_ratio ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) instant_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) instant_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) instant_lux_booking_value_rate ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) instant_lux_booking_value_rate ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) instant_plus_non_referred_bookings_pct ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) instant_plus_non_referred_bookings_pct ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) lux_booking_fraction_of_max_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) lux_booking_fraction_of_max_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) lux_booking_value_rate_expr ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) lux_booking_value_rate_expr ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) max_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) max_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) median_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) median_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) min_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) min_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) nested_fill_nulls_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) nested_fill_nulls_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) non_referred_bookings_pct ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) non_referred_bookings_pct ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) referred_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) referred_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) twice_bookings_fill_nulls_with_0_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +bookings_source ('user',) twice_bookings_fill_nulls_with_0_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] companies ('user',) active_listings ['JOINED', 'METRIC', 'MULTI_HOP'] companies ('user',) approximate_continuous_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] companies ('user',) approximate_discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] @@ -217,6 +321,7 @@ companies ('user',) visit_buy_conversion_rate_7days companies ('user',) visit_buy_conversion_rate_7days_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] companies ('user',) visit_buy_conversion_rate_by_session ['JOINED', 'METRIC', 'MULTI_HOP'] companies ('user',) visit_buy_conversions ['JOINED', 'METRIC', 'MULTI_HOP'] +id_verifications ('user',) identity_verifications ['JOINED', 'METRIC', 'MULTI_HOP'] listings_latest () listing ['ENTITY', 'LOCAL'] listings_latest () metric_time DAY ['METRIC_TIME'] listings_latest () metric_time DAY DAY ['DERIVED_TIME_GRANULARITY', 'METRIC_TIME'] @@ -429,3 +534,148 @@ users_latest ('user',) ds_latest users_latest ('user',) ds_latest YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] users_latest ('user',) ds_latest YEAR YEAR ['DERIVED_TIME_GRANULARITY', 'JOINED'] users_latest ('user',) home_state_latest ['JOINED'] +views_source ('user',) active_listings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) active_listings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) approximate_continuous_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) approximate_continuous_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) approximate_discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) approximate_discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) average_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) average_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) average_instant_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) average_instant_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookers ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookers ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_fees ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_fees ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_fees_last_week_per_booker_this_week ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_fees_last_week_per_booker_this_week ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_fees_per_booker ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_fees_per_booker ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_fees_since_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_fees_since_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_payments ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_payments ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_value_for_non_null_listing_id ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_value_for_non_null_listing_id ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_value_per_view ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_value_per_view ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_value_sub_instant ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_value_sub_instant ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_value_sub_instant_add_10 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) booking_value_sub_instant_add_10 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_5_day_lag ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_5_day_lag ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_at_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_at_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_fill_nulls_with_0_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_fill_nulls_with_0_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_growth_2_weeks ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_growth_2_weeks ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_growth_2_weeks_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_growth_2_weeks_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_growth_2_weeks_fill_nulls_with_0_for_non_offset ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_growth_2_weeks_fill_nulls_with_0_for_non_offset ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_growth_since_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_growth_since_start_of_month ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_join_to_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_join_to_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_month_start_compared_to_1_month_prior ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_month_start_compared_to_1_month_prior ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_offset_once ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_offset_once ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_offset_twice ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_offset_twice ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_per_booker ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_per_booker ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_per_dollar ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_per_dollar ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_per_listing ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_per_listing ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_per_lux_listing_derived ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_per_lux_listing_derived ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_per_view ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) bookings_per_view ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) current_account_balance_by_user ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) derived_bookings_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) derived_bookings_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) derived_bookings_1 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) derived_bookings_1 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) discrete_booking_value_p99 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) double_counted_delayed_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) double_counted_delayed_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) every_2_days_bookers_2_days_ago ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) every_2_days_bookers_2_days_ago ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) every_two_days_bookers ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) every_two_days_bookers ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) every_two_days_bookers_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) every_two_days_bookers_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) identity_verifications ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) instant_booking_fraction_of_max_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) instant_booking_fraction_of_max_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) instant_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) instant_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) instant_booking_value_ratio ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) instant_booking_value_ratio ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) instant_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) instant_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) instant_lux_booking_value_rate ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) instant_lux_booking_value_rate ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) instant_plus_non_referred_bookings_pct ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) instant_plus_non_referred_bookings_pct ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) largest_listing ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) largest_listing ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) listings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) listings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) lux_booking_fraction_of_max_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) lux_booking_fraction_of_max_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) lux_booking_value_rate_expr ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) lux_booking_value_rate_expr ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) lux_listings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) lux_listings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) max_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) max_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) median_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) median_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) min_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) min_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) nested_fill_nulls_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) nested_fill_nulls_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) non_referred_bookings_pct ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) non_referred_bookings_pct ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) referred_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) referred_bookings ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) regional_starting_balance_ratios ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) revenue ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) revenue_all_time ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) revenue_mtd ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) smallest_listing ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) smallest_listing ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) total_account_balance_first_day ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) trailing_2_months_revenue ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) trailing_2_months_revenue_sub_10 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) twice_bookings_fill_nulls_with_0_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) twice_bookings_fill_nulls_with_0_without_time_spine ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) views ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) views ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) views_times_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) views_times_booking_value ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) visit_buy_conversion_rate ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) visit_buy_conversion_rate_7days ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) visit_buy_conversion_rate_7days_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) visit_buy_conversion_rate_by_session ['JOINED', 'METRIC', 'MULTI_HOP'] +views_source ('user',) visit_buy_conversions ['JOINED', 'METRIC', 'MULTI_HOP'] +visits_source ('user',) visit_buy_conversion_rate ['JOINED', 'METRIC', 'MULTI_HOP'] +visits_source ('user',) visit_buy_conversion_rate_7days ['JOINED', 'METRIC', 'MULTI_HOP'] +visits_source ('user',) visit_buy_conversion_rate_7days_fill_nulls_with_0 ['JOINED', 'METRIC', 'MULTI_HOP'] +visits_source ('user',) visit_buy_conversion_rate_by_session ['JOINED', 'METRIC', 'MULTI_HOP'] +visits_source ('user',) visit_buy_conversions ['JOINED', 'METRIC', 'MULTI_HOP']