From 633c0c9d96eea1d763dbad3f01c0664da37c4233 Mon Sep 17 00:00:00 2001 From: Daiyi Yang Date: Thu, 14 Sep 2023 23:24:57 -0700 Subject: [PATCH] Separate the metric name and metric id --- backend/app/insight/datasource/bqMetrics.py | 2 +- .../app/insight/services/insight_builders.py | 3 ++- backend/app/insight/services/metrics.py | 19 ++++++++++++++++--- frontend/src/common/types.ts | 1 + .../DimensionSliceDetailModalMetricCard.tsx | 2 +- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/backend/app/insight/datasource/bqMetrics.py b/backend/app/insight/datasource/bqMetrics.py index 1e6fdcd..1d2e5b0 100644 --- a/backend/app/insight/datasource/bqMetrics.py +++ b/backend/app/insight/datasource/bqMetrics.py @@ -251,7 +251,7 @@ def build_metrics(self, df: pd.DataFrame, value_by_date_df: pd.DataFrame) -> MetricInsight: insight = MetricInsight() - insight.name = metric.get_id() + insight.name = metric.get_display_name() insight.keyDimensions = self.find_key_dimensions(df) insight.dimensions = self._get_dimensions(df) insight.totalSegments = calculate_total_segments(insight.dimensions) diff --git a/backend/app/insight/services/insight_builders.py b/backend/app/insight/services/insight_builders.py index 0a9a5ba..9f78504 100644 --- a/backend/app/insight/services/insight_builders.py +++ b/backend/app/insight/services/insight_builders.py @@ -84,7 +84,8 @@ def gen_value_by_date(self, df: polars.DataFrame, metric: Metric): def build_metric_insight(self, metric: Metric, parent_metric: Optional[Metric] = None) -> MetricInsight: insight = MetricInsight() - insight.name = metric.get_id() + insight.id = metric.get_id() + insight.name = metric.get_display_name() insight.filters = metric.filters if isinstance( metric, SingleColumnMetric) else None insight.baselineNumRows = self.overall_aggregated_df['count_baseline'].sum() diff --git a/backend/app/insight/services/metrics.py b/backend/app/insight/services/metrics.py index 3aa5594..9b23054 100644 --- a/backend/app/insight/services/metrics.py +++ b/backend/app/insight/services/metrics.py @@ -82,6 +82,10 @@ def get_aggregation_exprs(self, agg_override: Optional[AggregateMethod] = None) def get_id(self): pass + @abstractmethod + def get_display_name(self): + pass + @abstractmethod def get_metric_type(self): pass @@ -106,15 +110,21 @@ def get_id(self): if self.name is not None: return self.name - filters_hash = "" + filters_hash_suffix = "" if len(self.filters) > 0: filters_in_json = orjson.dumps( self.filters, option=orjson.OPT_SORT_KEYS) hasher = hashlib.sha1() hasher.update(filters_in_json) - filters_hash = f"_{hasher.hexdigest()[:6]}" + filters_hash_suffix = f"_{hasher.hexdigest()[:6]}" - return f"{self.column}_{self.aggregate_method.name}{filters_hash}" + return f"{self.column}_{self.aggregate_method.name}{filters_hash_suffix}" + + def get_display_name(self): + if self.name is not None: + return self.name + + return f"{self.aggregate_method.name} {self.column}" def get_aggregation_exprs(self, agg_override: Optional[AggregateMethod] = None) -> Iterable[Expr]: col = pl.col(self.column) @@ -147,6 +157,9 @@ def __post_init__(self): self.numerator_metric.name = f"{self.name} numerator" self.denominator_metric.name = f"{self.name} denominator" + def get_display_name(self): + return self.name + def get_id(self): return self.name diff --git a/frontend/src/common/types.ts b/frontend/src/common/types.ts index 3be10b3..0274ee1 100644 --- a/frontend/src/common/types.ts +++ b/frontend/src/common/types.ts @@ -1,4 +1,5 @@ export interface InsightMetric { + id: string; name: string; keyDimensions: string[]; totalSegments: number; diff --git a/frontend/src/components/main-dashboard/dimention-slice-detail-modal/DimensionSliceDetailModalMetricCard.tsx b/frontend/src/components/main-dashboard/dimention-slice-detail-modal/DimensionSliceDetailModalMetricCard.tsx index e05f625..0e9d3f5 100644 --- a/frontend/src/components/main-dashboard/dimention-slice-detail-modal/DimensionSliceDetailModalMetricCard.tsx +++ b/frontend/src/components/main-dashboard/dimention-slice-detail-modal/DimensionSliceDetailModalMetricCard.tsx @@ -48,7 +48,7 @@ export function DimensionSliceDetailModalMetricCard({ return null; } - const relatedSegments = relatedSegmentsByMetricName[metric.name]; + const relatedSegments = relatedSegmentsByMetricName[metric.id]; const maxImpact = Math.max( ...relatedSegments.map((info) => Math.abs(info.impact))