diff --git a/metadata-ingestion/setup.py b/metadata-ingestion/setup.py index 6f0fce4d27102..8b778048c3475 100644 --- a/metadata-ingestion/setup.py +++ b/metadata-ingestion/setup.py @@ -101,7 +101,7 @@ sqlglot_lib = { # Using an Acryl fork of sqlglot. # https://github.com/tobymao/sqlglot/compare/main...hsheth2:sqlglot:main?expand=1 - "acryl-sqlglot[rs]==25.8.2.dev9", + "acryl-sqlglot[rs]==25.20.2.dev5", } classification_lib = { @@ -722,7 +722,7 @@ "snowflake-summary = datahub.ingestion.source.snowflake.snowflake_summary:SnowflakeSummarySource", "snowflake-queries = datahub.ingestion.source.snowflake.snowflake_queries:SnowflakeQueriesSource", "superset = datahub.ingestion.source.superset:SupersetSource", - "tableau = datahub.ingestion.source.tableau:TableauSource", + "tableau = datahub.ingestion.source.tableau.tableau:TableauSource", "openapi = datahub.ingestion.source.openapi:OpenApiSource", "metabase = datahub.ingestion.source.metabase:MetabaseSource", "teradata = datahub.ingestion.source.sql.teradata:TeradataSource", diff --git a/metadata-ingestion/src/datahub/cli/check_cli.py b/metadata-ingestion/src/datahub/cli/check_cli.py index 2b67c1582971b..6e9bfddd350f9 100644 --- a/metadata-ingestion/src/datahub/cli/check_cli.py +++ b/metadata-ingestion/src/datahub/cli/check_cli.py @@ -68,7 +68,7 @@ def metadata_file(json_file: str, rewrite: bool, unpack_mces: bool) -> None: "config": {"filename": out_file.name}, }, }, - no_default_report=True, + report_to=None, ) pipeline.run() diff --git a/metadata-ingestion/src/datahub/cli/docker_cli.py b/metadata-ingestion/src/datahub/cli/docker_cli.py index 707a9cab076e6..9189a881f9ce7 100644 --- a/metadata-ingestion/src/datahub/cli/docker_cli.py +++ b/metadata-ingestion/src/datahub/cli/docker_cli.py @@ -1001,7 +1001,7 @@ def ingest_sample_data(path: Optional[str], token: Optional[str]) -> None: if token is not None: recipe["sink"]["config"]["token"] = token - pipeline = Pipeline.create(recipe, no_default_report=True) + pipeline = Pipeline.create(recipe, report_to=None) pipeline.run() ret = pipeline.pretty_print_summary() sys.exit(ret) diff --git a/metadata-ingestion/src/datahub/cli/ingest_cli.py b/metadata-ingestion/src/datahub/cli/ingest_cli.py index 0f1603255c29f..8654e6c282ba8 100644 --- a/metadata-ingestion/src/datahub/cli/ingest_cli.py +++ b/metadata-ingestion/src/datahub/cli/ingest_cli.py @@ -119,7 +119,7 @@ def run( strict_warnings: bool, preview_workunits: int, test_source_connection: bool, - report_to: str, + report_to: Optional[str], no_default_report: bool, no_spinner: bool, no_progress: bool, @@ -160,7 +160,11 @@ async def run_pipeline_to_completion(pipeline: Pipeline) -> int: raw_pipeline_config = pipeline_config.pop("__raw_config") if test_source_connection: - _test_source_connection(report_to, pipeline_config) + sys.exit(_test_source_connection(report_to, pipeline_config)) + + if no_default_report: + # The default is "datahub" reporting. The extra flag will disable it. + report_to = None async def run_ingestion_and_check_upgrade() -> int: # TRICKY: We want to make sure that the Pipeline.create() call happens on the @@ -171,13 +175,12 @@ async def run_ingestion_and_check_upgrade() -> int: # logger.debug(f"Using config: {pipeline_config}") pipeline = Pipeline.create( pipeline_config, - dry_run, - preview, - preview_workunits, - report_to, - no_default_report, - no_progress, - raw_pipeline_config, + dry_run=dry_run, + preview_mode=preview, + preview_workunits=preview_workunits, + report_to=report_to, + no_progress=no_progress, + raw_config=raw_pipeline_config, ) version_stats_future = asyncio.ensure_future( @@ -392,7 +395,7 @@ def deploy( click.echo(response) -def _test_source_connection(report_to: Optional[str], pipeline_config: dict) -> None: +def _test_source_connection(report_to: Optional[str], pipeline_config: dict) -> int: connection_report = None try: connection_report = ConnectionManager().test_source_connection(pipeline_config) @@ -401,12 +404,12 @@ def _test_source_connection(report_to: Optional[str], pipeline_config: dict) -> with open(report_to, "w") as out_fp: out_fp.write(connection_report.as_json()) logger.info(f"Wrote report successfully to {report_to}") - sys.exit(0) + return 0 except Exception as e: logger.error(f"Failed to test connection due to {e}") if connection_report: logger.error(connection_report.as_json()) - sys.exit(1) + return 1 def parse_restli_response(response): @@ -447,7 +450,7 @@ def mcps(path: str) -> None: }, } - pipeline = Pipeline.create(recipe, no_default_report=True) + pipeline = Pipeline.create(recipe, report_to=None) pipeline.run() ret = pipeline.pretty_print_summary() sys.exit(ret) diff --git a/metadata-ingestion/src/datahub/emitter/mce_builder.py b/metadata-ingestion/src/datahub/emitter/mce_builder.py index df769f35b4778..e273bab62fe7a 100644 --- a/metadata-ingestion/src/datahub/emitter/mce_builder.py +++ b/metadata-ingestion/src/datahub/emitter/mce_builder.py @@ -50,7 +50,6 @@ UpstreamLineageClass, _Aspect as AspectAbstract, ) -from datahub.metadata.urns import CorpGroupUrn, CorpUserUrn from datahub.utilities.urn_encoder import UrnEncoder from datahub.utilities.urns.data_flow_urn import DataFlowUrn from datahub.utilities.urns.dataset_urn import DatasetUrn @@ -225,21 +224,6 @@ def make_user_urn(username: str) -> str: ) -def make_actor_urn(actor: str) -> Union[CorpUserUrn, CorpGroupUrn]: - """ - Makes a user urn if the input is not a user or group urn already - """ - return ( - CorpUserUrn(actor) - if not actor.startswith(("urn:li:corpuser:", "urn:li:corpGroup:")) - else ( - CorpUserUrn.from_string(actor) - if actor.startswith("urn:li:corpuser:") - else CorpGroupUrn.from_string(actor) - ) - ) - - def make_group_urn(groupname: str) -> str: """ Makes a group urn if the input is not a user or group urn already diff --git a/metadata-ingestion/src/datahub/ingestion/run/pipeline.py b/metadata-ingestion/src/datahub/ingestion/run/pipeline.py index 0a91c4918d801..a16a3df57d1bc 100644 --- a/metadata-ingestion/src/datahub/ingestion/run/pipeline.py +++ b/metadata-ingestion/src/datahub/ingestion/run/pipeline.py @@ -221,7 +221,6 @@ def __init__( preview_mode: bool = False, preview_workunits: int = 10, report_to: Optional[str] = None, - no_default_report: bool = False, no_progress: bool = False, ): self.config = config @@ -279,7 +278,7 @@ def __init__( with set_graph_context(self.graph): with _add_init_error_context("configure reporters"): - self._configure_reporting(report_to, no_default_report) + self._configure_reporting(report_to) with _add_init_error_context( f"find a registered source for type {self.source_type}" @@ -326,15 +325,19 @@ def _configure_transforms(self) -> None: # Add the system metadata transformer at the end of the list. self.transformers.append(SystemMetadataTransformer(self.ctx)) - def _configure_reporting( - self, report_to: Optional[str], no_default_report: bool - ) -> None: - if report_to == "datahub": + def _configure_reporting(self, report_to: Optional[str]) -> None: + if self.dry_run: + # In dry run mode, we don't want to report anything. + return + + if not report_to: + # Reporting is disabled. + pass + elif report_to == "datahub": # we add the default datahub reporter unless a datahub reporter is already configured - if not no_default_report and ( - not self.config.reporting - or "datahub" not in [x.type for x in self.config.reporting] - ): + if not self.config.reporting or "datahub" not in [ + reporter.type for reporter in self.config.reporting + ]: self.config.reporting.append( ReporterConfig.parse_obj({"type": "datahub"}) ) @@ -409,7 +412,6 @@ def create( preview_mode: bool = False, preview_workunits: int = 10, report_to: Optional[str] = "datahub", - no_default_report: bool = False, no_progress: bool = False, raw_config: Optional[dict] = None, ) -> "Pipeline": @@ -420,7 +422,6 @@ def create( preview_mode=preview_mode, preview_workunits=preview_workunits, report_to=report_to, - no_default_report=no_default_report, no_progress=no_progress, ) diff --git a/metadata-ingestion/src/datahub/ingestion/source/bigquery_v2/queries_extractor.py b/metadata-ingestion/src/datahub/ingestion/source/bigquery_v2/queries_extractor.py index 2719d8b95bea8..23106ce7d2f86 100644 --- a/metadata-ingestion/src/datahub/ingestion/source/bigquery_v2/queries_extractor.py +++ b/metadata-ingestion/src/datahub/ingestion/source/bigquery_v2/queries_extractor.py @@ -36,6 +36,7 @@ BigQueryIdentifierBuilder, ) from datahub.ingestion.source.usage.usage_common import BaseUsageConfig +from datahub.metadata.urns import CorpUserUrn from datahub.sql_parsing.schema_resolver import SchemaResolver from datahub.sql_parsing.sql_parsing_aggregator import ( ObservedQuery, @@ -363,7 +364,9 @@ def _parse_audit_log_row(self, row: BigQueryJob) -> ObservedQuery: session_id=row["session_id"], timestamp=row["creation_time"], user=( - self.identifiers.gen_user_urn(row["user_email"]) + CorpUserUrn.from_string( + self.identifiers.gen_user_urn(row["user_email"]) + ) if row["user_email"] else None ), diff --git a/metadata-ingestion/src/datahub/ingestion/source/redshift/lineage.py b/metadata-ingestion/src/datahub/ingestion/source/redshift/lineage.py index dadb06b6a95e2..0e4cb6f1599e5 100644 --- a/metadata-ingestion/src/datahub/ingestion/source/redshift/lineage.py +++ b/metadata-ingestion/src/datahub/ingestion/source/redshift/lineage.py @@ -130,7 +130,7 @@ def parse_alter_table_rename(default_schema: str, query: str) -> Tuple[str, str, """ parsed_query = parse_statement(query, dialect=get_dialect("redshift")) - assert isinstance(parsed_query, sqlglot.exp.AlterTable) + assert isinstance(parsed_query, sqlglot.exp.Alter) prev_name = parsed_query.this.name rename_clause = parsed_query.args["actions"][0] assert isinstance(rename_clause, sqlglot.exp.RenameTable) @@ -875,7 +875,7 @@ def _process_table_renames( default_schema=self.config.default_schema, query=query_text, ) - except ValueError as e: + except Exception as e: logger.info(f"Failed to parse alter table rename: {e}") self.report.num_alter_table_parse_errors += 1 continue diff --git a/metadata-ingestion/src/datahub/ingestion/source/redshift/lineage_v2.py b/metadata-ingestion/src/datahub/ingestion/source/redshift/lineage_v2.py index bd0bbe742a219..4b7f710beed08 100644 --- a/metadata-ingestion/src/datahub/ingestion/source/redshift/lineage_v2.py +++ b/metadata-ingestion/src/datahub/ingestion/source/redshift/lineage_v2.py @@ -31,6 +31,7 @@ from datahub.metadata.urns import DatasetUrn from datahub.sql_parsing.sql_parsing_aggregator import ( KnownQueryLineageInfo, + ObservedQuery, SqlParsingAggregator, ) from datahub.utilities.perf_timer import PerfTimer @@ -118,11 +119,13 @@ def build( if self.config.resolve_temp_table_in_lineage: for temp_row in self._lineage_v1.get_temp_tables(connection=connection): self.aggregator.add_observed_query( - query=temp_row.query_text, - default_db=self.database, - default_schema=self.config.default_schema, - session_id=temp_row.session_id, - query_timestamp=temp_row.start_time, + ObservedQuery( + query=temp_row.query_text, + default_db=self.database, + default_schema=self.config.default_schema, + session_id=temp_row.session_id, + timestamp=temp_row.start_time, + ), # The "temp table" query actually returns all CREATE TABLE statements, even if they # aren't explicitly a temp table. As such, setting is_known_temp_table=True # would not be correct. We already have mechanisms to autodetect temp tables, @@ -263,11 +266,13 @@ def _process_sql_parser_lineage(self, lineage_row: LineageRow) -> None: # TODO actor self.aggregator.add_observed_query( - query=ddl, - default_db=self.database, - default_schema=self.config.default_schema, - query_timestamp=lineage_row.timestamp, - session_id=lineage_row.session_id, + ObservedQuery( + query=ddl, + default_db=self.database, + default_schema=self.config.default_schema, + timestamp=lineage_row.timestamp, + session_id=lineage_row.session_id, + ) ) def _make_filtered_target(self, lineage_row: LineageRow) -> Optional[DatasetUrn]: diff --git a/metadata-ingestion/src/datahub/ingestion/source/tableau/__init__.py b/metadata-ingestion/src/datahub/ingestion/source/tableau/__init__.py new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/metadata-ingestion/src/datahub/ingestion/source/tableau.py b/metadata-ingestion/src/datahub/ingestion/source/tableau/tableau.py similarity index 92% rename from metadata-ingestion/src/datahub/ingestion/source/tableau.py rename to metadata-ingestion/src/datahub/ingestion/source/tableau/tableau.py index 510cb6c96d1f2..4a1ec14ca1d4e 100644 --- a/metadata-ingestion/src/datahub/ingestion/source/tableau.py +++ b/metadata-ingestion/src/datahub/ingestion/source/tableau/tableau.py @@ -69,7 +69,6 @@ TestConnectionReport, ) from datahub.ingestion.api.workunit import MetadataWorkUnit -from datahub.ingestion.source import tableau_constant as c from datahub.ingestion.source.common.subtypes import ( BIContainerSubTypes, DatasetSubTypes, @@ -83,7 +82,8 @@ StatefulIngestionConfigBase, StatefulIngestionSourceBase, ) -from datahub.ingestion.source.tableau_common import ( +from datahub.ingestion.source.tableau import tableau_constant as c +from datahub.ingestion.source.tableau.tableau_common import ( FIELD_TYPE_MAPPING, MetadataQueryException, TableauLineageOverrides, @@ -93,6 +93,7 @@ dashboard_graphql_query, database_servers_graphql_query, database_tables_graphql_query, + datasource_upstream_fields_graphql_query, embedded_datasource_graphql_query, get_filter_pages, get_overridden_info, @@ -101,7 +102,7 @@ make_fine_grained_lineage_class, make_upstream_class, published_datasource_graphql_query, - query_metadata, + query_metadata_cursor_based_pagination, sheet_graphql_query, tableau_field_to_schema_field, workbook_graphql_query, @@ -345,6 +346,12 @@ class TableauConfig( default=10, description="[advanced] Number of metadata objects (e.g. CustomSQLTable, PublishedDatasource, etc) to query at a time using the Tableau API.", ) + + fetch_size: int = Field( + default=250, + description="Specifies the number of records to retrieve in each batch during a query execution.", + ) + # We've found that even with a small workbook page size (e.g. 10), the Tableau API often # returns warnings like this: # { @@ -483,9 +490,9 @@ class UsageStat: class TableauProject: id: str name: str - description: str + description: Optional[str] parent_id: Optional[str] - parent_name: Optional[str] # Name of parent project + parent_name: Optional[str] # Name of a parent project path: List[str] @@ -936,6 +943,7 @@ def _init_workbook_registry(self) -> None: def _populate_projects_registry(self) -> None: if self.server is None: + logger.warning("server is None. Can not initialize the project registry") return logger.info("Initializing site project registry") @@ -972,38 +980,55 @@ def get_connection_object_page( query: str, connection_type: str, query_filter: str, - count: int = 0, - offset: int = 0, + current_cursor: Optional[str], + fetch_size: int = 250, retry_on_auth_error: bool = True, retries_remaining: Optional[int] = None, - ) -> Tuple[dict, int, int]: + ) -> Tuple[dict, Optional[str], int]: + """ + `current_cursor:` Tableau Server executes the query and returns + a set of records based on the specified fetch_size. It also provides a cursor that + indicates the current position within the result set. In the next API call, + you pass this cursor to retrieve the next batch of records, + with each batch containing up to fetch_size records. + Initial value is None. + + `fetch_size:` The number of records to retrieve from Tableau + Server in a single API call, starting from the current cursor position on Tableau Server. + """ retries_remaining = retries_remaining or self.config.max_retries logger.debug( - f"Query {connection_type} to get {count} objects with offset {offset}" + f"Query {connection_type} to get {fetch_size} objects with cursor {current_cursor}" f" and filter {query_filter}" ) try: assert self.server is not None - query_data = query_metadata( - self.server, query, connection_type, count, offset, query_filter + query_data = query_metadata_cursor_based_pagination( + server=self.server, + main_query=query, + connection_name=connection_type, + first=fetch_size, + after=current_cursor, + qry_filter=query_filter, ) + except REAUTHENTICATE_ERRORS: if not retry_on_auth_error: raise # If ingestion has been running for over 2 hours, the Tableau # temporary credentials will expire. If this happens, this exception - # will be thrown and we need to re-authenticate and retry. + # will be thrown, and we need to re-authenticate and retry. self._re_authenticate() return self.get_connection_object_page( - query, - connection_type, - query_filter, - count, - offset, + query=query, + connection_type=connection_type, + query_filter=query_filter, + fetch_size=fetch_size, + current_cursor=current_cursor, retry_on_auth_error=False, - retries_remaining=retries_remaining, + retries_remaining=retries_remaining - 1, ) except OSError: # In tableauseverclient 0.26 (which was yanked and released in 0.28 on 2023-10-04), @@ -1015,11 +1040,11 @@ def get_connection_object_page( if retries_remaining <= 0: raise return self.get_connection_object_page( - query, - connection_type, - query_filter, - count, - offset, + query=query, + connection_type=connection_type, + query_filter=query_filter, + fetch_size=fetch_size, + current_cursor=current_cursor, retry_on_auth_error=False, retries_remaining=retries_remaining - 1, ) @@ -1035,6 +1060,7 @@ def get_connection_object_page( # filter out PERMISSIONS_MODE_SWITCHED to report error in human-readable format other_errors = [] permission_mode_errors = [] + node_limit_errors = [] for error in errors: if ( error.get("extensions") @@ -1042,6 +1068,11 @@ def get_connection_object_page( == "PERMISSIONS_MODE_SWITCHED" ): permission_mode_errors.append(error) + elif ( + error.get("extensions") + and error["extensions"].get("code") == "NODE_LIMIT_EXCEEDED" + ): + node_limit_errors.append(error) else: other_errors.append(error) @@ -1060,9 +1091,25 @@ def get_connection_object_page( context=f"{permission_mode_errors}", ) + if node_limit_errors: + logger.debug(f"Node Limit Error. query_data {query_data}") + self.report.warning( + title="Tableau Data Exceed Predefined Limit", + message="The numbers of record in result set exceeds a predefined limit. Increase the tableau " + "configuration metadata query node limit to higher value. Refer " + "https://help.tableau.com/current/server/en-us/" + "cli_configuration-set_tsm.htm#metadata_nodelimit", + context=f"""{{ + "errors": {node_limit_errors}, + "connection_type": {connection_type}, + "query_filter": {query_filter}, + "query": {query}, + }}""", + ) else: - # As of Tableau Server 2024.2, the metadata API sporadically returns a 30 second - # timeout error. It doesn't reliably happen, so retrying a couple times makes sense. + # As of Tableau Server 2024.2, the metadata API sporadically returns a 30-second + # timeout error. + # It doesn't reliably happen, so retrying a couple of times makes sense. if all( error.get("message") == "Execution canceled because timeout of 30000 millis was reached" @@ -1082,23 +1129,28 @@ def get_connection_object_page( ) time.sleep(backoff_time) return self.get_connection_object_page( - query, - connection_type, - query_filter, - count, - offset, + query=query, + connection_type=connection_type, + query_filter=query_filter, + fetch_size=fetch_size, + current_cursor=current_cursor, retry_on_auth_error=False, - retries_remaining=retries_remaining - 1, + retries_remaining=retries_remaining, ) raise RuntimeError(f"Query {connection_type} error: {errors}") connection_object = query_data.get(c.DATA, {}).get(connection_type, {}) - total_count = connection_object.get(c.TOTAL_COUNT, 0) has_next_page = connection_object.get(c.PAGE_INFO, {}).get( c.HAS_NEXT_PAGE, False ) - return connection_object, total_count, has_next_page + + next_cursor = connection_object.get(c.PAGE_INFO, {}).get( + "endCursor", + None, + ) + + return connection_object, next_cursor, has_next_page def get_connection_objects( self, @@ -1114,29 +1166,23 @@ def get_connection_objects( filter_pages = get_filter_pages(query_filter, page_size) for filter_page in filter_pages: - total_count = page_size has_next_page = 1 - offset = 0 + current_cursor: Optional[str] = None while has_next_page: - count = ( - page_size - if offset + page_size < total_count - else total_count - offset - ) + filter_: str = make_filter(filter_page) + ( connection_objects, - total_count, + current_cursor, has_next_page, ) = self.get_connection_object_page( - query, - connection_type, - make_filter(filter_page), - count, - offset, + query=query, + connection_type=connection_type, + query_filter=filter_, + current_cursor=current_cursor, + fetch_size=self.config.fetch_size, ) - offset += count - yield from connection_objects.get(c.NODES) or [] def emit_workbooks(self) -> Iterable[MetadataWorkUnit]: @@ -2291,6 +2337,41 @@ def _get_datasource_container_key( return container_key + def update_datasource_for_field_upstream( + self, + datasource: dict, + field_upstream_query: str, + ) -> dict: + # Collect field ids to fetch field upstreams + field_ids: List[str] = [] + for field in datasource.get(c.FIELDS, []): + if field.get(c.ID): + field_ids.append(field.get(c.ID)) + + # Fetch field upstreams and arrange them in map + field_vs_upstream: Dict[str, dict] = {} + for field_upstream in self.get_connection_objects( + field_upstream_query, + c.FIELDS_CONNECTION, + {c.ID_WITH_IN: field_ids}, + ): + if field_upstream.get(c.ID): + field_id = field_upstream[c.ID] + # delete the field id, we don't need it for further processing + del field_upstream[c.ID] + field_vs_upstream[field_id] = field_upstream + + # update datasource's field for its upstream + for field_dict in datasource.get(c.FIELDS, []): + field_upstream_dict: Optional[dict] = field_vs_upstream.get( + field_dict.get(c.ID) + ) + if field_upstream_dict: + # Add upstream fields to field + field_dict.update(field_upstream_dict) + + return datasource + def emit_published_datasources(self) -> Iterable[MetadataWorkUnit]: datasource_filter = {c.ID_WITH_IN: self.datasource_ids_being_used} @@ -2299,6 +2380,11 @@ def emit_published_datasources(self) -> Iterable[MetadataWorkUnit]: c.PUBLISHED_DATA_SOURCES_CONNECTION, datasource_filter, ): + datasource = self.update_datasource_for_field_upstream( + datasource=datasource, + field_upstream_query=datasource_upstream_fields_graphql_query, + ) + yield from self.emit_datasource(datasource) def emit_upstream_tables(self) -> Iterable[MetadataWorkUnit]: @@ -2940,6 +3026,10 @@ def emit_embedded_datasources(self) -> Iterable[MetadataWorkUnit]: c.EMBEDDED_DATA_SOURCES_CONNECTION, datasource_filter, ): + datasource = self.update_datasource_for_field_upstream( + datasource=datasource, + field_upstream_query=datasource_upstream_fields_graphql_query, + ) yield from self.emit_datasource( datasource, datasource.get(c.WORKBOOK), @@ -2978,32 +3068,76 @@ def _get_ownership(self, user: str) -> Optional[OwnershipClass]: return None def emit_project_containers(self) -> Iterable[MetadataWorkUnit]: - for _id, project in self.tableau_project_registry.items(): - parent_container_key: Optional[ContainerKey] = None - if project.parent_id: - parent_container_key = self.gen_project_key(project.parent_id) - elif self.config.add_site_container and self.site and self.site.id: - parent_container_key = self.gen_site_key(self.site.id) + generated_project_keys: Set[str] = set() + + def emit_project_in_topological_order( + project_: TableauProject, + ) -> Iterable[MetadataWorkUnit]: + """ + The source_helpers.py file includes a function called auto_browse_path_v2 that automatically generates + BrowsePathsV2. This auto-generation relies on the correct sequencing of MetadataWorkUnit containers. + The emit_project_in_topological_order function ensures that parent containers are emitted before their child + containers. + This is a recursive function. + """ + project_key: ProjectKey = self.gen_project_key(project_.id) + + if project_key.guid() in generated_project_keys: + return + + generated_project_keys.add(project_key.guid()) + + parent_project_key: Optional[ + Union[ProjectKey, SiteKey] + ] = None # It is going + # to be used as a parent container key for the current tableau project + + if project_.parent_id is not None: + # Go to the parent project as we need to generate container first for parent + parent_project_key = self.gen_project_key(project_.parent_id) + + parent_tableau_project: Optional[ + TableauProject + ] = self.tableau_project_registry.get(project_.parent_id) + + if ( + parent_tableau_project is None + ): # It is not in project registry because of project_pattern + assert ( + project_.parent_name + ), f"project {project_.name} should not be null" + parent_tableau_project = TableauProject( + id=project_.parent_id, + name=project_.parent_name, + description=None, + parent_id=None, + parent_name=None, + path=[], + ) + + yield from emit_project_in_topological_order(parent_tableau_project) + + else: + # This is a root Tableau project since the parent_project_id is None. + # For a root project, either the site is the parent, or the platform is the default parent. + if self.config.add_site_container and self.site and self.site.id: + # The site containers have already been generated by emit_site_container, so we + # don't need to emit them again here. + parent_project_key = self.gen_site_key(self.site.id) yield from gen_containers( - container_key=self.gen_project_key(_id), - name=project.name, - description=project.description, + container_key=project_key, + name=project_.name, + description=project_.description, sub_types=[c.PROJECT], - parent_container_key=parent_container_key, + parent_container_key=parent_project_key, ) - if ( - project.parent_id is not None - and project.parent_id not in self.tableau_project_registry - ): - # Parent project got skipped because of project_pattern. - # Let's ingest its container name property to show parent container name on DataHub Portal, otherwise - # DataHub Portal will show parent container URN - yield from gen_containers( - container_key=self.gen_project_key(project.parent_id), - name=cast(str, project.parent_name), - sub_types=[c.PROJECT], - ) + + for id_, project in self.tableau_project_registry.items(): + logger.debug( + f"project {project.name} and it's parent {project.parent_name} and parent id {project.parent_id}" + ) + yield from emit_project_in_topological_order(project) def emit_site_container(self): if not self.site or not self.site.id: diff --git a/metadata-ingestion/src/datahub/ingestion/source/tableau_common.py b/metadata-ingestion/src/datahub/ingestion/source/tableau/tableau_common.py similarity index 93% rename from metadata-ingestion/src/datahub/ingestion/source/tableau_common.py rename to metadata-ingestion/src/datahub/ingestion/source/tableau/tableau_common.py index f3a9c4a5aa201..1fbf31a48890d 100644 --- a/metadata-ingestion/src/datahub/ingestion/source/tableau_common.py +++ b/metadata-ingestion/src/datahub/ingestion/source/tableau/tableau_common.py @@ -10,7 +10,7 @@ import datahub.emitter.mce_builder as builder from datahub.configuration.common import ConfigModel -from datahub.ingestion.source import tableau_constant as c +from datahub.ingestion.source.tableau import tableau_constant as c from datahub.metadata.com.linkedin.pegasus2avro.dataset import ( DatasetLineageType, FineGrainedLineage, @@ -223,19 +223,19 @@ class MetadataQueryException(Exception): description isHidden folderName - upstreamFields { - name - datasource { - id - } - } - upstreamColumns { - name - table { - __typename - id - } - } + # upstreamFields { + # name + # datasource { + # id + # } + # } + # upstreamColumns { + # name + # table { + # __typename + # id + # } + # } ... on ColumnField { dataCategory role @@ -336,6 +336,26 @@ class MetadataQueryException(Exception): } """ + +datasource_upstream_fields_graphql_query = """ +{ + id + upstreamFields { + name + datasource { + id + } + } + upstreamColumns { + name + table { + __typename + id + } + } +} +""" + published_datasource_graphql_query = """ { __typename @@ -368,19 +388,19 @@ class MetadataQueryException(Exception): description isHidden folderName - upstreamFields { - name - datasource { - id - } - } - upstreamColumns { - name - table { - __typename - id - } - } + # upstreamFields { + # name + # datasource { + # id + # } + # } + # upstreamColumns { + # name + # table { + # __typename + # id + # } + # } ... on ColumnField { dataCategory role @@ -910,40 +930,46 @@ def make_filter(filter_dict: dict) -> str: return filter -def query_metadata( +def query_metadata_cursor_based_pagination( server: Server, main_query: str, connection_name: str, first: int, - offset: int, + after: Optional[str], qry_filter: str = "", ) -> dict: - query = """{{ - {connection_name} (first:{first}, offset:{offset}, filter:{{{filter}}}) - {{ - nodes {main_query} - pageInfo {{ - hasNextPage - endCursor + query = f""" + query GetItems( + $first: Int, + $after: String + ) {{ + {connection_name} ( first: $first, after: $after, filter:{{ {qry_filter} }}) + {{ + nodes {main_query} + pageInfo {{ + hasNextPage + endCursor + }} }} - totalCount - }} - }}""".format( - connection_name=connection_name, - first=first, - offset=offset, - filter=qry_filter, - main_query=main_query, + }}""" # {{ is to escape { character of f-string + + result = server.metadata.query( + query=query, + variables={ + "first": first, + "after": after, + }, ) - return server.metadata.query(query) + + return result def get_filter_pages(query_filter: dict, page_size: int) -> List[dict]: filter_pages = [query_filter] - # If this is primary id filter so we can use divide this query list into + # If this is primary id filter, so we can use divide this query list into # multiple requests each with smaller filter list (of order page_size). - # It is observed in the past that if list of primary ids grow beyond - # a few ten thousands then tableau server responds with empty response + # It is observed in the past that if a list of primary ids grows beyond + # a few ten thousand, then tableau server responds with empty response # causing below error: # tableauserverclient.server.endpoint.exceptions.NonXMLResponseError: b'' if ( diff --git a/metadata-ingestion/src/datahub/ingestion/source/tableau_constant.py b/metadata-ingestion/src/datahub/ingestion/source/tableau/tableau_constant.py similarity index 98% rename from metadata-ingestion/src/datahub/ingestion/source/tableau_constant.py rename to metadata-ingestion/src/datahub/ingestion/source/tableau/tableau_constant.py index 5acadf8ca19e5..d1dd0d9281999 100644 --- a/metadata-ingestion/src/datahub/ingestion/source/tableau_constant.py +++ b/metadata-ingestion/src/datahub/ingestion/source/tableau/tableau_constant.py @@ -66,6 +66,7 @@ EXTRACT_LAST_INCREMENTAL_UPDATE_TIME = "extractLastIncrementalUpdateTime" EXTRACT_LAST_UPDATE_TIME = "extractLastUpdateTime" PUBLISHED_DATA_SOURCES_CONNECTION = "publishedDatasourcesConnection" +FIELDS_CONNECTION = "fieldsConnection" DATA_SOURCE_FIELDS = "datasourceFields" SHEETS_CONNECTION = "sheetsConnection" CREATED_AT = "createdAt" diff --git a/metadata-ingestion/src/datahub/sql_parsing/sql_parsing_aggregator.py b/metadata-ingestion/src/datahub/sql_parsing/sql_parsing_aggregator.py index 9308ca8a0edd5..d945e135f0012 100644 --- a/metadata-ingestion/src/datahub/sql_parsing/sql_parsing_aggregator.py +++ b/metadata-ingestion/src/datahub/sql_parsing/sql_parsing_aggregator.py @@ -16,7 +16,7 @@ import datahub.emitter.mce_builder as builder import datahub.metadata.schema_classes as models from datahub.configuration.time_window_config import get_time_bucket -from datahub.emitter.mce_builder import get_sys_time, make_actor_urn, make_ts_millis +from datahub.emitter.mce_builder import get_sys_time, make_ts_millis from datahub.emitter.mcp import MetadataChangeProposalWrapper from datahub.emitter.sql_parsing_builder import compute_upstream_fields from datahub.ingestion.api.closeable import Closeable @@ -47,6 +47,10 @@ get_query_fingerprint, try_format_query, ) +from datahub.sql_parsing.tool_meta_extractor import ( + ToolMetaExtractor, + ToolMetaExtractorReport, +) from datahub.utilities.cooperative_timeout import CooperativeTimeoutError from datahub.utilities.file_backed_collections import ( ConnectionWrapper, @@ -88,9 +92,16 @@ class LoggedQuery: @dataclasses.dataclass -class ObservedQuery(LoggedQuery): +class ObservedQuery: + query: str + session_id: Optional[str] = None + timestamp: Optional[datetime] = None + user: Optional[Union[CorpUserUrn, CorpGroupUrn]] = None + default_db: Optional[str] = None + default_schema: Optional[str] = None query_hash: Optional[str] = None usage_multiplier: int = 1 + # Use this to store addtitional key-value information about query for debugging extra_info: Optional[dict] = None @@ -179,6 +190,8 @@ class PreparsedQuery: query_type_props: QueryTypeProps = dataclasses.field( default_factory=lambda: QueryTypeProps() ) + # Use this to store addtitional key-value information about query for debugging + extra_info: Optional[dict] = None @dataclasses.dataclass @@ -248,6 +261,9 @@ class SqlAggregatorReport(Report): num_operations_generated: int = 0 num_operations_skipped_due_to_filters: int = 0 + # Tool Metadata Extraction + tool_meta_report: Optional[ToolMetaExtractorReport] = None + def compute_stats(self) -> None: self.schema_resolver_count = self._aggregator._schema_resolver.schema_count() self.num_unique_query_fingerprints = len(self._aggregator._query_map) @@ -422,6 +438,10 @@ def __init__( tablename="query_usage_counts", ) + # Tool Extractor + self._tool_meta_extractor = ToolMetaExtractor() + self.report.tool_meta_report = self._tool_meta_extractor.report + def close(self) -> None: self._exit_stack.close() @@ -497,16 +517,7 @@ def add( elif isinstance(item, PreparsedQuery): self.add_preparsed_query(item) elif isinstance(item, ObservedQuery): - self.add_observed_query( - query=item.query, - default_db=item.default_db, - default_schema=item.default_schema, - session_id=item.session_id, - usage_multiplier=item.usage_multiplier, - query_timestamp=item.timestamp, - user=make_actor_urn(item.user) if item.user else None, - query_hash=item.query_hash, - ) + self.add_observed_query(item) else: raise ValueError(f"Cannot add unknown item type: {type(item)}") @@ -650,18 +661,9 @@ def add_view_definition( def add_observed_query( self, - query: str, - default_db: Optional[str] = None, - default_schema: Optional[str] = None, - query_timestamp: Optional[datetime] = None, - user: Optional[Union[CorpUserUrn, CorpGroupUrn]] = None, - session_id: Optional[ - str - ] = None, # can only see temp tables with the same session - usage_multiplier: int = 1, + observed: ObservedQuery, is_known_temp_table: bool = False, require_out_table_schema: bool = False, - query_hash: Optional[str] = None, ) -> None: """Add an observed query to the aggregator. @@ -675,7 +677,7 @@ def add_observed_query( self.report.num_observed_queries += 1 # All queries with no session ID are assumed to be part of the same session. - session_id = session_id or _MISSING_SESSION_ID + session_id = observed.session_id or _MISSING_SESSION_ID # Load in the temp tables for this session. schema_resolver: SchemaResolverInterface = ( @@ -685,17 +687,17 @@ def add_observed_query( # Run the SQL parser. parsed = self._run_sql_parser( - query, - default_db=default_db, - default_schema=default_schema, + observed.query, + default_db=observed.default_db, + default_schema=observed.default_schema, schema_resolver=schema_resolver, session_id=session_id, - timestamp=query_timestamp, - user=user, + timestamp=observed.timestamp, + user=observed.user, ) if parsed.debug_info.error: self.report.observed_query_parse_failures.append( - f"{parsed.debug_info.error} on query: {query[:100]}" + f"{parsed.debug_info.error} on query: {observed.query[:100]}" ) if parsed.debug_info.table_error: self.report.num_observed_queries_failed += 1 @@ -705,14 +707,14 @@ def add_observed_query( if isinstance(parsed.debug_info.column_error, CooperativeTimeoutError): self.report.num_observed_queries_column_timeout += 1 - query_fingerprint = query_hash or parsed.query_fingerprint + query_fingerprint = observed.query_hash or parsed.query_fingerprint self.add_preparsed_query( PreparsedQuery( query_id=query_fingerprint, - query_text=query, - query_count=usage_multiplier, - timestamp=query_timestamp, - user=user, + query_text=observed.query, + query_count=observed.usage_multiplier, + timestamp=observed.timestamp, + user=observed.user, session_id=session_id, query_type=parsed.query_type, query_type_props=parsed.query_type_props, @@ -723,6 +725,7 @@ def add_observed_query( column_usage=compute_upstream_fields(parsed), inferred_schema=infer_output_schema(parsed), confidence_score=parsed.debug_info.confidence, + extra_info=observed.extra_info, ), is_known_temp_table=is_known_temp_table, require_out_table_schema=require_out_table_schema, @@ -738,6 +741,12 @@ def add_preparsed_query( session_has_temp_tables: bool = True, _is_internal: bool = False, ) -> None: + + # Adding tool specific metadata extraction here allows it + # to work for both ObservedQuery and PreparsedQuery as + # add_preparsed_query it used within add_observed_query. + self._tool_meta_extractor.extract_bi_metadata(parsed) + if not _is_internal: self.report.num_preparsed_queries += 1 diff --git a/metadata-ingestion/src/datahub/sql_parsing/sqlglot_lineage.py b/metadata-ingestion/src/datahub/sql_parsing/sqlglot_lineage.py index 0146343002171..27d99a14c0520 100644 --- a/metadata-ingestion/src/datahub/sql_parsing/sqlglot_lineage.py +++ b/metadata-ingestion/src/datahub/sql_parsing/sqlglot_lineage.py @@ -198,7 +198,7 @@ def _table_level_lineage( sqlglot.exp.Update, sqlglot.exp.Delete, sqlglot.exp.Merge, - sqlglot.exp.AlterTable, + sqlglot.exp.Alter, ) # In some cases like "MERGE ... then INSERT (col1, col2) VALUES (col1, col2)", # the `this` on the INSERT part isn't a table. @@ -837,7 +837,10 @@ def _translate_internal_column_lineage( raw_column_lineage.downstream.column_type.sql(dialect=dialect) if raw_column_lineage.downstream.column_type and raw_column_lineage.downstream.column_type.this - != sqlglot.exp.DataType.Type.UNKNOWN + not in { + sqlglot.exp.DataType.Type.UNKNOWN, + sqlglot.exp.DataType.Type.NULL, + } else None ), ), diff --git a/metadata-ingestion/src/datahub/sql_parsing/tool_meta_extractor.py b/metadata-ingestion/src/datahub/sql_parsing/tool_meta_extractor.py new file mode 100644 index 0000000000000..cdd35c23e3088 --- /dev/null +++ b/metadata-ingestion/src/datahub/sql_parsing/tool_meta_extractor.py @@ -0,0 +1,96 @@ +import json +import logging +from dataclasses import dataclass, field +from typing import Callable, Dict, List, Optional, Tuple, Union + +from typing_extensions import Protocol + +from datahub.ingestion.api.report import Report +from datahub.metadata.urns import CorpGroupUrn, CorpUserUrn +from datahub.utilities.stats_collections import int_top_k_dict + +UrnStr = str + +logger = logging.getLogger(__name__) + + +class QueryLog(Protocol): + """Represents Query Log Entry + expected by QueryMetaExractor interface + """ + + query_text: str + user: Optional[Union[CorpUserUrn, CorpGroupUrn]] + extra_info: Optional[dict] + + +def _get_last_line(query: str) -> str: + return query.rstrip().rsplit("\n", maxsplit=1)[-1] + + +@dataclass +class ToolMetaExtractorReport(Report): + num_queries_meta_extracted: Dict[str, int] = field(default_factory=int_top_k_dict) + + +class ToolMetaExtractor: + """Enriches input query log entry with tool-specific details captured as part of query log + + Such as + - Queries executed on warehouse by Mode BI tool contain information of actual user interacting + with BI tool which is more useful as compared to service account used to execute query as reported + by warehouse query logs. + """ + + def __init__(self) -> None: + self.report = ToolMetaExtractorReport() + self.known_tool_extractors: List[Tuple[str, Callable[[QueryLog], bool]]] = [ + ( + "mode", + self._extract_mode_query, + ) + ] + + def _extract_mode_query(self, entry: QueryLog) -> bool: + """ + Returns: + bool: whether QueryLog entry is that of mode and mode user info + is extracted into entry. + """ + last_line = _get_last_line(entry.query_text) + + if not ( + last_line.startswith("--") + and '"url":"https://modeanalytics.com' in last_line + ): + return False + + mode_json_raw = last_line[2:] + mode_json = json.loads(mode_json_raw) + + original_user = entry.user + + entry.user = email_to_user_urn(mode_json["email"]) + entry.extra_info = entry.extra_info or {} + entry.extra_info["user_via"] = original_user + + # TODO: Generate an "origin" urn. + + return True + + def extract_bi_metadata(self, entry: QueryLog) -> bool: + + for tool, meta_extractor in self.known_tool_extractors: + try: + if meta_extractor(entry): + self.report.num_queries_meta_extracted[tool] += 1 + return True + except Exception: + logger.debug("Tool metadata extraction failed with error : {e}") + return False + + +# NOTE: This is implementing the most common user urn generation scenario +# however may need to be revisited at later point +def email_to_user_urn(email: str) -> CorpUserUrn: + return CorpUserUrn(email.split("@", 1)[0]) diff --git a/metadata-ingestion/src/datahub/utilities/file_backed_collections.py b/metadata-ingestion/src/datahub/utilities/file_backed_collections.py index bb2b827dc06c3..96d3732b8fb49 100644 --- a/metadata-ingestion/src/datahub/utilities/file_backed_collections.py +++ b/metadata-ingestion/src/datahub/utilities/file_backed_collections.py @@ -35,8 +35,13 @@ _DEFAULT_FILE_NAME = "sqlite.db" _DEFAULT_TABLE_NAME = "data" -_DEFAULT_MEMORY_CACHE_MAX_SIZE = 2000 -_DEFAULT_MEMORY_CACHE_EVICTION_BATCH_SIZE = 200 + +# As per https://stackoverflow.com/questions/7106016/too-many-sql-variables-error-in-django-with-sqlite3 +# the default SQLITE_MAX_VARIABLE_NUMBER is 999. There's a few places where we embed one id from every +# item in the cache into a query (e.g. when implementing __len__), so we need to be careful not to +# exceed this limit. +_DEFAULT_MEMORY_CACHE_MAX_SIZE = 900 +_DEFAULT_MEMORY_CACHE_EVICTION_BATCH_SIZE = 150 # https://docs.python.org/3/library/sqlite3.html#sqlite-and-python-types # Datetimes get converted to strings diff --git a/metadata-ingestion/src/datahub/utilities/mapping.py b/metadata-ingestion/src/datahub/utilities/mapping.py index ac10e26f76556..6cc7d9c50b775 100644 --- a/metadata-ingestion/src/datahub/utilities/mapping.py +++ b/metadata-ingestion/src/datahub/utilities/mapping.py @@ -383,14 +383,24 @@ def get_operation_value( if self.tag_prefix: tag = self.tag_prefix + tag return tag - elif ( - operation_type == Constants.ADD_OWNER_OPERATION - and operation_config[Constants.OWNER_TYPE] - ): + elif operation_type == Constants.ADD_OWNER_OPERATION: owner_id = _get_best_match(match, "owner") - owner_ids: List[str] = [_id.strip() for _id in owner_id.split(",")] + owner_type_raw = operation_config.get( + Constants.OWNER_TYPE, Constants.USER_OWNER + ) + owner_type_mapping: Dict[str, OwnerType] = { + Constants.USER_OWNER: OwnerType.USER, + Constants.GROUP_OWNER: OwnerType.GROUP, + } + if owner_type_raw not in owner_type_mapping: + logger.warning( + f"Invalid owner type: {owner_type_raw}. Valid owner types are {', '.join(owner_type_mapping.keys())}" + ) + return None + owner_type = owner_type_mapping[owner_type_raw] + owner_category = ( operation_config.get(Constants.OWNER_CATEGORY) or OwnershipTypeClass.DATAOWNER @@ -402,19 +412,12 @@ def get_operation_value( self.sanitize_owner_ids(owner_id) for owner_id in owner_ids ] - owner_type_mapping: Dict[str, OwnerType] = { - Constants.USER_OWNER: OwnerType.USER, - Constants.GROUP_OWNER: OwnerType.GROUP, - } - if operation_config[Constants.OWNER_TYPE] in owner_type_mapping: - return _make_owner_category_list( - owner_ids=owner_ids, - owner_category=owner_category, - owner_category_urn=owner_category_urn, - owner_type=owner_type_mapping[ - operation_config[Constants.OWNER_TYPE] - ], - ) + return _make_owner_category_list( + owner_ids=owner_ids, + owner_category=owner_category, + owner_category_urn=owner_category_urn, + owner_type=owner_type, + ) elif ( operation_type == Constants.ADD_TERM_OPERATION diff --git a/metadata-ingestion/tests/integration/bigquery_v2/bigquery_lineage_usage_golden.json b/metadata-ingestion/tests/integration/bigquery_v2/bigquery_lineage_usage_golden.json new file mode 100644 index 0000000000000..a7d46a2412b6c --- /dev/null +++ b/metadata-ingestion/tests/integration/bigquery_v2/bigquery_lineage_usage_golden.json @@ -0,0 +1,502 @@ +[ +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:bigquery,project-id-1.bigquery-dataset-1.view-1,PROD)", + "changeType": "UPSERT", + "aspectName": "upstreamLineage", + "aspect": { + "json": { + "upstreams": [ + { + "auditStamp": { + "time": 1643871600000, + "actor": "urn:li:corpuser:_ingestion" + }, + "created": { + "time": 1643871600000, + "actor": "urn:li:corpuser:foo" + }, + "dataset": "urn:li:dataset:(urn:li:dataPlatform:bigquery,project-id-1.bigquery-dataset-1.table-1,PROD)", + "type": "TRANSFORMED", + "query": "urn:li:query:176428c30cc3197730c20f6d0161efe869a0a041876d23c044aa2cd60d4c7a12" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:bigquery,project-id-1.bigquery-dataset-1.table-1,PROD)", + "changeType": "UPSERT", + "aspectName": "datasetUsageStatistics", + "aspect": { + "json": { + "timestampMillis": 1643846400000, + "eventGranularity": { + "unit": "DAY", + "multiple": 1 + }, + "partitionSpec": { + "partition": "FULL_TABLE_SNAPSHOT", + "type": "FULL_TABLE" + }, + "uniqueUserCount": 1, + "totalSqlQueries": 4, + "topSqlQueries": [ + "create view `bigquery-dataset-1`.`view-1` as select * from `bigquery-dataset-1`.`table-1`", + "select * from `bigquery-dataset-1`.`table-1`" + ], + "userCounts": [ + { + "user": "urn:li:corpuser:foo", + "count": 4 + } + ], + "fieldCounts": [] + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:176428c30cc3197730c20f6d0161efe869a0a041876d23c044aa2cd60d4c7a12", + "changeType": "UPSERT", + "aspectName": "queryProperties", + "aspect": { + "json": { + "statement": { + "value": "create view `bigquery-dataset-1`.`view-1` as select * from `bigquery-dataset-1`.`table-1`", + "language": "SQL" + }, + "source": "SYSTEM", + "created": { + "time": 1643871600000, + "actor": "urn:li:corpuser:foo" + }, + "lastModified": { + "time": 1643871600000, + "actor": "urn:li:corpuser:foo" + } + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:bigquery,project-id-1.bigquery-dataset-1.table-1,PROD)", + "changeType": "UPSERT", + "aspectName": "status", + "aspect": { + "json": { + "removed": false + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:176428c30cc3197730c20f6d0161efe869a0a041876d23c044aa2cd60d4c7a12", + "changeType": "UPSERT", + "aspectName": "queryUsageStatistics", + "aspect": { + "json": { + "timestampMillis": 1643846400000, + "eventGranularity": { + "unit": "DAY", + "multiple": 1 + }, + "partitionSpec": { + "partition": "FULL_TABLE_SNAPSHOT", + "type": "FULL_TABLE" + }, + "queryCount": 2, + "uniqueUserCount": 1, + "userCounts": [ + { + "user": "urn:li:corpuser:foo", + "count": 2 + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:176428c30cc3197730c20f6d0161efe869a0a041876d23c044aa2cd60d4c7a12", + "changeType": "UPSERT", + "aspectName": "dataPlatformInstance", + "aspect": { + "json": { + "platform": "urn:li:dataPlatform:bigquery" + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:bigquery,project-id-1.bigquery-dataset-1.view-1,PROD)", + "changeType": "UPSERT", + "aspectName": "datasetUsageStatistics", + "aspect": { + "json": { + "timestampMillis": 1643846400000, + "eventGranularity": { + "unit": "DAY", + "multiple": 1 + }, + "partitionSpec": { + "partition": "FULL_TABLE_SNAPSHOT", + "type": "FULL_TABLE" + }, + "uniqueUserCount": 1, + "totalSqlQueries": 4, + "topSqlQueries": [ + "select * from `bigquery-dataset-1`.`view-1`\nLIMIT 100\n-- {\"user\":\"@bar\",\"email\":\"bar@xyz.com\",\"url\":\"https://modeanalytics.com/acryltest/reports/6234ff78bc7d/runs/662b21949629/queries/f0aad24d5b37\",\"scheduled\":false}\n" + ], + "userCounts": [ + { + "user": "urn:li:corpuser:bar", + "count": 4 + } + ], + "fieldCounts": [] + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:176428c30cc3197730c20f6d0161efe869a0a041876d23c044aa2cd60d4c7a12", + "changeType": "UPSERT", + "aspectName": "querySubjects", + "aspect": { + "json": { + "subjects": [ + { + "entity": "urn:li:dataset:(urn:li:dataPlatform:bigquery,project-id-1.bigquery-dataset-1.table-1,PROD)" + }, + { + "entity": "urn:li:dataset:(urn:li:dataPlatform:bigquery,project-id-1.bigquery-dataset-1.view-1,PROD)" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:23f1935934face229de381fad193e390153180bf1e7afaa6db58e91fc28d0021", + "changeType": "UPSERT", + "aspectName": "queryProperties", + "aspect": { + "json": { + "statement": { + "value": "select * from `bigquery-dataset-1`.`table-1`", + "language": "SQL" + }, + "source": "SYSTEM", + "created": { + "time": 1643871600000, + "actor": "urn:li:corpuser:foo" + }, + "lastModified": { + "time": 1643871600000, + "actor": "urn:li:corpuser:foo" + } + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:176428c30cc3197730c20f6d0161efe869a0a041876d23c044aa2cd60d4c7a12", + "changeType": "UPSERT", + "aspectName": "status", + "aspect": { + "json": { + "removed": false + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:23f1935934face229de381fad193e390153180bf1e7afaa6db58e91fc28d0021", + "changeType": "UPSERT", + "aspectName": "querySubjects", + "aspect": { + "json": { + "subjects": [ + { + "entity": "urn:li:dataset:(urn:li:dataPlatform:bigquery,project-id-1.bigquery-dataset-1.table-1,PROD)" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:23f1935934face229de381fad193e390153180bf1e7afaa6db58e91fc28d0021", + "changeType": "UPSERT", + "aspectName": "queryUsageStatistics", + "aspect": { + "json": { + "timestampMillis": 1643846400000, + "eventGranularity": { + "unit": "DAY", + "multiple": 1 + }, + "partitionSpec": { + "partition": "FULL_TABLE_SNAPSHOT", + "type": "FULL_TABLE" + }, + "queryCount": 2, + "uniqueUserCount": 1, + "userCounts": [ + { + "user": "urn:li:corpuser:foo", + "count": 2 + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:5c0fb184e7b94a6e8203b8c9772f7296ced18d89a38e487247c45751122e3199", + "changeType": "UPSERT", + "aspectName": "queryProperties", + "aspect": { + "json": { + "statement": { + "value": "select * from `bigquery-dataset-1`.`view-1`\nLIMIT 100\n-- {\"user\":\"@bar\",\"email\":\"bar@xyz.com\",\"url\":\"https://modeanalytics.com/acryltest/reports/6234ff78bc7d/runs/662b21949629/queries/f0aad24d5b37\",\"scheduled\":false}\n", + "language": "SQL" + }, + "source": "SYSTEM", + "created": { + "time": 1643871600000, + "actor": "urn:li:corpuser:bar" + }, + "lastModified": { + "time": 1643871600000, + "actor": "urn:li:corpuser:bar" + } + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:23f1935934face229de381fad193e390153180bf1e7afaa6db58e91fc28d0021", + "changeType": "UPSERT", + "aspectName": "dataPlatformInstance", + "aspect": { + "json": { + "platform": "urn:li:dataPlatform:bigquery" + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:5c0fb184e7b94a6e8203b8c9772f7296ced18d89a38e487247c45751122e3199", + "changeType": "UPSERT", + "aspectName": "querySubjects", + "aspect": { + "json": { + "subjects": [ + { + "entity": "urn:li:dataset:(urn:li:dataPlatform:bigquery,project-id-1.bigquery-dataset-1.view-1,PROD)" + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:5c0fb184e7b94a6e8203b8c9772f7296ced18d89a38e487247c45751122e3199", + "changeType": "UPSERT", + "aspectName": "dataPlatformInstance", + "aspect": { + "json": { + "platform": "urn:li:dataPlatform:bigquery" + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:5c0fb184e7b94a6e8203b8c9772f7296ced18d89a38e487247c45751122e3199", + "changeType": "UPSERT", + "aspectName": "queryUsageStatistics", + "aspect": { + "json": { + "timestampMillis": 1643846400000, + "eventGranularity": { + "unit": "DAY", + "multiple": 1 + }, + "partitionSpec": { + "partition": "FULL_TABLE_SNAPSHOT", + "type": "FULL_TABLE" + }, + "queryCount": 4, + "uniqueUserCount": 1, + "userCounts": [ + { + "user": "urn:li:corpuser:bar", + "count": 4 + } + ] + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:bigquery,project-id-1.bigquery-dataset-1.view-1,PROD)", + "changeType": "UPSERT", + "aspectName": "operation", + "aspect": { + "json": { + "timestampMillis": 1643871600000, + "partitionSpec": { + "partition": "FULL_TABLE_SNAPSHOT", + "type": "FULL_TABLE" + }, + "actor": "urn:li:corpuser:foo", + "operationType": "CREATE", + "customProperties": { + "query_urn": "urn:li:query:176428c30cc3197730c20f6d0161efe869a0a041876d23c044aa2cd60d4c7a12" + }, + "lastUpdatedTimestamp": 1643871600000 + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "dataset", + "entityUrn": "urn:li:dataset:(urn:li:dataPlatform:bigquery,project-id-1.bigquery-dataset-1.view-1,PROD)", + "changeType": "UPSERT", + "aspectName": "status", + "aspect": { + "json": { + "removed": false + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:23f1935934face229de381fad193e390153180bf1e7afaa6db58e91fc28d0021", + "changeType": "UPSERT", + "aspectName": "status", + "aspect": { + "json": { + "removed": false + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +}, +{ + "entityType": "query", + "entityUrn": "urn:li:query:5c0fb184e7b94a6e8203b8c9772f7296ced18d89a38e487247c45751122e3199", + "changeType": "UPSERT", + "aspectName": "status", + "aspect": { + "json": { + "removed": false + } + }, + "systemMetadata": { + "lastObserved": 1643871600000, + "runId": "bigquery-2022_02_03-07_00_00", + "lastRunId": "no-run-id-provided" + } +} +] \ No newline at end of file diff --git a/metadata-ingestion/tests/integration/bigquery_v2/test_bigquery.py b/metadata-ingestion/tests/integration/bigquery_v2/test_bigquery.py index 9029182bb14a3..1934e135457af 100644 --- a/metadata-ingestion/tests/integration/bigquery_v2/test_bigquery.py +++ b/metadata-ingestion/tests/integration/bigquery_v2/test_bigquery.py @@ -1,7 +1,8 @@ import random import string +from datetime import datetime, timezone from typing import Any, Dict -from unittest.mock import patch +from unittest.mock import MagicMock, patch from freezegun import freeze_time from google.cloud.bigquery.table import TableListItem @@ -24,6 +25,7 @@ ) from datahub.ingestion.source.bigquery_v2.bigquery_schema_gen import ( BigQuerySchemaGenerator, + BigQueryV2Config, ) from tests.test_helpers import mce_helpers from tests.test_helpers.state_helpers import run_and_get_pipeline @@ -43,7 +45,7 @@ def random_email(): ) -def recipe(mcp_output_path: str, override: dict = {}) -> dict: +def recipe(mcp_output_path: str, source_config_override: dict = {}) -> dict: return { "source": { "type": "bigquery", @@ -64,7 +66,7 @@ def recipe(mcp_output_path: str, override: dict = {}) -> dict: ], max_workers=1, ).dict(), - **override, + **source_config_override, }, }, "sink": {"type": "file", "config": {"filename": mcp_output_path}}, @@ -403,7 +405,119 @@ def test_bigquery_queries_v2_ingest( # if use_queries_v2 is set. pipeline_config_dict: Dict[str, Any] = recipe( mcp_output_path=mcp_output_path, - override={"use_queries_v2": True, "include_table_lineage": False}, + source_config_override={"use_queries_v2": True, "include_table_lineage": False}, + ) + + run_and_get_pipeline(pipeline_config_dict) + + mce_helpers.check_golden_file( + pytestconfig, + output_path=mcp_output_path, + golden_path=mcp_golden_path, + ) + + +@freeze_time(FROZEN_TIME) +@patch.object(BigQuerySchemaApi, "get_datasets_for_project_id") +@patch.object(BigQueryV2Config, "get_bigquery_client") +@patch("google.cloud.datacatalog_v1.PolicyTagManagerClient") +@patch("google.cloud.resourcemanager_v3.ProjectsClient") +def test_bigquery_queries_v2_lineage_usage_ingest( + projects_client, + policy_tag_manager_client, + get_bigquery_client, + get_datasets_for_project_id, + pytestconfig, + tmp_path, +): + test_resources_dir = pytestconfig.rootpath / "tests/integration/bigquery_v2" + mcp_golden_path = f"{test_resources_dir}/bigquery_lineage_usage_golden.json" + mcp_output_path = "{}/{}".format(tmp_path, "bigquery_lineage_usage_output.json") + + dataset_name = "bigquery-dataset-1" + get_datasets_for_project_id.return_value = [BigqueryDataset(name=dataset_name)] + + client = MagicMock() + get_bigquery_client.return_value = client + client.list_tables.return_value = [ + TableListItem( + {"tableReference": {"projectId": "", "datasetId": "", "tableId": "table-1"}} + ), + TableListItem( + {"tableReference": {"projectId": "", "datasetId": "", "tableId": "view-1"}} + ), + ] + + # mocking the query results for fetching audit log + # note that this is called twice, once for each region + client.query.return_value = [ + { + "job_id": "1", + "project_id": "project-id-1", + "creation_time": datetime.now(timezone.utc), + "user_email": "foo@xyz.com", + "query": "select * from `bigquery-dataset-1`.`table-1`", + "session_id": None, + "query_hash": None, + "statement_type": "SELECT", + "destination_table": None, + "referenced_tables": None, + }, + { + "job_id": "2", + "project_id": "project-id-1", + "creation_time": datetime.now(timezone.utc), + "user_email": "foo@xyz.com", + "query": "create view `bigquery-dataset-1`.`view-1` as select * from `bigquery-dataset-1`.`table-1`", + "session_id": None, + "query_hash": None, + "statement_type": "CREATE", + "destination_table": None, + "referenced_tables": None, + }, + { + "job_id": "3", + "project_id": "project-id-1", + "creation_time": datetime.now(timezone.utc), + "user_email": "service_account@xyz.com", + "query": """\ +select * from `bigquery-dataset-1`.`view-1` +LIMIT 100 +-- {"user":"@bar","email":"bar@xyz.com","url":"https://modeanalytics.com/acryltest/reports/6234ff78bc7d/runs/662b21949629/queries/f0aad24d5b37","scheduled":false} +""", + "session_id": None, + "query_hash": None, + "statement_type": "SELECT", + "destination_table": None, + "referenced_tables": None, + }, + { + "job_id": "4", + "project_id": "project-id-1", + "creation_time": datetime.now(timezone.utc), + "user_email": "service_account@xyz.com", + "query": """\ +select * from `bigquery-dataset-1`.`view-1` +LIMIT 100 +-- {"user":"@foo","email":"foo@xyz.com","url":"https://modeanalytics.com/acryltest/reports/6234ff78bc7d/runs/662b21949629/queries/f0aad24d5b37","scheduled":false} +""", + "session_id": None, + "query_hash": None, + "statement_type": "SELECT", + "destination_table": None, + "referenced_tables": None, + }, + ] + + pipeline_config_dict: Dict[str, Any] = recipe( + mcp_output_path=mcp_output_path, + source_config_override={ + "use_queries_v2": True, + "include_schema_metadata": False, + "include_table_lineage": True, + "include_usage_statistics": True, + "classification": {"enabled": False}, + }, ) run_and_get_pipeline(pipeline_config_dict) diff --git a/metadata-ingestion/tests/integration/bigquery_v2/test_bigquery_queries.py b/metadata-ingestion/tests/integration/bigquery_v2/test_bigquery_queries.py index 058a4094fe2fb..9290100b0c521 100644 --- a/metadata-ingestion/tests/integration/bigquery_v2/test_bigquery_queries.py +++ b/metadata-ingestion/tests/integration/bigquery_v2/test_bigquery_queries.py @@ -9,6 +9,7 @@ from datahub.ingestion.source.bigquery_v2.bigquery_queries import ( BigQueryQueriesSourceReport, ) +from datahub.metadata.urns import CorpUserUrn from datahub.sql_parsing.sql_parsing_aggregator import ObservedQuery from datahub.utilities.file_backed_collections import ConnectionWrapper, FileBackedList from tests.test_helpers import mce_helpers @@ -30,6 +31,9 @@ def _generate_queries_cached_file(tmp_path: Path, queries_json_path: Path) -> No assert isinstance(queries, list) for query in queries: query["timestamp"] = datetime.fromisoformat(query["timestamp"]) + query["user"] = ( + CorpUserUrn.from_string(query["user"]) if query["user"] else None + ) query_cache.append(ObservedQuery(**query)) query_cache.close() diff --git a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesConnection_all.json b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesConnection_all.json index a558eea2e8dd8..9991a3f93a295 100644 --- a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesConnection_all.json +++ b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesConnection_all.json @@ -120,21 +120,7 @@ "dataType": "REAL", "defaultFormat": "p0.0%", "aggregation": null, - "formula": "ZN([Delivered Email]/[Sent Email])", - "upstreamFields": [ - { - "name": "Delivered Email", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - }, - { - "name": "Sent Email", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - } - ] + "formula": "ZN([Delivered Email]/[Sent Email])" }, { "__typename": "ColumnField", @@ -147,17 +133,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "id", - "table": { - "__typename": "DatabaseTable", - "id": "82c42950-210b-ba3f-b2e9-53240474a8fd" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -170,17 +146,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": "Count", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "Platform", - "table": { - "__typename": "DatabaseTable", - "id": "38f106d0-5219-2663-2647-bbbf5fca3866" - } - } - ] + "aggregation": "Count" }, { "__typename": "ColumnField", @@ -193,17 +159,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "updatedAt", - "table": { - "__typename": "DatabaseTable", - "id": "82c42950-210b-ba3f-b2e9-53240474a8fd" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -216,17 +172,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "programName", - "table": { - "__typename": "DatabaseTable", - "id": "82c42950-210b-ba3f-b2e9-53240474a8fd" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -239,17 +185,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "Mailing_ID", - "table": { - "__typename": "DatabaseTable", - "id": "1704c7c3-4bb9-e6c6-6ea0-23f76e7560db" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -262,17 +198,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "Campaign_ID", - "table": { - "__typename": "DatabaseTable", - "id": "1704c7c3-4bb9-e6c6-6ea0-23f76e7560db" - } - } - ] + "aggregation": null }, { "__typename": "CalculatedField", @@ -285,8 +211,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "1", - "upstreamFields": [] + "formula": "1" }, { "__typename": "ColumnField", @@ -299,17 +224,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "Campaign_Run_ID", - "table": { - "__typename": "DatabaseTable", - "id": "1704c7c3-4bb9-e6c6-6ea0-23f76e7560db" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -322,17 +237,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "User_Agent", - "table": { - "__typename": "DatabaseTable", - "id": "38f106d0-5219-2663-2647-bbbf5fca3866" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -345,17 +250,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "Choice_Number", - "table": { - "__typename": "DatabaseTable", - "id": "1704c7c3-4bb9-e6c6-6ea0-23f76e7560db" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -368,17 +263,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "Campaign_ID", - "table": { - "__typename": "DatabaseTable", - "id": "1704c7c3-4bb9-e6c6-6ea0-23f76e7560db" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -391,8 +276,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -404,9 +288,7 @@ "dataCategory": "NOMINAL", "role": "DIMENSION", "dataType": "STRING", - "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "defaultFormat": null }, { "__typename": "ColumnField", @@ -419,17 +301,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "Has_Predictive", - "table": { - "__typename": "DatabaseTable", - "id": "1704c7c3-4bb9-e6c6-6ea0-23f76e7560db" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -442,17 +314,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "Campaign_ID", - "table": { - "__typename": "DatabaseTable", - "id": "38f106d0-5219-2663-2647-bbbf5fca3866" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -465,17 +327,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "Activity_Date", - "table": { - "__typename": "DatabaseTable", - "id": "38f106d0-5219-2663-2647-bbbf5fca3866" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -488,8 +340,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -502,8 +353,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -516,8 +366,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -530,8 +379,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -544,8 +392,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -558,21 +405,7 @@ "dataType": "REAL", "defaultFormat": "p0.0%", "aggregation": null, - "formula": "[Clickthrough Emails]/[Delivered Email]", - "upstreamFields": [ - { - "name": "Delivered Email", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - }, - { - "name": "Clickthrough Emails", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - } - ] + "formula": "[Clickthrough Emails]/[Delivered Email]" }, { "__typename": "CalculatedField", @@ -585,21 +418,7 @@ "dataType": "REAL", "defaultFormat": "p0.0%", "aggregation": null, - "formula": "ZN([Opened Email]/[Delivered Email])", - "upstreamFields": [ - { - "name": "Delivered Email", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - }, - { - "name": "Opened Email", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - } - ] + "formula": "ZN([Opened Email]/[Delivered Email])" }, { "__typename": "ColumnField", @@ -612,8 +431,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -626,15 +444,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "COUNTD([Id])", - "upstreamFields": [ - { - "name": "Id", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - } - ] + "formula": "COUNTD([Id])" }, { "__typename": "CalculatedField", @@ -647,21 +457,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "COUNTD([Id (Activity - Email Delivered)])", - "upstreamFields": [ - { - "name": "Activity", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - }, - { - "name": "Email Delivered", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - } - ] + "formula": "COUNTD([Id (Activity - Email Delivered)])" }, { "__typename": "ColumnField", @@ -674,8 +470,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -688,8 +483,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -702,8 +496,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -716,8 +509,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": "Count", - "upstreamFields": [] + "aggregation": "Count" }, { "__typename": "ColumnField", @@ -730,8 +522,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -744,8 +535,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -758,8 +548,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -772,8 +561,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -786,8 +574,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -800,8 +587,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -814,8 +600,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -828,8 +613,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -842,8 +626,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -856,8 +639,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -870,21 +652,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "COUNTD([Id (Activity - Click Email)])", - "upstreamFields": [ - { - "name": "Activity", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - }, - { - "name": "Click Email", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - } - ] + "formula": "COUNTD([Id (Activity - Click Email)])" }, { "__typename": "ColumnField", @@ -897,8 +665,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -911,8 +678,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -925,8 +691,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": "Count", - "upstreamFields": [] + "aggregation": "Count" }, { "__typename": "ColumnField", @@ -939,8 +704,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -953,8 +717,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -967,8 +730,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -981,8 +743,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -995,21 +756,7 @@ "dataType": "REAL", "defaultFormat": "p0.0%", "aggregation": null, - "formula": "ZN([Clickthrough Emails]\r\n/ \r\n[Opened Email])", - "upstreamFields": [ - { - "name": "Clickthrough Emails", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - }, - { - "name": "Opened Email", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - } - ] + "formula": "ZN([Clickthrough Emails]\r\n/ \r\n[Opened Email])" }, { "__typename": "CalculatedField", @@ -1022,21 +769,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "COUNTD([Id (Activity - Open Email)])", - "upstreamFields": [ - { - "name": "Activity", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - }, - { - "name": "Open Email", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - } - ] + "formula": "COUNTD([Id (Activity - Open Email)])" }, { "__typename": "ColumnField", @@ -1049,8 +782,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": "Count", - "upstreamFields": [] + "aggregation": "Count" }, { "__typename": "ColumnField", @@ -1063,8 +795,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1077,8 +808,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -1091,21 +821,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "[Opened Email]-[Clickthrough Emails]", - "upstreamFields": [ - { - "name": "Opened Email", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - }, - { - "name": "Clickthrough Emails", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - } - ] + "formula": "[Opened Email]-[Clickthrough Emails]" }, { "__typename": "ColumnField", @@ -1118,8 +834,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1132,8 +847,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -1146,21 +860,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "[Delivered Email]-[Clickthrough Emails]", - "upstreamFields": [ - { - "name": "Delivered Email", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - }, - { - "name": "Clickthrough Emails", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - } - ] + "formula": "[Delivered Email]-[Clickthrough Emails]" }, { "__typename": "ColumnField", @@ -1173,8 +873,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": "Count", - "upstreamFields": [] + "aggregation": "Count" }, { "__typename": "ColumnField", @@ -1187,8 +886,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1201,8 +899,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1215,8 +912,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1229,8 +925,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1243,8 +938,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1257,8 +951,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1271,8 +964,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -1312,8 +1004,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1326,8 +1017,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1340,8 +1030,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1354,8 +1043,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -1368,21 +1056,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "[Sent Email] - [Delivered Email]", - "upstreamFields": [ - { - "name": "Sent Email", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - }, - { - "name": "Delivered Email", - "datasource": { - "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" - } - } - ] + "formula": "[Sent Email] - [Delivered Email]" }, { "__typename": "ColumnField", @@ -1395,8 +1069,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1409,8 +1082,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null } ], "upstreamDatasources": [], @@ -1488,17 +1160,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": "Year", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "payment_date", - "table": { - "__typename": "CustomSQLTable", - "id": "22b0b4c3-6b85-713d-a161-5a87fdd78f40" - } - } - ] + "aggregation": "Year" }, { "__typename": "ColumnField", @@ -1511,17 +1173,7 @@ "role": "MEASURE", "dataType": "REAL", "defaultFormat": null, - "aggregation": "Sum", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "amount", - "table": { - "__typename": "CustomSQLTable", - "id": "22b0b4c3-6b85-713d-a161-5a87fdd78f40" - } - } - ] + "aggregation": "Sum" }, { "__typename": "ColumnField", @@ -1534,9 +1186,7 @@ "role": "MEASURE", "dataType": "TABLE", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1549,17 +1199,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "first_name", - "table": { - "__typename": "CustomSQLTable", - "id": "22b0b4c3-6b85-713d-a161-5a87fdd78f40" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -1572,17 +1212,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": "Sum", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "customer_id", - "table": { - "__typename": "CustomSQLTable", - "id": "22b0b4c3-6b85-713d-a161-5a87fdd78f40" - } - } - ] + "aggregation": "Sum" }, { "__typename": "ColumnField", @@ -1595,17 +1225,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": "Sum", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "rental_id", - "table": { - "__typename": "CustomSQLTable", - "id": "22b0b4c3-6b85-713d-a161-5a87fdd78f40" - } - } - ] + "aggregation": "Sum" }, { "__typename": "ColumnField", @@ -1618,17 +1238,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "agguegation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "last_name", - "table": { - "__typename": "CustomSQLTable", - "id": "10c6297d-0dbd-44f1-b1ba-458bea446513" - } - } - ] + "agguegation": null } ], "upstreamDatasources": [], @@ -1700,8 +1310,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1714,8 +1323,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1728,9 +1336,7 @@ "role": "MEASURE", "dataType": "TABLE", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1743,8 +1349,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1757,8 +1362,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1771,8 +1375,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1785,8 +1388,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "HierarchyField", @@ -1794,8 +1396,7 @@ "name": "country, city", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [] + "folderName": null }, { "__typename": "ColumnField", @@ -1808,8 +1409,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1822,8 +1422,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1836,8 +1435,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1850,8 +1448,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1864,9 +1461,7 @@ "role": "MEASURE", "dataType": "TABLE", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1879,8 +1474,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -1893,8 +1487,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": "Sum", - "upstreamFields": [] + "aggregation": "Sum" } ], "upstreamDatasources": [], @@ -1981,15 +1574,7 @@ "name": "Region (People)", "description": null, "isHidden": true, - "folderName": null, - "upstreamFields": [ - { - "name": "Region (People)", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -1997,15 +1582,7 @@ "name": "Product ID", "description": null, "isHidden": true, - "folderName": null, - "upstreamFields": [ - { - "name": "Product ID", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2013,15 +1590,7 @@ "name": "Profit", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Profit", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2029,15 +1598,7 @@ "name": "Product", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Product", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2045,15 +1606,7 @@ "name": "Sub-Category", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Sub-Category", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2061,15 +1614,7 @@ "name": "Row ID", "description": null, "isHidden": true, - "folderName": null, - "upstreamFields": [ - { - "name": "Row ID", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2077,15 +1622,7 @@ "name": "Order ID", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Order ID", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2093,15 +1630,7 @@ "name": "Customer ID", "description": null, "isHidden": true, - "folderName": null, - "upstreamFields": [ - { - "name": "Customer ID", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2109,15 +1638,7 @@ "name": "Ship Mode", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Ship Mode", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2125,15 +1646,7 @@ "name": "People", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Customer ID", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2141,15 +1654,7 @@ "name": "Order ID (Returns)", "description": null, "isHidden": true, - "folderName": null, - "upstreamFields": [ - { - "name": "Order ID (Returns)", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2157,15 +1662,7 @@ "name": "City", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "City", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2173,15 +1670,7 @@ "name": "Sales", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Sales", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2189,15 +1678,7 @@ "name": "Region", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Region", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2205,15 +1686,7 @@ "name": "Quantity", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Quantity", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2221,15 +1694,7 @@ "name": "Ship Date", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Ship Date", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2237,15 +1702,7 @@ "name": "Orders", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Orders", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2253,15 +1710,7 @@ "name": "Profit Ratio", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Profit Ratio", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2269,15 +1718,7 @@ "name": "Returns", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Returns", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2285,15 +1726,7 @@ "name": "Manufacturer", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Manufacturer", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2301,15 +1734,7 @@ "name": "Location", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Location", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2317,15 +1742,7 @@ "name": "Returned", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Returned", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2333,15 +1750,7 @@ "name": "Category", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Category", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2349,15 +1758,7 @@ "name": "Regional Manager", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Regional Manager", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2365,15 +1766,7 @@ "name": "Postal Code", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Postal Code", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2381,15 +1774,7 @@ "name": "Profit (bin)", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Profit (bin)", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2397,15 +1782,7 @@ "name": "Segment", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Segment", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2413,15 +1790,7 @@ "name": "Top Customers by Profit", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Top Customers by Profit", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2429,15 +1798,7 @@ "name": "Country/Region", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Country/Region", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2445,15 +1806,7 @@ "name": "Discount", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Discount", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2461,15 +1814,7 @@ "name": "Order Date", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Order Date", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2477,15 +1822,7 @@ "name": "Product Name", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Product Name", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2493,15 +1830,7 @@ "name": "Customer Name", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Customer ID", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -2509,15 +1838,7 @@ "name": "State", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "State", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null } ], "upstreamDatasources": [ @@ -2645,8 +1966,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2659,8 +1979,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2673,8 +1992,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2687,8 +2005,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2701,8 +2018,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -2715,21 +2031,7 @@ "dataType": "REAL", "defaultFormat": "p0%", "aggregation": null, - "formula": "// This is a calculated field\r\n// It shows the percentage of requests which made SLA\r\n\r\nCOUNTD(IF [Made SLA]= TRUE\r\nTHEN [Number]\r\nEND)\r\n/\r\nCOUNTD([Number])", - "upstreamFields": [ - { - "name": "Made SLA", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - }, - { - "name": "Number", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - } - ] + "formula": "// This is a calculated field\r\n// It shows the percentage of requests which made SLA\r\n\r\nCOUNTD(IF [Made SLA]= TRUE\r\nTHEN [Number]\r\nEND)\r\n/\r\nCOUNTD([Number])" }, { "__typename": "ColumnField", @@ -2742,8 +2044,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2756,8 +2057,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2770,8 +2070,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2784,8 +2083,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2798,8 +2096,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2812,8 +2109,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2826,8 +2122,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2840,8 +2135,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2854,8 +2148,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2868,8 +2161,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2882,8 +2174,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2896,8 +2187,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -2910,21 +2200,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": "Attribute", - "formula": "// This is a calculated field\r\n// It shows the total number of problems ignoring opened date\r\n\r\n{ EXCLUDE [Opened]: COUNTD([Number])}", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - }, - { - "name": "Number", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - } - ] + "formula": "// This is a calculated field\r\n// It shows the total number of problems ignoring opened date\r\n\r\n{ EXCLUDE [Opened]: COUNTD([Number])}" }, { "__typename": "ColumnField", @@ -2937,8 +2213,7 @@ "role": "DIMENSION", "dataType": "DATE", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2951,8 +2226,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2965,8 +2239,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2979,8 +2252,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -2993,8 +2265,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3007,8 +2278,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3021,8 +2291,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3035,8 +2304,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3049,8 +2317,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3063,8 +2330,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3077,8 +2343,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3091,8 +2356,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3105,8 +2369,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3119,8 +2382,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3133,8 +2395,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3147,8 +2408,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3161,8 +2421,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3175,8 +2434,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3189,8 +2447,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3203,8 +2460,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3217,8 +2473,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3231,8 +2486,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3245,8 +2499,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3259,8 +2512,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3273,8 +2525,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3287,8 +2538,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3301,8 +2551,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3315,8 +2564,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3329,8 +2577,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3343,8 +2590,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3357,8 +2603,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3371,8 +2616,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3385,8 +2629,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3399,8 +2642,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3413,8 +2655,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3427,8 +2668,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3441,8 +2681,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3455,8 +2694,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3469,8 +2707,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3483,8 +2720,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3497,8 +2733,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3511,8 +2746,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3525,8 +2759,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3539,8 +2772,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3553,8 +2785,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3567,8 +2798,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3581,8 +2811,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3595,8 +2824,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3609,8 +2837,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3623,8 +2850,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3637,8 +2863,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3651,8 +2876,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3665,8 +2889,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3679,8 +2902,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3693,8 +2915,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3707,8 +2928,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3721,8 +2941,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3735,8 +2954,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3749,8 +2967,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3763,8 +2980,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3777,8 +2993,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3791,8 +3006,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": "Sum", - "upstreamFields": [] + "aggregation": "Sum" }, { "__typename": "ColumnField", @@ -3805,8 +3019,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3819,8 +3032,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3833,8 +3045,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3847,8 +3058,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3861,8 +3071,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3875,8 +3084,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -3889,21 +3097,7 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "formula": "// This is a calculated field\r\n// It shows if an accident is overdue\r\n\r\n//Check overdue cases among inactive incidents\r\nIF [Active]=FALSE \r\nAND\r\n[Closed]>[Due date]\r\n\r\nOR\r\n//Check overdue cases among active incidents\r\n[Active]=TRUE \r\nAND NOW()>[Due date]\r\n\r\nTHEN \"Overdue\"\r\nELSE \"Non Overdue\"\r\nEND", - "upstreamFields": [ - { - "name": "Active", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - }, - { - "name": "Due date", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - } - ] + "formula": "// This is a calculated field\r\n// It shows if an accident is overdue\r\n\r\n//Check overdue cases among inactive incidents\r\nIF [Active]=FALSE \r\nAND\r\n[Closed]>[Due date]\r\n\r\nOR\r\n//Check overdue cases among active incidents\r\n[Active]=TRUE \r\nAND NOW()>[Due date]\r\n\r\nTHEN \"Overdue\"\r\nELSE \"Non Overdue\"\r\nEND" }, { "__typename": "ColumnField", @@ -3916,8 +3110,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3930,8 +3123,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3944,8 +3136,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamColumns": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3958,8 +3149,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3972,8 +3162,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -3986,8 +3175,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4000,8 +3188,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4014,8 +3201,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4028,8 +3214,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4042,8 +3227,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4056,8 +3240,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4070,8 +3253,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4084,8 +3266,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4098,8 +3279,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4112,8 +3292,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4126,8 +3305,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4140,8 +3318,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4154,8 +3331,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4168,8 +3344,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4182,8 +3357,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4196,8 +3370,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4210,8 +3383,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4224,8 +3396,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4238,8 +3409,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4252,8 +3422,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4266,8 +3435,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4280,8 +3448,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4294,8 +3461,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4308,8 +3474,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4322,8 +3487,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4336,8 +3500,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4350,8 +3513,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4364,8 +3526,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4378,8 +3539,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4392,8 +3552,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4406,8 +3565,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4420,8 +3578,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4434,8 +3591,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4448,8 +3604,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4462,8 +3617,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4476,8 +3630,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4490,8 +3643,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4504,8 +3656,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4518,8 +3669,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4532,8 +3682,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4546,8 +3695,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4560,8 +3708,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4574,8 +3721,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4588,8 +3734,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4602,8 +3747,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4616,8 +3760,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4630,8 +3773,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4644,8 +3786,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4658,8 +3799,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4672,8 +3812,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4686,8 +3825,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4700,8 +3838,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4714,8 +3851,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4728,8 +3864,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4742,8 +3877,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4756,8 +3890,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4770,8 +3903,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4784,8 +3916,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4798,8 +3929,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4812,8 +3942,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4826,8 +3955,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4840,8 +3968,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4854,8 +3981,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4868,8 +3994,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4882,8 +4007,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4896,8 +4020,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4910,8 +4033,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4924,8 +4046,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4938,8 +4059,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4952,8 +4072,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -4966,8 +4085,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -4980,33 +4098,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": "Attribute", - "formula": "// This is a calculated field\r\n// It counts each distinct request made in the last year. The \"exclude\" is used to avoid filters interfering in the final result\r\n\r\n{EXCLUDE [Opened], [Overdue], [Max Year?]: \r\nCOUNTD(IF [Max Year?]=TRUE\r\nTHEN [Number]\r\nEND)\r\n}", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - }, - { - "name": "Overdue", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - }, - { - "name": "Max Year?", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - }, - { - "name": "Number", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - } - ] + "formula": "// This is a calculated field\r\n// It counts each distinct request made in the last year. The \"exclude\" is used to avoid filters interfering in the final result\r\n\r\n{EXCLUDE [Opened], [Overdue], [Max Year?]: \r\nCOUNTD(IF [Max Year?]=TRUE\r\nTHEN [Number]\r\nEND)\r\n}" }, { "__typename": "ColumnField", @@ -5019,8 +4111,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5033,8 +4124,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5047,8 +4137,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5061,8 +4150,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5075,8 +4163,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5089,8 +4176,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5103,8 +4189,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -5117,15 +4202,7 @@ "dataType": "BOOLEAN", "defaultFormat": null, "aggregation": null, - "formula": "// This is a calculated field\r\n// It shows TRUE/FALSE if the year of opened is equal the maximum year in the dataset\r\n\r\nDATEPART(\"year\", [Opened]) = DATEPART(\"year\", {MAX([Opened])})", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - } - ] + "formula": "// This is a calculated field\r\n// It shows TRUE/FALSE if the year of opened is equal the maximum year in the dataset\r\n\r\nDATEPART(\"year\", [Opened]) = DATEPART(\"year\", {MAX([Opened])})" }, { "__typename": "ColumnField", @@ -5138,8 +4215,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5152,8 +4228,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5166,8 +4241,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5180,8 +4254,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5194,8 +4267,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5208,8 +4280,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5222,8 +4293,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5236,8 +4306,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5250,8 +4319,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5264,8 +4332,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5278,8 +4345,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5292,8 +4358,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5306,8 +4371,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5320,8 +4384,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5334,8 +4397,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5348,8 +4410,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5362,8 +4423,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5376,8 +4436,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5390,8 +4449,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5404,8 +4462,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5418,8 +4475,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -5445,8 +4501,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5459,8 +4514,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5473,8 +4527,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5487,8 +4540,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5501,8 +4553,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5515,8 +4566,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5529,8 +4579,7 @@ "role": "MEASURE", "dataType": "REAL", "defaultFormat": null, - "aggregation": null, - "upstreamColumns": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5543,8 +4592,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5557,8 +4605,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5571,8 +4618,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5585,8 +4631,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5599,8 +4644,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5613,8 +4657,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5627,8 +4670,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5641,8 +4683,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5655,8 +4696,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5669,8 +4709,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5683,8 +4722,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5697,8 +4735,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5711,8 +4748,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5725,8 +4761,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5739,8 +4774,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5753,8 +4787,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5767,8 +4800,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5781,8 +4813,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5795,8 +4826,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5809,8 +4839,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5823,8 +4852,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5837,8 +4865,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5851,8 +4878,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5865,8 +4891,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5879,8 +4904,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5893,8 +4917,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -5907,21 +4930,7 @@ "dataType": "REAL", "defaultFormat": "p0%", "aggregation": null, - "formula": "// This is a calculated field\r\n// It shows the percentage of incidents which are overdue\r\n\r\n(IF ATTR([Overdue]= \"Overdue\")\r\nTHEN COUNTD([Number])\r\nEND)\r\n/\r\nATTR({ EXCLUDE [Overdue]:\r\nCOUNTD([Number])})", - "upstreamFields": [ - { - "name": "Overdue", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - }, - { - "name": "Number", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - } - ] + "formula": "// This is a calculated field\r\n// It shows the percentage of incidents which are overdue\r\n\r\n(IF ATTR([Overdue]= \"Overdue\")\r\nTHEN COUNTD([Number])\r\nEND)\r\n/\r\nATTR({ EXCLUDE [Overdue]:\r\nCOUNTD([Number])})" }, { "__typename": "ColumnField", @@ -5934,8 +4943,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5948,8 +4956,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5962,8 +4969,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5976,8 +4982,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -5990,8 +4995,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6004,8 +5008,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6018,8 +5021,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6046,8 +5048,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6060,8 +5061,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6074,8 +5074,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6088,8 +5087,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6102,8 +5100,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6116,8 +5113,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6130,8 +5126,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6144,8 +5139,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6158,8 +5152,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6172,8 +5165,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6186,8 +5178,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6200,8 +5191,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6214,8 +5204,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6228,8 +5217,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6242,8 +5230,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6256,8 +5243,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6270,8 +5256,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6284,8 +5269,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6298,8 +5282,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6312,8 +5295,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6326,8 +5308,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6340,8 +5321,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6354,8 +5334,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6368,8 +5347,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6382,8 +5360,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6396,8 +5373,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6410,8 +5386,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6424,8 +5399,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6438,8 +5412,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6452,8 +5425,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6466,8 +5438,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -6480,39 +5451,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": "Attribute", - "formula": "// This is a calculated field\r\n// It counts each distinct active request. The \"exclude\" is used to avoid filters interfering with the final result \r\n\r\n{EXCLUDE [Opened], [Overdue], [Max Year?]: \r\nCOUNTD(IF [Active]=TRUE\r\nTHEN [Number]\r\nEND)\r\n}", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - }, - { - "name": "Overdue", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - }, - { - "name": "Active", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - }, - { - "name": "Max Year?", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - }, - { - "name": "Number", - "datasource": { - "id": "06c3e060-8133-4b58-9b53-a0fced25e056" - } - } - ] + "formula": "// This is a calculated field\r\n// It counts each distinct active request. The \"exclude\" is used to avoid filters interfering with the final result \r\n\r\n{EXCLUDE [Opened], [Overdue], [Max Year?]: \r\nCOUNTD(IF [Active]=TRUE\r\nTHEN [Number]\r\nEND)\r\n}" }, { "__typename": "ColumnField", @@ -6525,8 +5464,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6539,8 +5477,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6553,8 +5490,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6567,8 +5503,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6581,8 +5516,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6595,8 +5529,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6609,8 +5542,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6623,8 +5555,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6637,8 +5568,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6651,8 +5581,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6665,8 +5594,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6679,8 +5607,7 @@ "role": "MEASURE", "dataType": "REAL", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6693,8 +5620,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6707,8 +5633,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6721,8 +5646,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null } ], "upstreamDatasources": [], @@ -6835,8 +5759,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6849,8 +5772,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6863,8 +5785,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6877,8 +5798,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6891,8 +5811,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6905,8 +5824,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6919,8 +5837,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6933,8 +5850,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6947,8 +5863,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6961,8 +5876,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6975,8 +5889,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -6989,8 +5902,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7003,8 +5915,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7017,8 +5928,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7031,8 +5941,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -7045,27 +5954,7 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "formula": "// This is a calculated field\r\n// It checks if an incident is overdue\r\n\r\n//Check overdue cases among inactive incidents\r\n{ FIXED [Number]:\r\n\r\nIF MAX([Active]=FALSE) \r\nAND\r\nmax([Closed])> max([Due date])\r\n\r\nOR\r\n//Check overdue cases among active incidents\r\nMAX([Active]=TRUE) \r\nAND NOW()> MAX([Due date]) \r\n\r\nTHEN \"Overdue\"\r\nEND\r\n}", - "upstreamFields": [ - { - "name": "Active", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Closed", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Due date", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - } - ] + "formula": "// This is a calculated field\r\n// It checks if an incident is overdue\r\n\r\n//Check overdue cases among inactive incidents\r\n{ FIXED [Number]:\r\n\r\nIF MAX([Active]=FALSE) \r\nAND\r\nmax([Closed])> max([Due date])\r\n\r\nOR\r\n//Check overdue cases among active incidents\r\nMAX([Active]=TRUE) \r\nAND NOW()> MAX([Due date]) \r\n\r\nTHEN \"Overdue\"\r\nEND\r\n}" }, { "__typename": "ColumnField", @@ -7078,8 +5967,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7092,8 +5980,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7106,8 +5993,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7120,8 +6006,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7134,8 +6019,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7148,8 +6032,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7162,8 +6045,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7176,8 +6058,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7190,8 +6071,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7204,8 +6084,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7218,8 +6097,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7246,8 +6124,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7260,8 +6137,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7274,8 +6150,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7288,8 +6163,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7302,8 +6176,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7316,8 +6189,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7330,8 +6202,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7344,8 +6215,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7358,8 +6228,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7372,8 +6241,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7386,8 +6254,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7400,8 +6267,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7414,8 +6280,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -7428,15 +6293,7 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "formula": "// This is a calculated field\r\n// It groups problems accordingly with their ages\r\n\r\nIF [Age of Problems]< 2592000\r\nTHEN \"Under 30 d\"\r\nELSEIF [Age of Problems] > 7776000\r\nTHEN \"+ than 90d\"\r\nELSE \" 30-90 d\"\r\nEND", - "upstreamFields": [ - { - "name": "Age of Problems", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - } - ] + "formula": "// This is a calculated field\r\n// It groups problems accordingly with their ages\r\n\r\nIF [Age of Problems]< 2592000\r\nTHEN \"Under 30 d\"\r\nELSEIF [Age of Problems] > 7776000\r\nTHEN \"+ than 90d\"\r\nELSE \" 30-90 d\"\r\nEND" }, { "__typename": "ColumnField", @@ -7449,8 +6306,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7463,8 +6319,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7477,8 +6332,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7491,8 +6345,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7505,8 +6358,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7519,8 +6371,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7533,8 +6384,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7547,8 +6397,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7561,8 +6410,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7575,8 +6423,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7589,8 +6436,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7603,8 +6449,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -7617,21 +6462,7 @@ "dataType": "REAL", "defaultFormat": "p0%", "aggregation": null, - "formula": "// This is a calculated field\r\n// It shows the percentage of incidents that are overdue\r\n\r\nIFNULL((IF ATTR([Overdue]= \"Overdue\")\r\nTHEN COUNTD([Number])\r\nEND),0)\r\n/\r\nATTR({ EXCLUDE [Overdue]:\r\nCOUNTD([Number])})", - "upstreamFields": [ - { - "name": "Overdue", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Number", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - } - ] + "formula": "// This is a calculated field\r\n// It shows the percentage of incidents that are overdue\r\n\r\nIFNULL((IF ATTR([Overdue]= \"Overdue\")\r\nTHEN COUNTD([Number])\r\nEND),0)\r\n/\r\nATTR({ EXCLUDE [Overdue]:\r\nCOUNTD([Number])})" }, { "__typename": "ColumnField", @@ -7644,8 +6475,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7658,8 +6488,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7672,8 +6501,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7686,8 +6514,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7700,8 +6527,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7714,8 +6540,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7728,8 +6553,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7742,8 +6566,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7756,8 +6579,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7770,8 +6592,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7784,8 +6605,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7798,8 +6618,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7812,8 +6631,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7826,8 +6644,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -7840,21 +6657,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": "Attribute", - "formula": "// This is a calculated field using a level of detail calculation (LOD)\r\n// It counts each distinct problems ignoring date\r\n\r\n{ EXCLUDE [Opened]: COUNTD([Number])}", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Number", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - } - ] + "formula": "// This is a calculated field using a level of detail calculation (LOD)\r\n// It counts each distinct problems ignoring date\r\n\r\n{ EXCLUDE [Opened]: COUNTD([Number])}" }, { "__typename": "ColumnField", @@ -7867,8 +6670,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7881,8 +6683,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7895,8 +6696,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7909,8 +6709,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7923,8 +6722,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7937,8 +6735,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7951,8 +6748,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7965,8 +6761,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7979,8 +6774,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -7993,8 +6787,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8007,8 +6800,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8021,8 +6813,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8035,8 +6826,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -8049,8 +6839,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "1", - "upstreamFields": [] + "formula": "1" }, { "__typename": "ColumnField", @@ -8063,8 +6852,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8077,8 +6865,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8091,8 +6878,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8105,8 +6891,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8119,8 +6904,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8133,8 +6917,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8147,8 +6930,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8161,8 +6943,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8175,8 +6956,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8189,8 +6969,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8203,8 +6982,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8217,8 +6995,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -8231,21 +7008,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "// This is a calculated field\r\n// It counts each distinct problems which has a related incident\r\n\r\nCOUNT(IF ([Related Incidents]>0\r\nAND NOT ISNULL([Related Incidents]))=true\r\nTHEN [Number]\r\nEND)", - "upstreamFields": [ - { - "name": "Related Incidents", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Number", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - } - ] + "formula": "// This is a calculated field\r\n// It counts each distinct problems which has a related incident\r\n\r\nCOUNT(IF ([Related Incidents]>0\r\nAND NOT ISNULL([Related Incidents]))=true\r\nTHEN [Number]\r\nEND)" }, { "__typename": "ColumnField", @@ -8258,8 +7021,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8272,8 +7034,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8286,8 +7047,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8300,8 +7060,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8314,8 +7073,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8328,8 +7086,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8342,8 +7099,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8356,8 +7112,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8370,8 +7125,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8384,8 +7138,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8398,8 +7151,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8412,8 +7164,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8426,8 +7177,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8440,8 +7190,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8454,8 +7203,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8468,8 +7216,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8482,8 +7229,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8496,8 +7242,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -8510,21 +7255,7 @@ "dataType": "REAL", "defaultFormat": "p0.0%", "aggregation": null, - "formula": "// This is a calculated field\r\n// It shows the percentage of problems that are known errors\r\n\r\nCOUNTD(IF [Known error]=TRUE\r\nTHEN [Number] END)\r\n/\r\nCOUNTD([Number])", - "upstreamFields": [ - { - "name": "Known error", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Number", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - } - ] + "formula": "// This is a calculated field\r\n// It shows the percentage of problems that are known errors\r\n\r\nCOUNTD(IF [Known error]=TRUE\r\nTHEN [Number] END)\r\n/\r\nCOUNTD([Number])" }, { "__typename": "ColumnField", @@ -8537,8 +7268,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8551,8 +7281,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8565,8 +7294,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8579,8 +7307,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8593,8 +7320,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8607,8 +7333,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8621,8 +7346,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8635,8 +7359,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -8649,15 +7372,7 @@ "dataType": "BOOLEAN", "defaultFormat": null, "aggregation": null, - "formula": "// This is a calculated field\r\n// It shows TRUE/FALSE if the year of opened is equal the max year of the dataset \r\n\r\nDATEPART(\"year\", [Opened]) = DATEPART(\"year\", {MAX([Opened])})", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - } - ] + "formula": "// This is a calculated field\r\n// It shows TRUE/FALSE if the year of opened is equal the max year of the dataset \r\n\r\nDATEPART(\"year\", [Opened]) = DATEPART(\"year\", {MAX([Opened])})" }, { "__typename": "ColumnField", @@ -8670,8 +7385,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8684,8 +7398,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8698,8 +7411,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8712,8 +7424,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8726,8 +7437,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8740,8 +7450,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8754,8 +7463,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8768,8 +7476,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8782,8 +7489,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -8796,15 +7502,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "//Calculates the age of active problems since opened until now\r\n\r\nDATEDIFF('second', [Opened], NOW())", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - } - ] + "formula": "//Calculates the age of active problems since opened until now\r\n\r\nDATEDIFF('second', [Opened], NOW())" }, { "__typename": "ColumnField", @@ -8817,8 +7515,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": "Sum", - "upstreamFields": [] + "aggregation": "Sum" }, { "__typename": "ColumnField", @@ -8831,8 +7528,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8859,8 +7555,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8873,8 +7568,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8887,8 +7581,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8901,8 +7594,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -8915,21 +7607,7 @@ "dataType": "REAL", "defaultFormat": "p0%", "aggregation": null, - "formula": "// This is a calculated field\r\n// It shows the percentage of critical or high priority problems\r\n\r\nCOUNTD(IF [Priority]=1\r\nOR [Priority]=2\r\nTHEN [Number]\r\nEND)\r\n/\r\nCOUNTD([Number])", - "upstreamFields": [ - { - "name": "Priority", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Number", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - } - ] + "formula": "// This is a calculated field\r\n// It shows the percentage of critical or high priority problems\r\n\r\nCOUNTD(IF [Priority]=1\r\nOR [Priority]=2\r\nTHEN [Number]\r\nEND)\r\n/\r\nCOUNTD([Number])" }, { "__typename": "ColumnField", @@ -8942,8 +7620,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8956,8 +7633,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8970,8 +7646,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8984,8 +7659,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -8998,8 +7672,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9012,8 +7685,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9040,8 +7712,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9054,8 +7725,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -9068,33 +7738,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": "Attribute", - "formula": "// This is a calculated field\r\n// It counts each disctinct problem. The \"exclude\" is used to avoid filters interfering with the result\r\n\r\n{EXCLUDE [Opened], [Overdue], [Max Year?]: \r\nCOUNTD(IF [Max Year?]=TRUE\r\nTHEN [Number]\r\nEND)\r\n}", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Overdue", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Max Year?", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Number", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - } - ] + "formula": "// This is a calculated field\r\n// It counts each disctinct problem. The \"exclude\" is used to avoid filters interfering with the result\r\n\r\n{EXCLUDE [Opened], [Overdue], [Max Year?]: \r\nCOUNTD(IF [Max Year?]=TRUE\r\nTHEN [Number]\r\nEND)\r\n}" }, { "__typename": "ColumnField", @@ -9107,8 +7751,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9121,8 +7764,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9135,8 +7777,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9149,8 +7790,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9163,8 +7803,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9177,8 +7816,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9191,8 +7829,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9205,8 +7842,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9219,8 +7855,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9233,8 +7868,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -9247,39 +7881,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": "Attribute", - "formula": "// This is a calculated field using a level of detail calculation (LOD)\r\n// It counts each distinct active problem. The \"exclude\" is used to avoid filters interfering with the result \r\n\r\n{EXCLUDE [Opened], [Overdue], [Max Year?]: \r\nCOUNTD(IF [Active]=TRUE\r\nTHEN [Number]\r\nEND)\r\n}", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Overdue", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Max Year?", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Number", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - }, - { - "name": "Active", - "datasource": { - "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" - } - } - ] + "formula": "// This is a calculated field using a level of detail calculation (LOD)\r\n// It counts each distinct active problem. The \"exclude\" is used to avoid filters interfering with the result \r\n\r\n{EXCLUDE [Opened], [Overdue], [Max Year?]: \r\nCOUNTD(IF [Active]=TRUE\r\nTHEN [Number]\r\nEND)\r\n}" }, { "__typename": "ColumnField", @@ -9292,8 +7894,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9306,8 +7907,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null } ], "upstreamDatasources": [], @@ -9459,8 +8059,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9473,8 +8072,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9487,8 +8085,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9501,8 +8098,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9515,8 +8111,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9529,8 +8124,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9543,8 +8137,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9557,8 +8150,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9571,8 +8163,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9585,8 +8176,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9599,8 +8189,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9627,8 +8216,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9641,8 +8229,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9655,8 +8242,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9669,8 +8255,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9683,8 +8268,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9697,8 +8281,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9711,8 +8294,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9725,8 +8307,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9739,8 +8320,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9753,8 +8333,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9767,8 +8346,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9781,8 +8359,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9795,8 +8372,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9809,8 +8385,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9823,8 +8398,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9837,8 +8411,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9851,8 +8424,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9865,8 +8437,7 @@ "role": "DIMENSION", "dataType": "DATE", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9879,8 +8450,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9893,8 +8463,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9907,8 +8476,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9921,8 +8489,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9935,8 +8502,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9949,8 +8515,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9963,8 +8528,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9977,8 +8541,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -9991,8 +8554,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10005,8 +8567,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10019,8 +8580,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10033,8 +8593,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -10047,21 +8606,7 @@ "dataType": "REAL", "defaultFormat": "p0%", "aggregation": null, - "formula": "// This is a calculated field\r\n// It show the percentage incidents which are overdue\r\n\r\n(IF ATTR([Overdue]=\"Overdue\")\r\nTHEN COUNTD([Number])\r\nEND)\r\n/\r\nATTR({ EXCLUDE [Overdue]:\r\nCOUNTD([Number])})", - "upstreamFields": [ - { - "name": "Overdue", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - }, - { - "name": "Number", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - } - ] + "formula": "// This is a calculated field\r\n// It show the percentage incidents which are overdue\r\n\r\n(IF ATTR([Overdue]=\"Overdue\")\r\nTHEN COUNTD([Number])\r\nEND)\r\n/\r\nATTR({ EXCLUDE [Overdue]:\r\nCOUNTD([Number])})" }, { "__typename": "ColumnField", @@ -10074,8 +8619,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10088,8 +8632,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10102,8 +8645,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10116,8 +8658,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10130,8 +8671,7 @@ "role": "DIMENSION", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": "Sum", - "upstreamFields": [] + "aggregation": "Sum" }, { "__typename": "ColumnField", @@ -10144,8 +8684,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10158,8 +8697,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10172,8 +8710,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10186,8 +8723,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10200,8 +8736,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10214,8 +8749,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10228,8 +8762,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10242,8 +8775,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10256,8 +8788,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10270,8 +8801,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -10284,33 +8814,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": "Attribute", - "formula": "// This is a calculated field using level of detail calculation\r\n// It counts each distinct incident. The exclude is used to guarantee that filters will not interfere in the result\r\n\r\n\r\n{EXCLUDE [Opened], [Overdue], [Max Year?]: \r\nCOUNTD(IF [Max Year?]=TRUE\r\nTHEN [Number]\r\nEND)\r\n}", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - }, - { - "name": "Overdue", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - }, - { - "name": "Max Year?", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - }, - { - "name": "Number", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - } - ] + "formula": "// This is a calculated field using level of detail calculation\r\n// It counts each distinct incident. The exclude is used to guarantee that filters will not interfere in the result\r\n\r\n\r\n{EXCLUDE [Opened], [Overdue], [Max Year?]: \r\nCOUNTD(IF [Max Year?]=TRUE\r\nTHEN [Number]\r\nEND)\r\n}" }, { "__typename": "ColumnField", @@ -10323,8 +8827,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10337,8 +8840,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10365,8 +8867,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10379,8 +8880,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10393,8 +8893,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10407,8 +8906,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10421,8 +8919,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10435,8 +8932,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10449,8 +8945,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10463,8 +8958,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10477,8 +8971,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10491,8 +8984,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10505,8 +8997,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10519,8 +9010,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10533,8 +9023,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10547,8 +9036,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10561,8 +9049,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10575,8 +9062,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10589,8 +9075,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10603,8 +9088,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10617,8 +9101,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10631,8 +9114,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10645,8 +9127,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10659,8 +9140,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10673,8 +9153,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10687,8 +9166,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10701,8 +9179,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10715,8 +9192,7 @@ "role": "DIMENSION", "dataType": "DATE", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10729,8 +9205,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10743,8 +9218,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -10757,33 +9231,7 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "formula": "// This is a calculated field\r\n// It shows if an incident is overdue\r\n\r\n//Check overdue cases among inactive incidents\r\n{ FIXED [Number]:\r\n\r\nIF MAX([Active]=FALSE) \r\nAND\r\nmax([Closed])>max([Due date])\r\n\r\nOR\r\n//Check overdue cases among active incidents\r\nMAX([Active] = TRUE) \r\nAND NOW() > MAX([Due date]) \r\n\r\nTHEN \"Overdue\"\r\nEND\r\n}", - "upstreamFields": [ - { - "name": "Number", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - }, - { - "name": "Active", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - }, - { - "name": "Closed", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - }, - { - "name": "Due date", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - } - ] + "formula": "// This is a calculated field\r\n// It shows if an incident is overdue\r\n\r\n//Check overdue cases among inactive incidents\r\n{ FIXED [Number]:\r\n\r\nIF MAX([Active]=FALSE) \r\nAND\r\nmax([Closed])>max([Due date])\r\n\r\nOR\r\n//Check overdue cases among active incidents\r\nMAX([Active] = TRUE) \r\nAND NOW() > MAX([Due date]) \r\n\r\nTHEN \"Overdue\"\r\nEND\r\n}" }, { "__typename": "ColumnField", @@ -10796,8 +9244,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10810,8 +9257,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10824,8 +9270,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10838,8 +9283,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10852,8 +9296,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10866,8 +9309,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10880,8 +9322,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10894,8 +9335,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10908,8 +9348,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10922,8 +9361,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10936,8 +9374,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10950,8 +9387,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10964,8 +9400,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10978,8 +9413,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -10992,8 +9426,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11006,8 +9439,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11020,8 +9452,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11034,8 +9465,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11048,8 +9478,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11062,8 +9491,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11076,8 +9504,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11090,8 +9517,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11104,8 +9530,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11118,8 +9543,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -11132,21 +9556,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "// This is a calculated field\r\n// It calculates the difference in seconds between opening and closing an incident\r\n\r\n// Check if closed date is valid\r\nIF [Closed]>[Opened]\r\nTHEN\r\n//Calculate difference\r\nDATEDIFF('second', [Opened], [Closed])\r\nEND", - "upstreamFields": [ - { - "name": "Closed", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - }, - { - "name": "Opened", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - } - ] + "formula": "// This is a calculated field\r\n// It calculates the difference in seconds between opening and closing an incident\r\n\r\n// Check if closed date is valid\r\nIF [Closed]>[Opened]\r\nTHEN\r\n//Calculate difference\r\nDATEDIFF('second', [Opened], [Closed])\r\nEND" }, { "__typename": "ColumnField", @@ -11159,8 +9569,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11173,8 +9582,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11187,8 +9595,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11201,8 +9608,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11215,8 +9621,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11229,8 +9634,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11243,8 +9647,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11257,8 +9660,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11271,8 +9673,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11285,8 +9686,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11299,8 +9699,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11313,8 +9712,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11327,8 +9725,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11341,8 +9738,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11355,8 +9751,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -11369,39 +9764,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": "Attribute", - "formula": "// This is a calculated field\r\n// It counts each distinct incident. The \"exclude\" is used to avoid filters interfering in the final result\r\n\r\n{EXCLUDE [Opened], [Overdue], [Max Year?]: \r\nCOUNTD(IF [Active]=TRUE\r\nTHEN [Number]\r\nEND)\r\n}", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - }, - { - "name": "Overdue", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - }, - { - "name": "Active", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - }, - { - "name": "Max Year?", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - }, - { - "name": "Number", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - } - ] + "formula": "// This is a calculated field\r\n// It counts each distinct incident. The \"exclude\" is used to avoid filters interfering in the final result\r\n\r\n{EXCLUDE [Opened], [Overdue], [Max Year?]: \r\nCOUNTD(IF [Active]=TRUE\r\nTHEN [Number]\r\nEND)\r\n}" }, { "__typename": "ColumnField", @@ -11414,8 +9777,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11428,8 +9790,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11442,8 +9803,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11456,8 +9816,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11470,8 +9829,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11484,8 +9842,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11498,8 +9855,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11512,8 +9868,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11526,8 +9881,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11540,8 +9894,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11554,8 +9907,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11568,8 +9920,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11582,8 +9933,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11596,8 +9946,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11610,8 +9959,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11624,8 +9972,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11638,8 +9985,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -11652,15 +9998,7 @@ "dataType": "BOOLEAN", "defaultFormat": null, "aggregation": null, - "formula": "// This is a calculated field\r\n// It shows TRUE/FALSE if opened date equals maximum year in the dataset\r\n\r\nDATEPART(\"year\", [Opened]) = DATEPART(\"year\", {MAX([Opened])})", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - } - ] + "formula": "// This is a calculated field\r\n// It shows TRUE/FALSE if opened date equals maximum year in the dataset\r\n\r\nDATEPART(\"year\", [Opened]) = DATEPART(\"year\", {MAX([Opened])})" }, { "__typename": "ColumnField", @@ -11673,8 +10011,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11687,8 +10024,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11701,8 +10037,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11715,8 +10050,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11729,8 +10063,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11743,8 +10076,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11757,8 +10089,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11771,8 +10102,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11785,8 +10115,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11799,8 +10128,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11813,8 +10141,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11827,8 +10154,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11841,8 +10167,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11855,8 +10180,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11869,8 +10193,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11883,8 +10206,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11897,8 +10219,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11911,8 +10232,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11925,8 +10245,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11939,8 +10258,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11953,8 +10271,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11967,8 +10284,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11981,8 +10297,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -11995,8 +10310,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12009,8 +10323,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12023,8 +10336,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12037,8 +10349,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12051,8 +10362,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12065,8 +10375,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12079,8 +10388,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12093,8 +10401,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -12107,15 +10414,7 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "formula": "// This is an IF statment using the opened field to allow for different formats\r\n// original used on columns for line charts are formatted in starting letter of month i.e. J for January\r\n// This version formats to full month name for the tooltip \r\n\r\n\r\n// The IF statement names the month based on the month number of the datefield\r\nIF DATEPART('month', [Opened]) = 1 THEN 'January'\r\nELSEIF DATEPART('month', [Opened]) = 2 THEN 'February'\r\nELSEIF DATEPART('month', [Opened]) = 3 THEN 'March'\r\nELSEIF DATEPART('month', [Opened]) = 4 THEN 'April'\r\nELSEIF DATEPART('month', [Opened]) = 5 THEN 'May'\r\nELSEIF DATEPART('month', [Opened]) = 6 THEN 'June'\r\nELSEIF DATEPART('month', [Opened]) = 7 THEN 'July'\r\nELSEIF DATEPART('month', [Opened]) = 8 THEN 'August'\r\nELSEIF DATEPART('month', [Opened]) = 9 THEN 'September'\r\nELSEIF DATEPART('month', [Opened]) = 10 THEN 'October'\r\nELSEIF DATEPART('month', [Opened]) = 11 THEN 'Novemeber'\r\nELSEIF DATEPART('month', [Opened]) = 12 THEN 'December'\r\nELSE NULL\r\nEND", - "upstreamFields": [ - { - "name": "Opened", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - } - ] + "formula": "// This is an IF statment using the opened field to allow for different formats\r\n// original used on columns for line charts are formatted in starting letter of month i.e. J for January\r\n// This version formats to full month name for the tooltip \r\n\r\n\r\n// The IF statement names the month based on the month number of the datefield\r\nIF DATEPART('month', [Opened]) = 1 THEN 'January'\r\nELSEIF DATEPART('month', [Opened]) = 2 THEN 'February'\r\nELSEIF DATEPART('month', [Opened]) = 3 THEN 'March'\r\nELSEIF DATEPART('month', [Opened]) = 4 THEN 'April'\r\nELSEIF DATEPART('month', [Opened]) = 5 THEN 'May'\r\nELSEIF DATEPART('month', [Opened]) = 6 THEN 'June'\r\nELSEIF DATEPART('month', [Opened]) = 7 THEN 'July'\r\nELSEIF DATEPART('month', [Opened]) = 8 THEN 'August'\r\nELSEIF DATEPART('month', [Opened]) = 9 THEN 'September'\r\nELSEIF DATEPART('month', [Opened]) = 10 THEN 'October'\r\nELSEIF DATEPART('month', [Opened]) = 11 THEN 'Novemeber'\r\nELSEIF DATEPART('month', [Opened]) = 12 THEN 'December'\r\nELSE NULL\r\nEND" }, { "__typename": "ColumnField", @@ -12128,8 +10427,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12156,8 +10454,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12170,8 +10467,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12184,8 +10480,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -12198,8 +10493,7 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "formula": "1", - "upstreamFields": [] + "formula": "1" }, { "__typename": "ColumnField", @@ -12212,8 +10506,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12226,8 +10519,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12240,8 +10532,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12254,8 +10545,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12268,8 +10558,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12282,8 +10571,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12296,8 +10584,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12310,8 +10597,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12324,8 +10610,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12338,8 +10623,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12352,8 +10636,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12366,8 +10649,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12380,8 +10662,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12394,8 +10675,7 @@ "role": "DIMENSION", "dataType": "BOOLEAN", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12408,8 +10688,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12422,8 +10701,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12436,8 +10714,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12450,8 +10727,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12464,8 +10740,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12478,8 +10753,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12492,8 +10766,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12506,8 +10779,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12520,8 +10792,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12534,8 +10805,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12548,8 +10818,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12562,8 +10831,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12576,8 +10844,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12590,8 +10857,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12604,8 +10870,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12618,8 +10883,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -12632,8 +10896,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "CalculatedField", @@ -12646,15 +10909,7 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "formula": "// This is a calculated field\r\n// It transforms time in seconds into DD:HH:MM:SS format\r\nSTR(INT(AVG([Time to Close an Incident (seconds)])/86400)) \r\n \r\n+ \" day(s) \" + \r\n \r\nIF (INT(AVG([Time to Close an Incident (seconds)])%86400/3600)) \r\n< 10 THEN \"0\" ELSE \"\" END + STR(INT(AVG([Time to Close an Incident (seconds)])%86400/3600))\r\n \r\n+ \":\" + \r\n \r\nIF INT(AVG([Time to Close an Incident (seconds)])%3600/60) \r\n< 10 THEN \"0\" ELSE \"\" END + STR(INT(AVG([Time to Close an Incident (seconds)])%3600/60)) \r\n \r\n \r\n+ \":\" + \r\n \r\nIF INT(AVG([Time to Close an Incident (seconds)]) %3600 %60) \r\n< 10 THEN \"0\" ELSE \"\" END + STR(INT(AVG([Time to Close an Incident (seconds)]) %3600 %60))", - "upstreamFields": [ - { - "name": "Time to Close an Incident (seconds)", - "datasource": { - "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" - } - } - ] + "formula": "// This is a calculated field\r\n// It transforms time in seconds into DD:HH:MM:SS format\r\nSTR(INT(AVG([Time to Close an Incident (seconds)])/86400)) \r\n \r\n+ \" day(s) \" + \r\n \r\nIF (INT(AVG([Time to Close an Incident (seconds)])%86400/3600)) \r\n< 10 THEN \"0\" ELSE \"\" END + STR(INT(AVG([Time to Close an Incident (seconds)])%86400/3600))\r\n \r\n+ \":\" + \r\n \r\nIF INT(AVG([Time to Close an Incident (seconds)])%3600/60) \r\n< 10 THEN \"0\" ELSE \"\" END + STR(INT(AVG([Time to Close an Incident (seconds)])%3600/60)) \r\n \r\n \r\n+ \":\" + \r\n \r\nIF INT(AVG([Time to Close an Incident (seconds)]) %3600 %60) \r\n< 10 THEN \"0\" ELSE \"\" END + STR(INT(AVG([Time to Close an Incident (seconds)]) %3600 %60))" }, { "__typename": "ColumnField", @@ -12667,8 +10922,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null } ], "upstreamDatasources": [], @@ -12751,15 +11005,7 @@ "name": "customer_id", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "customer_id", - "datasource": { - "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -12767,15 +11013,7 @@ "name": "Custom SQL Query", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Custom SQL Query", - "datasource": { - "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -12783,15 +11021,7 @@ "name": "staff_last_name", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "staff_last_name", - "datasource": { - "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -12799,15 +11029,7 @@ "name": "staff_first_name", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "staff_first_name", - "datasource": { - "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -12815,15 +11037,7 @@ "name": "customer_last_name", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "customer_last_name", - "datasource": { - "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -12831,15 +11045,7 @@ "name": "amount", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "amount", - "datasource": { - "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -12847,15 +11053,7 @@ "name": "customer_first_name", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "customer_first_name", - "datasource": { - "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" - } - } - ] + "folderName": null }, { "__typename": "DatasourceField", @@ -12863,15 +11061,7 @@ "name": "payment_date", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "payment_date", - "datasource": { - "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" - } - } - ] + "folderName": null } ], "upstreamDatasources": [ @@ -12913,17 +11103,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "id", - "table": { - "__typename": "CustomSQLTable", - "id": "c7dd65fb-6e7e-4091-bbde-8c78b34a40f8" - } - } - ] + "aggregation": null }, { "__typename": "ColumnField", @@ -12936,17 +11116,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "name", - "table": { - "__typename": "CustomSQLTable", - "id": "c7dd65fb-6e7e-4091-bbde-8c78b34a40f8" - } - } - ] + "aggregation": null } ], "upstreamDatasources": [], diff --git a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_04ed1dcc7090_all.json b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_04ed1dcc7090_all.json new file mode 100644 index 0000000000000..e695ec7f5339c --- /dev/null +++ b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_04ed1dcc7090_all.json @@ -0,0 +1,97 @@ +{ + "data": { + "fieldsConnection": { + "nodes": [ + { + "id": "08feb4a3-ecd2-8e6e-d3d0-fb27970b4898", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "payment_date", + "table": { + "__typename": "CustomSQLTable", + "id": "22b0b4c3-6b85-713d-a161-5a87fdd78f40" + } + } + ] + }, + { + "id": "85ce12c3-12b1-fbfc-659f-a0670b193bab", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "amount", + "table": { + "__typename": "CustomSQLTable", + "id": "22b0b4c3-6b85-713d-a161-5a87fdd78f40" + } + } + ] + }, + { + "id": "afb789df-a7d6-0fd8-1c20-4d7725636f32", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ba250011-4873-54ad-5b64-c689996216f2", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "first_name", + "table": { + "__typename": "CustomSQLTable", + "id": "22b0b4c3-6b85-713d-a161-5a87fdd78f40" + } + } + ] + }, + { + "id": "c04914c4-0a78-1bd1-acb7-ebf0d704c609", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "customer_id", + "table": { + "__typename": "CustomSQLTable", + "id": "22b0b4c3-6b85-713d-a161-5a87fdd78f40" + } + } + ] + }, + { + "id": "c68badd9-86d7-c554-d287-9f21d1ac113b", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "rental_id", + "table": { + "__typename": "CustomSQLTable", + "id": "22b0b4c3-6b85-713d-a161-5a87fdd78f40" + } + } + ] + }, + { + "id": "eb9b61e1-5209-4586-7af0-b69cd0df25c9", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "last_name", + "table": { + "__typename": "CustomSQLTable", + "id": "10c6297d-0dbd-44f1-b1ba-458bea446513" + } + } + ] + } + + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": null + }, + "totalCount": 8 + } + } +} \ No newline at end of file diff --git a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_1570e7f932f6_all.json b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_1570e7f932f6_all.json new file mode 100644 index 0000000000000..edeac70435578 --- /dev/null +++ b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_1570e7f932f6_all.json @@ -0,0 +1,1004 @@ +{ + "data": { + "fieldsConnection": { + "nodes": [ + { + "id": "00063251-7439-42d0-92ed-ef1e4780f535", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "01e9bb1a-4104-6015-c523-a8ced60c0141", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "082a9196-5708-f04c-fea5-4b41017364a4", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0a750e32-3a43-ba4b-8965-414be6582d71", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0d28c5bd-5a38-b27a-ab29-dd463cb88781", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0d469bda-c335-56e9-5a99-e5ff72fc3eb5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0e6317db-3c7e-6108-142f-b135c7c5446e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "102561e9-3e82-6fb0-8cf0-5358554ced64", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "107ea9de-0cb0-68d4-7fa0-88cb302111f9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1273ded0-48d6-124a-6478-c890e710d77b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "15497da4-f39e-eee6-ff86-a62a21ab018e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1708b90c-543c-1187-12e4-5fb2efc4398d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "17737de3-7edf-6e9f-98f9-4babf6c1ec52", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1810002a-23d7-fb93-88ba-8929d7ae6626", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1a6643b1-0d5e-10b1-ce9e-8e899f5bb74d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1b0ade5c-b27a-37c9-3777-5f1b10db972e", + "upstreamFields": [ + { + "name": "Active", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Closed", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Due date", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "1cc3d024-5f16-0c4b-2a11-f25e74a529f7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "204940b8-ad53-93bc-7f4e-0c49a1ced7c8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "20a816a9-cd49-1c22-c174-68cabbdfb5d6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "20ca442a-ce32-096c-1930-631070435f6a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "221c3b38-b379-ca91-033c-12e1c3bdc2a6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2434f7f7-34cc-38bf-1a6d-b38cda03767d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2636292d-03af-c4bf-1d23-125e93817c46", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "275cd5a0-27af-24b5-dceb-7b949069c5b1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "27b9efb6-3bf8-554c-6483-90302baea5a4", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "286f168e-6791-76ec-a3fd-5869e249a90d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "29bf12fc-c7cb-2646-0018-d1ad17df380e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2a16d7b7-664b-e4fb-5992-9e46656be0f6", + "upstreamFields": null, + "upstreamColumns": [] + }, + { + "id": "2b288274-2ad4-46e5-e3a4-083d40c27ca5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2c072517-9087-302b-45d2-f1784dbabadb", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2dcbb622-7def-1148-f71d-7e684889280c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2ddcc070-6825-e04c-0f86-71b41a108592", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2e6f4141-1ff0-23f8-ca7b-7e2f725e429c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2edd6e6a-0441-a361-3c1c-787fee02887b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2eddd399-9dd8-6077-b068-6170fe145c9a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "314b11a4-eb95-e74a-485b-b9e701ba63ca", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "31bb1233-4c26-8c2b-b01d-e3257257b20a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "37ff2384-09ee-37a0-68de-50fcf93dad5e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3983e917-c97c-2ef3-3646-c8b7ed6b7cde", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "39cb645a-f49b-46ba-e105-0d4e5a557a50", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3a946020-200f-ef9c-3ffb-dc3d1d7f8d83", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3ca79cbf-1f11-1c6b-8cff-8809fb78847d", + "upstreamFields": [ + { + "name": "Age of Problems", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "3d079b7f-055a-9e32-a556-06b5ba88b724", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3d9a1e8a-dece-0426-1de3-ce1b17f280bc", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3e307351-7b04-b559-f1b1-ae2e7540399b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4385ee61-4737-cf60-8a23-98e27ce055c5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "463b329f-3168-d7ba-51c2-9fc559c59e74", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "474dbfe8-d6ab-6ce9-615f-2b8c7cd72c1f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "47a4c0ce-80ed-c19f-318e-a939a71e23b8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4898fa27-e5c9-e339-83c0-95afb40a6f3c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4b2193e9-48cf-e370-2354-08960ecb2669", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4bc64791-96fa-d9bf-46bc-3fb125979a8b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4e71e5aa-56fe-adf9-1c4c-9172d06d7bd0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "51b313dc-a42c-fee6-bf29-b00afd3afeeb", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "545b9d43-eae2-8cbc-99d0-27058e192e95", + "upstreamFields": [ + { + "name": "Overdue", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Number", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "5563d48f-36df-74c8-400a-d167d6026e8c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "56c61068-74ae-1683-4285-ab67e479b2b1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "57b8ab3a-2a5e-8762-a1a6-7f4619af8f45", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "597b6c72-023a-971a-ab51-d8a0175f3980", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "59ac55b4-449a-a192-52d0-89fd0311c100", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5a1b706a-7d10-2971-26e7-16e2dc023fbd", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5ae351de-6951-d9bb-6084-905aaf36acc7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5ae89446-3361-5c2b-aff0-96fe2133779f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5e86cadb-a132-14db-8a23-c8e2d7cbebd5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5ea7e018-fcdd-e7f0-12c2-5059b8a95631", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "637edfdf-a02f-d4b2-695d-58f86520a466", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "639e97db-56cb-5c83-c39f-f79a3acc7a0a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "644f210f-5b10-ac75-d6f4-c0b1d364af30", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "64591d51-9d4a-2759-7852-87aa2bcb0438", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6815a7f2-82b4-4b5f-7212-20c3894eeb0e", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Number", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "6e395433-83a6-cfa2-a243-195b96674a7f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6fb1d4f0-f0ba-0f95-2f7c-20bba021df32", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "70078cf3-13bd-863d-594c-bd8e9e4680cc", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "730d411d-1a9e-391f-6749-cb86f81fd10c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "73d0ea57-a4b1-a2d7-41dd-06c010809086", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "761ab98a-f63e-9487-9164-4e67ff5847e8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "76552343-464f-748f-8fd5-8466ad906420", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "78c21e64-d43e-5b59-22cc-647b77ecf64e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7ab7701e-d395-2505-c768-2f9d6e2903f5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7bdbc329-3b53-ddc9-451a-62e95d19406b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7cc637cf-bb98-8073-bc08-cd06bd457ae2", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7de3a818-2d72-9b14-320c-321fd1879aaf", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7defb5b3-27c6-3039-d2bd-2a9f1f272752", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "800b5b29-6e5a-7c6f-af58-1da43992b340", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "80648b09-43b9-511c-767c-773a1c79ee4e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "825a07ec-113e-cb1b-5659-bdfcd18f6ea9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "82ae3f36-177c-7979-3b5e-9ee6b16341c7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "82fe5c00-66b0-38bd-6d12-fce5418c2110", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "832b6e6d-3a12-3d68-ffda-e17819eae225", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "858f09a3-a80b-b76b-4815-8310678912fe", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "868fffe2-1903-0353-cf1a-c32043339e5e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "87c90db6-cf07-0b3e-229b-8cd23147bb86", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "88d4c61c-dc52-28ca-1a67-5bcb0aef88e5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "89d75169-9239-7079-0412-68b71f6442ba", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8b607f1a-3a69-256d-b3ca-9a2b6bc9654a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8e72964b-8ffc-f855-62f9-cff5536f7153", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "90ef2358-7bd1-5aaa-0df1-76dabec7a66a", + "upstreamFields": [ + { + "name": "Related Incidents", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Number", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "9197aa16-fb9b-9da7-dd36-57c441dd7f45", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "923b2b13-ea7d-a516-9b38-dae12dbd867e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "931f2ad1-5ec9-144a-bf79-c355831fb5eb", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "940b4d67-33e7-882b-577f-f144f2b01da1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "94caead7-f1f1-ddd5-0887-42812ab147a2", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "95a0d3c4-4186-cfa8-6327-8d4c98125945", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "981b7ffe-d4bf-532d-2b8e-a0010f08e9ea", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "98dbe828-7c43-eb7e-c46f-00d3f398dfdb", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9998c2e0-3141-5e59-f0fe-119e568774af", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9a6c26c4-84ba-fe54-9cdc-6cac2c443096", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a7e005c8-34bb-bc7f-eb1f-a35898e083cf", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ab2aa63d-c73a-9cf9-9a54-9d469d47e890", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ab6b575a-355a-a33e-f5dd-758009a5d727", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ad860ae9-1f1e-190b-774c-9e30d3666e8f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ae576f09-897e-d919-b991-216abbbb676f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b02e54fa-0cd0-d28d-c391-b5a0b89fc1c6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b0fdc0c9-bf62-8b24-8582-17c8685ec9c1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b10a9c7b-377b-3b0d-d172-487a7ca329ba", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b34308cc-f30c-a5bb-52b9-78c00f2f461c", + "upstreamFields": [ + { + "name": "Known error", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Number", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "b3641005-3974-868f-2a61-0dce2e083ef9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "baa48968-d807-7a6f-e46e-a60f97216aae", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c09ee363-0a77-cf4b-bc0b-58cd5ed9b623", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c1cae107-4e52-e8e6-286b-28ac285128d7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c1ef3114-424a-b7d7-3559-989b2bbc4f48", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c53ead8c-9d9c-4c32-8fdb-841e30b0a532", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c5aba5a9-0447-90c7-bfa0-064ee2a5c809", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c5c20844-5802-c8a9-ef9d-a62e1972f94a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c64607f1-c00a-88b8-b4ea-4018f7dff6f0", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "c790ee85-ee15-0cbb-9782-98312c7903c5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c7cd50dd-1459-4d24-fe94-96611ccd7a6e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c8a9edb7-a929-3eeb-f005-4ff46ef1a6ac", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c8c90936-8146-8283-8b27-66104b99ebe6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c973b995-ccca-201f-0ea3-5b8ac1625d99", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ca6e50f9-4097-4aaf-ead3-ec6cce910e20", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ced911f2-2ff8-60e3-e522-36f7c8f7a28d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cf7efd6f-3e9d-0bf4-b96d-4404194690e6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cfafc137-c841-f1a8-42a7-c976624ec73d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cff99350-e836-7226-8050-3163d587b479", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "cffb2549-3525-3117-9d65-855e28d41fdd", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d1233d09-863c-94bc-ea08-a962f932462e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d347b9a8-e7ad-d29c-c65e-bf0794aae411", + "upstreamFields": null, + "upstreamColumns": [] + }, + { + "id": "d4120dbf-7a9a-8dcc-b04d-46d252167368", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d8f9b0fd-70f2-8a37-b5d2-42659cbb4bef", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "da47cb47-8e2e-9a86-a3de-30b06bb627a4", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "dd85d612-daca-60b3-433b-83508d004b1f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "de196a57-20e2-9501-3d72-f8e2681266c8", + "upstreamFields": [ + { + "name": "Priority", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Number", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "de60a6dd-ae9a-3b7c-edf8-d24f5f53fa89", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e0101592-4d04-fca2-69ee-4716d890b478", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e3250a75-40d1-430a-8e8d-91ccb4cdbd06", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e5311592-2aff-4c2b-6e39-394467561292", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e557ac82-16de-15b8-05b6-5ab147b282da", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e99ce6f7-1be9-1631-5ac1-5c9a7fa1843e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ea90347e-f01d-6dc2-0676-215bd646281a", + "upstreamFields": null, + "upstreamColumns": [] + }, + { + "id": "eae5703d-877a-a98b-e050-73333ab7ea7f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ec7efb26-fd01-82de-28dd-194ebd3da3f5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ec9379d0-f48b-577e-2314-6288c3f4a3a0", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Overdue", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Max Year?", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Number", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "f0476fba-cb04-884e-9b6d-1de64a00c645", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f432316d-59f3-0369-3ce6-867f880c671b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f593d9e0-cb42-a787-c4b1-61aab31ba3be", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f6583bf8-59b8-9722-3b91-86b33f998413", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f67c0bb4-2ec3-aa3a-6b92-bd697c6bbe80", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f7b024b2-3ea3-4fbc-199c-b501cddaa7d5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f8d5647e-11f4-0fc7-d121-92a980617707", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f971325f-534e-80c6-7cfe-197273a02aaa", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "fa53bc38-b45e-4bfa-7ae4-5ae249ef6751", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "fd8d3177-df25-99c8-707d-76aff8975567", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "fed69289-f04f-e280-fdd5-719cf043ff35", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Overdue", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Max Year?", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Number", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + }, + { + "name": "Active", + "datasource": { + "id": "3ade7817-ae27-259e-8e48-1570e7f932f6" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "ff4371e0-3575-3686-23d1-4d035db44f33", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ffd340a0-8e6c-b2a7-2649-66f7c86f468b", + "upstreamFields": [], + "upstreamColumns": [] + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": null + }, + "totalCount": 8 + } + } +} \ No newline at end of file diff --git a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_26675da44a38_all.json b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_26675da44a38_all.json new file mode 100644 index 0000000000000..6c44f9c314243 --- /dev/null +++ b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_26675da44a38_all.json @@ -0,0 +1,109 @@ +{ + "data": { + "fieldsConnection": { + "nodes": [ + { + "id": "0235103b-b83a-1380-8357-45b6e458202d", + "upstreamFields": [ + { + "name": "customer_id", + "datasource": { + "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "494eb750-ceb8-5000-e42b-f5889389c62b", + "upstreamFields": [ + { + "name": "Custom SQL Query", + "datasource": { + "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "60ca9dc0-f867-01a1-6d9f-e196636c0f08", + "upstreamFields": [ + { + "name": "staff_last_name", + "datasource": { + "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "79ab36f4-e1f3-ec9a-13c6-e7658f3ed563", + "upstreamFields": [ + { + "name": "staff_first_name", + "datasource": { + "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "8dbd31bb-460f-bb52-3b26-d0b4b5df875e", + "upstreamFields": [ + { + "name": "customer_last_name", + "datasource": { + "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "c058d792-9f88-8642-4e63-682cfb6382af", + "upstreamFields": [ + { + "name": "amount", + "datasource": { + "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "d432bec7-b5cf-7891-3a47-087a65f3679b", + "upstreamFields": [ + { + "name": "customer_first_name", + "datasource": { + "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "ddadd012-bcdb-2ddd-9021-c590410c3e59", + "upstreamFields": [ + { + "name": "payment_date", + "datasource": { + "id": "00cce29f-b561-bb41-3557-8e19660bb5dd" + } + } + ], + "upstreamColumns": [] + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": null + }, + "totalCount": 8 + } + } +} \ No newline at end of file diff --git a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_69eb47587cc2_all.json b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_69eb47587cc2_all.json new file mode 100644 index 0000000000000..403c796c81553 --- /dev/null +++ b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_69eb47587cc2_all.json @@ -0,0 +1,421 @@ +{ + "data": { + "fieldsConnection": { + "nodes": [ + { + "id": "05e878c2-3b10-7944-446a-09c3c958df39", + "upstreamFields": [ + { + "name": "Region (People)", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "092029cd-706b-93c5-f2ea-68b020adb647", + "upstreamFields": [ + { + "name": "Product ID", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "10d720d9-d4dc-f0dd-6f6d-f2078a808aed", + "upstreamFields": [ + { + "name": "Profit", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "1b83e377-52f1-24f3-992b-2559e8b6ca70", + "upstreamFields": [ + { + "name": "Product", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "1e420a77-19a5-c303-abbc-de977b5f4ef9", + "upstreamFields": [ + { + "name": "Sub-Category", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "28ec64fc-8a21-65dd-6125-2f73fc625f26", + "upstreamFields": [ + { + "name": "Row ID", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "32c2bd6f-cc3e-62e0-1e6a-f5ae480ac329", + "upstreamFields": [ + { + "name": "Order ID", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "3934cbed-ff3d-de73-aefa-8bccc8bc9797", + "upstreamFields": [ + { + "name": "Customer ID", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "4de34be4-76ea-7080-f0d4-7f108466015b", + "upstreamFields": [ + { + "name": "Ship Mode", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "54e48e4f-5519-15c1-4a1b-97dc909899a1", + "upstreamFields": [ + { + "name": "Customer ID", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "5a03c6b4-b21c-27b0-65f9-2d5ae81b5ed0", + "upstreamFields": [ + { + "name": "Order ID (Returns)", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "5baa65db-612b-a18e-957f-8685b6b85571", + "upstreamFields": [ + { + "name": "City", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "61b4d0d2-3b7c-a61f-e4bd-a95b6fde8478", + "upstreamFields": [ + { + "name": "Sales", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "6966d863-35e8-9c0a-6094-c6d27a1fd787", + "upstreamFields": [ + { + "name": "Region", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "6a7b2e6d-3484-0df3-d98e-328a111691df", + "upstreamFields": [ + { + "name": "Quantity", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "7d3bd4e3-1683-7450-d55d-592e1a47a817", + "upstreamFields": [ + { + "name": "Ship Date", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "839c51f8-344f-b1c0-4e3a-9d53bd2dd6bd", + "upstreamFields": [ + { + "name": "Orders", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "8bd692d0-3d64-3678-8deb-a6c9469f7475", + "upstreamFields": [ + { + "name": "Profit Ratio", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "9722bc5a-16be-4f16-91db-708598db866e", + "upstreamFields": [ + { + "name": "Returns", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "983ea4b7-3690-1805-4a7a-a8bea49f920c", + "upstreamFields": [ + { + "name": "Manufacturer", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "997587cb-024f-1a56-e37c-2fb7277642e6", + "upstreamFields": [ + { + "name": "Location", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "a4c088c6-03e9-8dc3-3e69-764ab8610bf5", + "upstreamFields": [ + { + "name": "Returned", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "a69ba55b-4434-6988-e276-06183ba7ee63", + "upstreamFields": [ + { + "name": "Category", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "b4d8bf7b-74aa-3b34-ba07-a5947aceae44", + "upstreamFields": [ + { + "name": "Regional Manager", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "bb4583d3-90db-6272-b939-22537dac2de4", + "upstreamFields": [ + { + "name": "Postal Code", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "c9fdaec1-d715-bab0-a5e6-7cb2a4096d0c", + "upstreamFields": [ + { + "name": "Profit (bin)", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "cbf261c1-b86b-2f51-7aa7-9ec601acdadf", + "upstreamFields": [ + { + "name": "Segment", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "cc311fea-3737-9f07-b1bf-f4811309668d", + "upstreamFields": [ + { + "name": "Top Customers by Profit", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "d90ed70b-2846-f23d-360c-7a72e3a8d62d", + "upstreamFields": [ + { + "name": "Country/Region", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "e1906cb6-1a86-90ee-512c-c2ecf5069d96", + "upstreamFields": [ + { + "name": "Discount", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "e502bf72-d0a6-80ed-eefb-47e10608a21d", + "upstreamFields": [ + { + "name": "Order Date", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "ea384863-64ca-b5fa-7e15-d3273b5026e6", + "upstreamFields": [ + { + "name": "Product Name", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "eaad917f-9a67-d25b-2f18-7c740e9064a7", + "upstreamFields": [ + { + "name": "Customer ID", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "fd71baa7-0996-a23f-7029-3df44e89fff0", + "upstreamFields": [ + { + "name": "State", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": null + }, + "totalCount": 8 + } + } +} \ No newline at end of file diff --git a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_6f5f4cc0b6c6_all.json b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_6f5f4cc0b6c6_all.json new file mode 100644 index 0000000000000..4bffaf3ed8da6 --- /dev/null +++ b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_6f5f4cc0b6c6_all.json @@ -0,0 +1,75 @@ +{ + "data": { + "fieldsConnection": { + "nodes": [ + { + "id": "04151303-bd09-aff5-b9ee-e4948c2cb4f0", + "upstreamFields": [] + }, + { + "id": "0a0bd261-effc-6d14-3e7a-bc0b214455d4", + "upstreamFields": [] + }, + { + "id": "27a9fbc1-1290-d570-d88b-149d83d4b113", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2dd4db27-740f-7cc7-b36e-09564d556cb3", + "upstreamFields": [] + }, + { + "id": "3146b9b4-eb1f-ae91-804f-e5b157cf0eb7", + "upstreamFields": [] + }, + { + "id": "31811e0f-9fd3-dad5-6093-aab2de26e470", + "upstreamFields": [] + }, + { + "id": "3c8d999a-85c2-9f62-17e0-e7e3b4fc59c1", + "upstreamFields": [] + }, + { + "id": "4ad28d4f-8e39-429d-5b42-8bdd5ae90734", + "upstreamFields": [] + }, + { + "id": "67a5460e-d59a-1aa5-d999-7a945c3ac781", + "upstreamFields": [] + }, + { + "id": "7cbb7bd2-85d6-1a27-b21a-b93104c5fbf7", + "upstreamFields": [] + }, + { + "id": "917735d1-6fd5-536e-cc19-52eb04b6e954", + "upstreamFields": [] + }, + { + "id": "aee7feaf-f094-7601-e798-ba92e414a964", + "upstreamFields": [] + }, + { + "id": "dde631d5-9f2b-5413-e3d7-74b6494c1d75", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e2da5ba0-5e55-013a-3c2d-fbd975331a3c", + "upstreamFields": [] + }, + { + "id": "fb549c29-1158-1073-98e3-040086d127e8", + "upstreamFields": [] + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": null + }, + "totalCount": 8 + } + } +} \ No newline at end of file diff --git a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_a0fced25e056_all.json b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_a0fced25e056_all.json new file mode 100644 index 0000000000000..1e5e4d0454469 --- /dev/null +++ b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_a0fced25e056_all.json @@ -0,0 +1,1548 @@ +{ + "data": { + "fieldsConnection": { + "nodes": [ + { + "id": "008efba8-a319-a2d1-017c-ac8b716464a1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "02290a78-a75c-49c9-e9f8-4010d0949eac", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "04dc385d-8417-aa5f-3f4c-27c4333fdb5e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "05e3ac4d-2a2f-43f4-095c-e735768bad55", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0a0d2eaa-a912-2e18-6c15-df4c31b2fda2", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0a972b7c-d9f9-9f60-4777-73d4c2edce73", + "upstreamFields": [ + { + "name": "Made SLA", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + }, + { + "name": "Number", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "0c34bf50-f6c4-ffd5-820b-aa4d39b17145", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0c3589ad-af62-c35d-8e8f-878754bef4eb", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0ce0525d-249d-0583-da6f-1a8fe2c35be5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0d2d74c7-251c-fccb-a10c-356eb18ce381", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0d51375a-79a7-32db-5b69-7604d2440487", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0dbbf6a9-12f0-ab05-3a47-5cde0385d100", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0efd4d21-41ff-c601-b317-52134176c0a6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "122a6170-8375-6ea3-67d1-9f1282bd3395", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "12bc3d05-58ca-b026-29f1-ab26e294c44f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "132c92e6-5670-b1c2-ba4e-04dd949b88c8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "135564cf-1b6a-e773-0434-aa221fbd2f6b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "13788d86-4bc3-2f8c-7c81-22441862abe4", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "13b03dc6-0c35-2d6c-309b-4e38cf5f9ec0", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + }, + { + "name": "Number", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "13f2b909-b0be-cdf7-a0f6-f51f9ebfa575", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1532b8d8-95da-574f-5790-b80e3869ac60", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "15920ddf-c025-a048-a71d-7b500535f323", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "15c932ba-aafa-4fb2-e616-5192aee65ab4", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "15cf1367-7a9d-7628-fa27-08fb49cc287d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "15dbd6e4-a561-8760-6b6f-d0a3dffc2207", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1734af47-5c4c-9627-b8b0-9971a8a80b22", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "174d81eb-c5e3-722b-993b-ec2c6423dd49", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "175f2ede-eb52-2f9a-cb9c-fa88c1111dc0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "17c2014d-2507-6a9f-ad1e-2de49d4d42fe", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "181b3cc8-66f2-764e-a3ed-dcd634ed165e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "18d38346-0679-cc25-ceac-7c3d44187292", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "19ea2ef0-ca24-3b1d-5e57-2fd045efd0a2", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1a16620c-c2e7-1c76-15bc-d2c177b1d070", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1c06f71e-5a76-e28e-6cdc-897d0b4557dd", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1cb5b877-0c99-f95c-bf72-59a514da4373", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "20f1306b-4773-0662-4253-02fd76e901a1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "22cbb922-13e7-d035-8265-31773e23bd2a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "23e08774-36b9-497e-3d14-df6cb90499d9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "241346ea-bd7a-5f61-4a48-c5d555d8c687", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2470d761-eb96-34ed-e9e8-93a85cee999b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "24acc42c-935e-c9e6-604e-4d16a84cc0c7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "258f1373-9799-56d2-b92d-d91d71ea7e1b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "25f757d1-a30b-3fe0-05d2-b924c9a25903", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "26dbc4e1-7f24-1805-aaa2-430434a45e12", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "26e8468a-eb18-e101-ca05-c3a973788f41", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "26eb4032-4bbf-f9fd-1a23-3156f038b811", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "26fac0b0-9c32-8b6c-4750-1af13c8aa0ec", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "274183a9-b33a-7d99-53ee-03010803a777", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "276c386f-864d-e6a1-d9d6-4f0e52a1247d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2ab8f665-e11e-6370-d100-6c204b83c436", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2ba3fefa-ec86-2d62-513c-7eb93975277c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2c742cd3-4300-8880-6db0-26bca6d67162", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3024c8e3-bf18-c4ed-a65b-6483523f7112", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "32479c99-87cf-4b10-f77c-65623e197323", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "32952e69-cd24-fac4-9b40-6639d668e6f1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "32fa8a47-f7e8-627d-83c7-26b967486b5d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3359b5b0-4947-afa1-b610-e90f51b21368", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "368833f1-86ec-d717-d7c4-17460462696d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "37cbff94-4fcf-de28-3d7f-577148e25de5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "38435c95-3578-5f91-b918-db4ca155348c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "388f8f1e-59ea-9061-132d-b4395f36f3ad", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "39bf48ba-57b2-67a9-dc04-128658bb7c95", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3a2833f2-44fc-19fb-9d35-0a89b36c56e0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3bdf4fb2-6442-7243-be14-8e743a3c749a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3c0b9be1-6c0b-9b59-7a74-011173a4f6ac", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3c172c79-58c8-887d-c057-8c79ab04a826", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3ee4dbb7-1172-04b2-c5e8-05cada9b50aa", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "418ae8b3-ec94-9c2e-75d8-052576a242e0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4255ae77-005b-f589-9ccd-19665baa8e58", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4282472f-2d7a-8cd7-92c7-9b8b762242ea", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "441c2514-af72-5391-9777-9fcfaddc6741", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "467161aa-e739-41ff-389b-793d49f47359", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "467ddc9e-f3c0-1976-dcd4-18e0e0513c60", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "46a60f30-fe47-1be7-97d9-e2fce6bebdc3", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "46c15306-b653-1cef-bf53-f272c7e0771e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4769810f-04b7-6ea9-d279-6ba912159368", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4a18e53d-9f58-8115-363c-d8899262525f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4b782f0a-af66-f996-6eb3-0eed7138db78", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4e8f122f-5f4d-77be-e716-b6434851bc79", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4f2e8b54-8bb2-d5ee-764f-2cf037056728", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4f4cb0a0-d290-f269-6306-ffbda0b59bb9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4f63ee1c-1ce8-5c28-3f38-19706fcb28f8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "50a5f06d-6281-6cb0-5fa1-acacafc73035", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "51198995-f955-99c0-76dd-b65af948b3ab", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "515b0be8-2b01-81e1-b5f4-d38c6028f450", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "52562198-6ff7-8ab5-827c-d647ebdcc012", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "537a920a-7f17-eba0-0b32-d597edc44483", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "53de3015-a2ef-299d-a778-77b2669cee6f", + "upstreamFields": [ + { + "name": "Active", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + }, + { + "name": "Due date", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "5498cd4e-affa-faee-8ede-3c3a271626b4", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5525b243-fc68-551f-c2fa-5336d846d162", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "575b861c-2fd8-fbd5-e9b2-56554458ae26", + "upstreamFields": null, + "upstreamColumns": [] + }, + { + "id": "58ab3115-ed3a-e547-456f-19546d8ed7e6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "58ae7942-799d-2c8c-09f9-160e26f55499", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "58b286a8-ca37-8bc3-9526-6b6ce5ec31f9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "58eb2a4c-9bf3-ae9c-3025-e74424ebf774", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "599e517c-0ee3-b31d-ec77-6c7d09585d32", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5a54045b-981f-38c9-f858-440a1821d9ef", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5d63bd75-3187-f45f-619a-f01d8ecc8284", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5dc0a505-e6ca-fa13-b183-045eb170c2ac", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5e3fed63-8bc3-0beb-248e-94c11bdc594f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5fc5cc14-7db8-4e62-dd6f-8f6728e7be93", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "60085593-4c40-45d0-cac9-710cb1b396ac", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "611e5630-f981-5cf2-e927-266bedcb86bc", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6218e598-81e7-1b5b-ad84-5ce064025bc2", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "63c7744a-0948-b1ef-52a4-6a489e54e53a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "63e5bd33-24cc-b6dd-4a6d-7c8c363f5450", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "643a8709-e5ea-9915-e06a-efad2d933ac0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "65a525c1-cd94-d4b8-ac37-7eebbb3c409f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "66f180f0-37a7-7693-72b0-f950666cc30b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "67020cc1-aae1-0682-36bd-23c5e608a1ff", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "691e556a-5091-64ce-6055-f6e831197143", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "693cce97-337d-6650-3b28-a7715ab24d26", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6a08f79f-2577-fa62-275a-2ec15857bc04", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6ab03c38-6eb6-b117-ce27-4c9534854b63", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6b4727b4-9080-cc79-06a9-678404955895", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6b6e72ec-e66e-ad8d-56e1-e9b684e82066", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6bf2227b-af9f-23df-d337-b19ea40031f5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6c00ced2-cdb4-7abf-82bc-351e9949edea", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6c8e9a78-a11e-6d92-b4d3-a1ef7d60aa27", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6cdd6e20-5dfc-3c2a-72b7-15cc778665c8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6dce7c6f-bebb-e5fe-f0ed-221a724b806a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6ede002b-b1c1-39fa-b92e-fb6e652c4da3", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6ff1a184-f3e1-a2ce-349e-ae5d76859d76", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "728a1525-246e-f30b-1d6e-6e3ef90739c3", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "72922b48-ca61-7998-c7fe-aa1e1ac13cdd", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7548db00-2a35-387c-9d93-ecb4bd3eb691", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "75c9c62f-7158-3086-9443-ec06063631a9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7633c080-f332-a84d-d369-3fb8176a0f02", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "764aa481-ac4b-ba2c-d8d3-68b4e21fc54a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "784c3e44-b99d-9b52-7ebb-9e4ec6f0be9d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "789ea4f0-9d93-ca84-91db-a91c0c4e0b56", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "79c14db1-3507-37d7-b428-9820adfd4df5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7b4f0f0d-91b1-8037-2ed6-99cbdf50ec09", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7ce2f502-a54b-41ad-cb89-ba72d78362bc", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7f8b5ff1-8612-1c62-d3a1-b8f96c9a8fd7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "810b150f-36d6-73cf-39a0-fa0b5afb89e6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "82a612f8-5371-316e-624b-8e51f50583ac", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "833697a0-088e-de13-af21-1db93e07e1e6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "838264bf-b544-80df-d7d8-4ceb820e4307", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "83ec93af-9405-34a9-bdd9-29955f5a73d6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "848b5022-e769-97ac-34ab-4855920f60f6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "856cffc0-3019-b83d-7490-ddbe13b16d18", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "85b72af5-e44d-605a-4057-fd588a76ddb1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "88023bbb-07aa-5dda-a16e-782622c24d7c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8874a6de-f4af-75c3-bf20-0b2baabb6f75", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "89d6ce04-07f4-2963-ae3a-f297127905da", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "89faa1fd-6f36-a112-cc5a-b6d0519cb169", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8ce117c7-74c3-224b-03e5-39594cf42106", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8efa84c1-cd61-5372-d0cc-8ae1f02e6de0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9063d7de-4033-6d76-e49c-dd02e915d19b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "92fa607c-c8e4-839c-0d08-abe93725da96", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "937a4589-d8fa-9e04-256f-73c1f16f2607", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "94392467-1a32-887a-1651-538af23ffe37", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "94b52aaa-3b07-fc08-a782-ae74e5677867", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9625aa4e-fb89-7570-c346-306b70d32da1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9653d847-7071-1216-cf9e-144575b95582", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "96c48bb9-89ae-d542-0645-fe8b73f72dfe", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "989d24ed-df40-4769-0a2b-8ec1846c58ce", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "99300f69-6da1-1e15-80b6-92888e970fce", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9958fe2e-6292-7768-b8a0-304ac36dc936", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9ac5654f-df62-bb13-b7f5-41012b5e19e7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9b7f962e-6a86-e17e-4afd-44001f729df3", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9fdce669-4eed-3ecc-fa22-1a09b7f4a6db", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a0c579b3-7423-144a-0f1d-ec8da1bcccba", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a322b8b0-c401-86a0-a5d8-2aea35da11d1", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + }, + { + "name": "Overdue", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + }, + { + "name": "Max Year?", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + }, + { + "name": "Number", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "a43fed62-a037-a6f3-6db4-11135d8b11db", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a455f93d-b035-918a-08b6-4f96a12ca24d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a54fcec0-97c3-72ab-cc19-23123070f7a3", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a58db715-2016-b971-055c-de1d8bfb8f80", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a62941e4-9f9f-93ed-f307-5e6dbfb728ad", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a7058558-d759-9e23-ab6a-a656ee2f317d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a7c8d21d-db4e-debb-bfef-4994beba809d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a88003b6-66c0-f362-a977-2d5d9c6dd3db", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "ab41f607-d2c0-4db1-b744-d10914d8a6d5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ac179862-0ef8-afd7-9801-0f2e0f385175", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ac37a380-359c-e478-b642-e31a64c5f0d9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "aca50e11-a5b5-f063-8a78-656f47f29ec5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "acf6fb05-2503-f424-b15e-d603aaa0c223", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "adee9155-2a4b-ca21-7af8-0f42c17b7b45", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ae692271-daf4-7453-e36b-b68d2c33f36f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "af29c272-905b-ef8b-47ed-be289fa4b858", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "afcdfd6b-02d3-1952-c6e9-3dce86cd9da4", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b0486a68-1e13-6dbb-76a4-edc7a1c856bf", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b0590acf-db66-2aaf-1138-e6d56c9e2a97", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b05e2f82-9cd4-7b30-2932-e88632cb2a55", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b1247620-5f00-3f3e-fef3-4eef89c749d6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b265ac9c-0287-b59b-27bd-d330a9fcdf79", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b2fab7e4-75ce-500f-40e9-a67e28c20272", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b3f50843-0f17-9c89-9579-58f317f65620", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b42c0a76-7906-498b-2049-681677b93421", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b472e985-a322-905d-a2f8-699652137607", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b4dee84e-ef33-7e1e-ad52-02a84eb14dd0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b6961a0e-b2ee-fb47-ffbe-a5e778092615", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b6cc2e55-a89b-310e-557e-fe9ab2f297b0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b7a02779-5bcf-9fb6-c303-1dd5fdeacd49", + "upstreamFields": null, + "upstreamColumns": [] + }, + { + "id": "b7c973cb-2fcd-38d4-ec5c-3252e0c61946", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b7ea244e-0957-b32e-1c82-2c7d6c0c77e8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b8021235-a9c3-d250-6bb6-acd2742549b3", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b8336140-37e9-bc30-246e-2e84d7d776de", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b887e02d-9fb3-e1b2-fce9-e2d9e1864247", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b94dd2fe-50fe-59a7-5dbe-b8c8a224ac90", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b9abd974-460e-1a62-58e8-3da85bd2b27a", + "upstreamFields": null, + "upstreamColumns": [] + }, + { + "id": "b9fc7e1e-469b-1182-f05f-44c55e5a7dbb", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "baa30890-390b-01ae-2463-3d41ad6af87d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "bb02c81e-5779-e29e-c839-891f6ca7c4fd", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "bbb1056d-69e3-97a5-398a-42500522ecac", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "bcfd29ee-8e1f-fcac-df18-926bf5e4cd4f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "bd26196b-38a8-ecd4-761c-f2f8597db4ea", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "bd61f261-1255-c145-c113-390625309968", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "bed11b20-9063-82d9-5a53-ef8bb75619bb", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c0c11123-d69b-0e06-69a5-04267ffd5d26", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c0c66aca-3a2a-f391-01cf-03df31ea7794", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c1c3585e-d839-80ff-51c3-3de8ca6bfd61", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c2bac94d-07df-2670-c669-d72b13d8d29f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c34e0dd8-b2ba-1998-d418-b0868844b0d7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c3d35a2b-5ef1-63d7-f220-f89f522d8897", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c3e5bbe9-319e-73bb-7036-c547ceb51ad8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c40c1cbb-92ec-cf6d-2a06-08358d05582a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c447bddc-cd0a-bd6b-f46a-d2c822c16738", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c5b10ad6-d4d8-2d35-d924-db924be17994", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c5dfe431-73c7-546b-e03a-515dfe988f6a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c616d5a0-20bb-e3ba-9ab5-43570a2718a8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c821a872-624f-0044-69a9-3c6208f413d6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c84e3892-d96e-1de0-0d68-05ec16205f3e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c95e3006-8dfb-c213-b2da-d46a6955ddf6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c96e0f19-d3a7-3a3d-6926-d69946eb2de6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c9bc3709-4cb0-6c4d-088d-3ae66f74aa06", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cab3646c-724a-e8d9-9ae4-d423914c8482", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cbbdf8b2-2491-2228-b0ec-cf1bfe6ec52c", + "upstreamFields": [ + { + "name": "Overdue", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + }, + { + "name": "Number", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "cbfb76b9-d958-bf73-91d5-2abe9f57ec6a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cdb98a84-b6b5-d630-b929-871bb56f4054", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cf2aa6cd-3c9c-69ff-819e-53a8d720e7a0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d0f3198a-9ead-4d49-e911-0da4f2ff89e5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d1b741a8-6514-9d72-764c-f16ae538e2c8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d3570da1-02ed-806a-19f6-36d4d7c5d3ae", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d36671a9-e069-e42b-37dd-deac9e6c84f1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d3ab05cd-fcb7-c5cf-a63b-f8caf9417dab", + "upstreamFields": null, + "upstreamColumns": [] + }, + { + "id": "d4311978-3ead-9d0a-df44-3b46b0ba9575", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d4567175-b4df-d6b5-f68c-6ea7fbd2445c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d55a7e9d-f059-e5eb-e9ec-eb98d97e7097", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d5881216-e42f-c1a0-b255-c08dbc7c0092", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d66ae755-c173-7e1d-3a7d-9a3c0cffe05c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d6712752-0e66-2497-b404-16204fcaf0d0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d753ea95-e162-42f6-def6-6cfeaa7d7dd3", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d7be6a1a-1224-27b1-7b69-34e47dc9ce76", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d7e4cd8a-5110-0285-0a87-e54a29f5d4d4", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d8a0d4a8-a64b-b8f2-ae8c-154dce73618d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d9aedf00-942d-88dc-f69e-0a1e2a762459", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d9bc04ba-76e9-3602-d215-0056f1b0a7ce", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "da538d8c-c121-07e9-d6c7-922ca9c97c0a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "dbc0a381-fcad-8096-6ba1-b15d1288a290", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "dd65ef75-a294-91d9-69e7-fa0aaf00d283", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "df2d4778-d646-2106-e647-c6bbba843272", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "dfafbea8-91ed-d99d-9b33-c907310eebcd", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e00c27d8-4ffd-25a2-906e-edeebd37e49f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e1aca33d-7570-e580-ed64-fa5360f313cd", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e3068773-d950-e10b-a65b-b850ed70c6ca", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e452781c-07b5-05b5-bf67-540832d58064", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e4b1070f-09eb-7ec8-1658-1555a7db8550", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e64f9c26-5717-052e-a0fc-db41d5f8911e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e7578bfd-8620-bd9f-f6ee-934bae3c1d3a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e7c96d5a-dd68-4f96-310c-66b7fa3c4bab", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e8da99f0-8f5d-2614-7551-0490660dbed3", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e9134c81-82dd-4042-4444-57b4a47a72cc", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "eb38fd46-add4-2b2a-ea8b-8089a6ae5067", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ed845856-3909-fe72-2dd9-1a9404050bfa", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "edb7b2e8-c5a1-819a-b423-125134d0c557", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ee1f261c-bd68-a110-186a-da823d37b1c3", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ef6b51a9-6347-ed97-5baf-c6c53baa4751", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + }, + { + "name": "Overdue", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + }, + { + "name": "Active", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + }, + { + "name": "Max Year?", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + }, + { + "name": "Number", + "datasource": { + "id": "06c3e060-8133-4b58-9b53-a0fced25e056" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "f157463f-0e40-e589-c1fc-d85587fd89b8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f18c30e5-41c7-8c28-3ad6-9b3474b0810b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f1f56c79-6d45-31ae-663f-4e529ec1f3cf", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f38cfc69-e333-72d7-7bc5-e16957df3dec", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f3d4aefe-efef-0eef-f741-12b236720626", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f4555797-f26b-ec4c-1234-3c46a142fb30", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f628cef0-e94c-eada-07d1-36fb881b2a63", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f6f4e8a1-209b-7202-0e9b-907d87a994b5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f7a6d35d-6360-a237-86c3-57f11bbc7a2e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f7cb4ce9-1805-1a51-3363-b910e97117d8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f7f588fc-0c6d-aed3-9819-e3f9b9c926dd", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f852966b-add1-7857-3eb0-5b395f533b0d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f9bc6be4-b6e7-c03b-c43b-b8bdff7ef356", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "fdfa2354-b648-706a-2dc4-8bf2fac9bf15", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "fe164caf-ec76-8eab-9a65-8e910f130ed9", + "upstreamFields": [], + "upstreamColumns": [] + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": null + }, + "totalCount": 8 + } + } +} \ No newline at end of file diff --git a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_a561c7beccd3_all.json b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_a561c7beccd3_all.json new file mode 100644 index 0000000000000..561398df522c7 --- /dev/null +++ b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_a561c7beccd3_all.json @@ -0,0 +1,588 @@ +{ + "data": { + "fieldsConnection": { + "nodes": [ + { + "id": "06922989-6ee4-81bb-79d4-f9f9faf17819", + "upstreamFields": [ + { + "name": "Delivered Email", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + }, + { + "name": "Sent Email", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + } + ] + }, + { + "id": "0e1a7126-7f89-6bcd-d3ac-bc7a36dbe206", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "id", + "table": { + "__typename": "DatabaseTable", + "id": "82c42950-210b-ba3f-b2e9-53240474a8fd" + } + } + ] + }, + { + "id": "0e9630ee-e141-bff1-d33b-f3ea9241d4b9", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "Platform", + "table": { + "__typename": "DatabaseTable", + "id": "38f106d0-5219-2663-2647-bbbf5fca3866" + } + } + ] + }, + { + "id": "0fe12d2b-ad7c-3862-dbed-6cf000ada134", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "updatedAt", + "table": { + "__typename": "DatabaseTable", + "id": "82c42950-210b-ba3f-b2e9-53240474a8fd" + } + } + ] + }, + { + "id": "18b72ab1-374b-9740-47f4-57de5a14043a", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "programName", + "table": { + "__typename": "DatabaseTable", + "id": "82c42950-210b-ba3f-b2e9-53240474a8fd" + } + } + ] + }, + { + "id": "1e38aa00-9f8c-e489-0024-2e5d3ab8a9b7", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "Mailing_ID", + "table": { + "__typename": "DatabaseTable", + "id": "1704c7c3-4bb9-e6c6-6ea0-23f76e7560db" + } + } + ] + }, + { + "id": "1e9d01cd-e6e0-91e8-bd07-3690017cf233", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "Campaign_ID", + "table": { + "__typename": "DatabaseTable", + "id": "1704c7c3-4bb9-e6c6-6ea0-23f76e7560db" + } + } + ] + }, + { + "id": "1fada5ed-ca53-8478-40cf-820309ca45ed", + "upstreamFields": [] + }, + { + "id": "2026c0f6-96e1-4a84-9555-b80926aaed36", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "Campaign_Run_ID", + "table": { + "__typename": "DatabaseTable", + "id": "1704c7c3-4bb9-e6c6-6ea0-23f76e7560db" + } + } + ] + }, + { + "id": "21493acc-8046-5cf8-fcb1-e3ab328bf7b4", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "User_Agent", + "table": { + "__typename": "DatabaseTable", + "id": "38f106d0-5219-2663-2647-bbbf5fca3866" + } + } + ] + }, + { + "id": "26c360a8-b8fc-efb8-85f0-107d2d63913a", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "Choice_Number", + "table": { + "__typename": "DatabaseTable", + "id": "1704c7c3-4bb9-e6c6-6ea0-23f76e7560db" + } + } + ] + }, + { + "id": "26c37c0a-c970-3a28-c375-fd6c54113a3e", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "Campaign_ID", + "table": { + "__typename": "DatabaseTable", + "id": "1704c7c3-4bb9-e6c6-6ea0-23f76e7560db" + } + } + ] + }, + { + "id": "xxxdc8ee-30e5-644b-cf76-48a3dea79cda", + "upstreamFields": [] + }, + { + "id": "277dc8ee-30e5-644b-cf76-48a3dea79cda", + "upstreamFields": [] + }, + { + "id": "292ebda7-49ee-589f-b8ba-6d44443158ea", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "Has_Predictive", + "table": { + "__typename": "DatabaseTable", + "id": "1704c7c3-4bb9-e6c6-6ea0-23f76e7560db" + } + } + ] + }, + { + "id": "299d8cdf-75ed-5dff-1e97-f11f7023cd2a", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "Campaign_ID", + "table": { + "__typename": "DatabaseTable", + "id": "38f106d0-5219-2663-2647-bbbf5fca3866" + } + } + ] + }, + { + "id": "337cbc32-3695-427f-57a8-945a9d66cb46", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "Activity_Date", + "table": { + "__typename": "DatabaseTable", + "id": "38f106d0-5219-2663-2647-bbbf5fca3866" + } + } + ] + }, + { + "id": "33c19e7e-c7a8-17ce-b1c5-03075d81e718", + "aggregation": null, + "upstreamFields": [] + }, + { + "id": "3b3f6466-37a8-de90-a113-d7fc889de010", + "upstreamFields": [] + }, + { + "id": "3bd91e15-44e4-bfa9-c495-e64a481c6a99", + "upstreamFields": [] + }, + { + "id": "3c6caacf-8292-4a0e-a569-f01a50c48fde", + "upstreamFields": [] + }, + { + "id": "42bf8d99-1c09-1ffa-14b8-f99f20940b4d", + "upstreamFields": [] + }, + { + "id": "43a93841-c04b-8a60-57b5-82de870cc156", + "upstreamFields": [ + { + "name": "Delivered Email", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + }, + { + "name": "Clickthrough Emails", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + } + ] + }, + { + "id": "497f7a5a-7c57-2073-4b2e-a780ed0777f3", + "upstreamFields": [ + { + "name": "Delivered Email", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + }, + { + "name": "Opened Email", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + } + ] + }, + { + "id": "4d2e3b25-336d-e842-ac42-f947f6e65eb3", + "upstreamFields": [] + }, + { + "id": "4dd95bc1-8c08-92e5-09ae-cac7d0736c38", + "upstreamFields": [ + { + "name": "Id", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + } + ] + }, + { + "id": "4ea37317-863a-b8f7-3451-2ff1dcd43d5c", + "upstreamFields": [ + { + "name": "Activity", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + }, + { + "name": "Email Delivered", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + } + ] + }, + { + "id": "51b4731a-f7ef-70ec-2db0-b39182d54542", + "upstreamFields": [] + }, + { + "id": "53de4a7f-9930-b05f-ead3-6d628495c5bd", + "upstreamFields": [] + }, + { + "id": "58d3a137-aada-cb54-0782-c3f8cf0c30bb", + "upstreamFields": [] + }, + { + "id": "5ca9f540-c492-7e3b-744b-a78a5a977719", + "upstreamFields": [] + }, + { + "id": "5cf0d0ab-fc2d-a46a-b9ad-5128b441158c", + "upstreamFields": [] + }, + { + "id": "5d21c9b0-ac28-8d20-4307-9c342c0f238d", + "upstreamFields": [] + }, + { + "id": "5f513df7-b73b-2d6b-6b67-74a50e3f1e56", + "upstreamFields": [] + }, + { + "id": "602064a0-c2db-e057-6b72-ff40f5e6ffdf", + "upstreamFields": [] + }, + { + "id": "64f96cfa-91d2-55b7-62ea-ca05175a7a1b", + "upstreamFields": [] + }, + { + "id": "66d4994a-6a37-e8cb-1ced-37926f73b765", + "upstreamFields": [] + }, + { + "id": "67d4ac88-0fab-6f51-edd2-9e3cd6f681e8", + "upstreamFields": [] + }, + { + "id": "716fddff-5012-3c14-8105-be4625a0c02d", + "upstreamFields": [] + }, + { + "id": "722ecf66-c49b-5ad2-bc88-cd59b26d6fab", + "upstreamFields": [] + }, + { + "id": "7693149f-424a-371b-0b7a-723a80ef12ef", + "upstreamFields": [] + }, + { + "id": "7bc8c737-3ca5-956e-c23f-0fb878748b5e", + "upstreamFields": [ + { + "name": "Activity", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + }, + { + "name": "Click Email", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + } + ] + }, + { + "id": "7c875ed5-6106-1eec-4a1e-103673cde0ef", + "upstreamFields": [] + }, + { + "id": "7fd1eac6-cf7f-2480-6e91-05a31d47aa5b", + "upstreamFields": [] + }, + { + "id": "856fd651-a544-2429-4bf8-bc4c8eee3046", + "upstreamFields": [] + }, + { + "id": "86c8aef9-f3af-3a82-49a8-453b3fc69057", + "upstreamFields": [] + }, + { + "id": "8711ae44-5b7c-b5c4-0c63-9bbb6f8d55d3", + "upstreamFields": [] + }, + { + "id": "8b9b1f51-9485-afcf-b323-ba3cb8953183", + "upstreamFields": [] + }, + { + "id": "8c4140cf-c6cc-b43d-9621-3ffa8d3dae26", + "upstreamFields": [] + }, + { + "id": "908fa927-f78d-0314-4fa4-88307c21e73c", + "upstreamFields": [ + { + "name": "Clickthrough Emails", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + }, + { + "name": "Opened Email", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + } + ] + }, + { + "id": "91a0b832-5abf-95df-e292-be9e58e91404", + "upstreamFields": [ + { + "name": "Activity", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + }, + { + "name": "Open Email", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + } + ] + }, + { + "id": "9720c532-6085-7d96-82ff-f30b14ca391e", + "upstreamFields": [] + }, + { + "__typename": "ColumnField", + "id": "984bcf14-8a6b-2579-51ae-816d5db9821a", + "name": "Lead ID", + "description": null, + "isHidden": false, + "folderName": null, + "dataCategory": "ORDINAL", + "role": "DIMENSION", + "dataType": "INTEGER", + "defaultFormat": null, + "aggregation": null, + "upstreamFields": [] + }, + { + "__typename": "ColumnField", + "id": "9af0b32d-9e82-419e-c522-c4ac4a0e40d0", + "name": "Campaign Run ID (Activity - Open Email)", + "description": null, + "isHidden": false, + "folderName": null, + "dataCategory": "ORDINAL", + "role": "DIMENSION", + "dataType": "INTEGER", + "defaultFormat": null, + "aggregation": null, + "upstreamFields": [] + }, + { + "id": "a4d2164a-2ef5-4d76-62e1-468bb135b4c2", + "upstreamFields": [ + { + "name": "Opened Email", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + }, + { + "name": "Clickthrough Emails", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + } + ] + }, + { + "id": "a68a43a9-03f4-bad3-74f1-7ce668c536bc", + "upstreamFields": [] + }, + { + "id": "a8fbfef2-2ffd-77a9-0f63-a1d5e6944f24", + "upstreamFields": [] + }, + { + "id": "abf83860-1adf-8a92-a4ea-9ce9d3945ad7", + "upstreamFields": [ + { + "name": "Delivered Email", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + }, + { + "name": "Clickthrough Emails", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + } + ] + }, + { + "id": "acd62e88-e4e9-e0e5-bd00-da2d20e74dd1", + "upstreamFields": [] + }, + { + "id": "ae7d7692-b175-447a-a74b-c4f85f236be8", + "upstreamFields": [] + }, + { + "id": "af24ee3e-18ae-b2d0-7371-9dd596145f38", + "upstreamFields": [] + }, + { + "id": "b143e310-f7e1-7f49-82f5-141ae733c043", + "upstreamFields": [] + }, + { + "id": "b4bf1bbe-a8b8-b363-e4fd-0b8cd82871a1", + "upstreamFields": [] + }, + { + "id": "b6b7479a-ce63-9308-d0e3-70d8af828f36", + "upstreamFields": [] + }, + { + "id": "be574861-0e55-a0be-1143-2e10ea611e9f", + "upstreamFields": [] + }, + { + "id": "bfcf48dd-e42a-8693-72c2-9b84efc53172", + "upstreamFields": [] + }, + { + "id": "c4998733-5988-3cb6-444c-674059fddfd9", + "upstreamFields": [] + }, + { + "id": "e84f0fe4-882b-772f-a8c4-4ea89b97bff3", + "upstreamFields": [] + }, + { + "id": "e915db4c-d33b-9f5d-a5bd-6022ae85118d", + "upstreamFields": [] + }, + { + "id": "eb18ef87-d48d-fefa-1fd7-98834a304ece", + "upstreamFields": [] + }, + { + "id": "f06b3901-4f28-acd5-a724-9a3b18198528", + "upstreamFields": [] + }, + { + "id": "f509397e-7e11-4f86-4ae8-2e861df69d46", + "upstreamFields": [] + }, + { + "id": "f6dffbe7-aa6f-5acb-25a7-fdf0bf3ab507", + "upstreamFields": [ + { + "name": "Sent Email", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + }, + { + "name": "Delivered Email", + "datasource": { + "id": "801c95e3-b07e-7bfe-3789-a561c7beccd3" + } + } + ] + }, + { + "id": "fe556978-d213-2f6c-2950-ec6ce30a63b1", + "upstreamFields": [] + }, + { + "id": "ffd5c589-6741-450b-bbe6-b21f6a31670e", + "upstreamFields": [] + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": null + }, + "totalCount": 8 + } + } +} \ No newline at end of file diff --git a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_bda46be068e3_all.json b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_bda46be068e3_all.json new file mode 100644 index 0000000000000..08a46ad2ab791 --- /dev/null +++ b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_bda46be068e3_all.json @@ -0,0 +1,39 @@ +{ + "data": { + "fieldsConnection": { + "nodes": [ + { + "id": "55a70afe-3e54-492d-80c8-744601ae78cc", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "id", + "table": { + "__typename": "CustomSQLTable", + "id": "c7dd65fb-6e7e-4091-bbde-8c78b34a40f8" + } + } + ] + }, + { + "id": "636b9454-8786-4773-b94b-8e8f2db7e1a3", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "name", + "table": { + "__typename": "CustomSQLTable", + "id": "c7dd65fb-6e7e-4091-bbde-8c78b34a40f8" + } + } + ] + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": null + }, + "totalCount": 8 + } + } +} \ No newline at end of file diff --git a/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_c651da2f6ad8_all.json b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_c651da2f6ad8_all.json new file mode 100644 index 0000000000000..64aa04a6056b3 --- /dev/null +++ b/metadata-ingestion/tests/integration/tableau/setup/embeddedDatasourcesFieldUpstream_c651da2f6ad8_all.json @@ -0,0 +1,1246 @@ +{ + "data": { + "fieldsConnection": { + "nodes": [ + { + "id": "00ec352d-e443-5ba2-c389-c2265d6166c2", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "02c33011-048b-1afe-fd20-783e5c3c57a9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "02c7edfc-f259-6a56-c229-ce6467a3ebe1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "042d4a79-fc1f-4e33-f87d-bc06e3272d36", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "04fa52d7-3481-c524-7de1-1e73a2620f3a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "05db0bae-0d20-bbf9-b5c4-4a2272ffb839", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "06372073-9eee-a7a0-280e-772b0545be7d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "071f5c53-eb36-7ac6-a9b0-a13ca4987175", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0746f3ae-e85a-78cf-1b29-4bc3b97e323b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0a1dbe03-c079-6fe9-7411-fd600af432ae", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0bc80520-3393-c8ae-3afb-37d0b52b8cf9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0bea60c0-2c3f-0113-4030-b914da11166d", + "upstreamFields": null, + "upstreamColumns": [] + }, + { + "id": "0c29691d-07aa-e454-e5e1-ae074a812e40", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0eb84a88-4d6a-ebf5-a959-b67091ea6c1e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0fa74f05-78a2-2b3e-e3d3-2028f7988a08", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "10321d43-f20c-d562-b821-77f761ae5cc5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1094b642-9e96-4285-89a3-d85b59e557bc", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "10b2216d-6d19-984d-e60f-11d2751f9ec5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "113364a6-2476-07a2-e25d-81bc137daf4d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "116efdf5-d57d-a3f8-6fb5-334d6fbdab87", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "11be7d6b-d6dd-27ac-2975-00c2bd0ff051", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "12e4157c-3d2c-4e4e-373b-b204dad0ee61", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "17a9f961-0d61-c619-0959-bf4a2415fe4d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "17efeb93-035c-5671-2d6e-eb7256fdc1aa", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1aa6af8e-0f29-d3bf-b81b-35b214d1e59d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1af25d71-cdea-286d-4bac-402a54342d5c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1c558792-0edc-0e33-4077-4ce995aa27ff", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1cbdb3ed-aec2-9f14-b5b2-eb3c83f49cd9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1d2f0e36-1814-07e0-506e-4f52682c58c5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1d416d43-d670-315f-6a16-ae861d4f1ac2", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1e0edf18-0901-532a-5451-fa2314e0859b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1f0b8af8-dd21-5086-e32a-493255b339a0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1fc74be7-19ba-f42b-1e8d-86447923b8a7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1ffef80b-0b82-08eb-dffb-16d5937421f2", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "214d0ca1-26b3-ff80-68b5-1af3fbbac2ce", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "23e9b73f-e1cf-cc40-7638-8deaa10c77fa", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "24561cc7-2db6-e582-605b-5a796c76b867", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "24603cc5-425e-8a46-ae3a-2d460df840fe", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2484715d-12f8-a016-af12-5612bfedc91e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "27d23241-d9ef-957b-9e98-d58bda254438", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2878a8b5-4306-f844-ef5a-4029eefdf22f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2992ae70-4a49-98e4-f2de-cbc4a8b7a7db", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2a948342-1daf-ac2f-33d3-329e2ca25e34", + "upstreamFields": [ + { + "name": "Overdue", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + }, + { + "name": "Number", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "2ab7f5aa-15ba-de8e-214a-4e0a27ee91fe", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2c95cb81-36f6-443f-6c99-ff001d2388f3", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2e2db482-1927-ba36-a782-8a95c01fdc7e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2f83f6ff-ffdc-07b0-40d8-cb7351c02b66", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2faad672-a1ff-95d1-67c9-2fd6bda9e8b9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "30bfdf30-6abc-a741-8563-c8a456e8f478", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "311d5263-73af-4578-0d62-f4b2f00396a7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "31c3f642-db9d-3d0c-4497-c61859e1f8b9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "339bd914-66f7-c3c9-e7a7-c45f25cb335a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3423b49b-03bb-6d3a-12c8-4e11778931e1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "34aac98d-e7a5-135b-622f-e6d35d84fae9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "35637b98-c1c1-1200-8815-f1a4c6a13afd", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "36fe7de3-5e0d-83e7-e08c-1c6f299552e1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "37daa6c3-f37b-94d7-f59d-116cef3f3444", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "38645dd2-5f4d-effc-a564-0054ba2e634b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3ac8f5aa-1260-dabf-c762-3ba52fdfc2c0", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + }, + { + "name": "Overdue", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + }, + { + "name": "Max Year?", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + }, + { + "name": "Number", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "3ad5f4e6-35be-0037-0e88-3da0136c081b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3ddaea33-73a5-7781-aee0-3f343dce3efd", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "42d00b7c-9983-8883-6b40-bdb2f47f1c35", + "upstreamFields": null, + "upstreamColumns": [] + }, + { + "id": "4448d754-db6b-6d41-1f80-f8d80ebd0664", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "45d50e09-2ec6-76b3-f2bf-80836f7e49e6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "45dd64b3-2fc5-7c5a-2ef8-684284efdeec", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "47c8a373-e098-0537-e220-013ae1b26dc7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "49a13936-1856-4a32-197f-13ed80b3ece5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4cb02fc2-cb2c-045f-994c-6c54d21626a5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4e844797-cf85-8239-dbac-4257822b3408", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4e9c3619-b42e-0452-dcaa-b5406e038c85", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4eae18fd-b114-7cf2-b8b6-31af6cea0b55", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "4f45c3ad-fc3b-afeb-6e9d-fb94b42051a9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "50879b60-d080-240f-2439-d15c4ca23cf0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "517cd761-a193-d8c1-c3db-93890bc7d27a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "53342557-60b2-51ea-a730-f38ad3dab715", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "536bc9ae-0f4b-5786-0b0d-691d8bc2b9e5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "54dfc86a-52b7-52b3-3af9-f18e070e56c8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5579f16c-8c12-36be-3ff8-1a4bc270f570", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5668180e-c0cd-dbde-661a-ff1fc6e93385", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "59214da6-732d-5691-5bb8-a81b4132fdd4", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5ae6724e-3a1d-a43c-9421-294f3f1bfb6c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5b478590-b0a9-c34c-faa2-2b7c7a61822f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5d54747d-81ac-f0fc-6320-2bc8b4ea592b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5dbafcd1-d8d2-68cc-fde3-20e8c7b26ff8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5e9aec72-f27e-7dce-fdb7-6b2d418ad785", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "606cc5eb-28b6-6b2e-9ec9-b4d2441323db", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "60bd0e06-5086-d8dc-a6e5-eff080d6a56d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "60c104d7-6b2c-1132-8a7b-28c1a05c2654", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "61eb7e5a-5931-0486-1e98-5e17ec92ed9c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "63090441-e641-21ba-66ae-a0ea3d83344c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "636235a9-4709-04e1-eef2-67ac7c194eb4", + "upstreamFields": [ + { + "name": "Number", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + }, + { + "name": "Active", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + }, + { + "name": "Closed", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + }, + { + "name": "Due date", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "66ac12ab-7cba-79fd-b013-72043161beea", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "66d18cb0-c3f0-ad8a-e15a-89563da02834", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "679172d5-d043-c8ff-d115-ef200d11ca72", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7029eb80-9d5f-b12e-40a4-adc7c9968daa", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7063be4c-713b-5d6c-25aa-ad98c5a8f7e9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "724a16a7-49a8-57bd-9ec6-fb5c777d83cf", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "72dc19f7-e551-1b35-ff53-b2bccbfa6bb9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "732bfc50-930a-7ac3-c088-680bad52bff0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "73c00bbc-f7a8-76da-a0bd-bb210b4929b8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "76723c78-1bea-73eb-80ad-1c6c2ff17a87", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "782ebad0-c62f-cbc8-0c22-5904aa50585b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "784b08a1-eb8c-d675-36b3-b316492e5b16", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "79767234-b173-544a-063d-821baa6a5df9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "79fad0d4-12c2-078d-c105-1ab1024e5b21", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7cc56151-90e8-98bb-4354-a514208bff4a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7eacd068-7e19-3dbc-dce0-d5089d3c35b8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7ecb2d1d-4dd0-e49b-c5d2-407bc5a7b08e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "81d9a76b-9a30-a2cc-3078-64c2bfc4f4b0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "837bda98-50c2-164b-665b-ba6e3a02ace3", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "85f313bb-fe2b-5ad7-0cdf-78a64a71fa27", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "86aa92af-853b-4d4e-35b0-21c6424e1735", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "86b35d25-952f-0881-7e62-a812a6e421ae", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "86b677e8-2841-1b59-d1b0-066d16d345c7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8a14e383-ee8e-4493-bfcd-a7238d11edf4", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8aef8cdb-0381-40e2-4efc-bb6a67c45652", + "upstreamFields": [ + { + "name": "Closed", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + }, + { + "name": "Opened", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "8b69c38c-8297-fb16-1e56-796f67864f60", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8be77673-bc23-ffc3-1958-21856a6d42bf", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8c6b7c63-54a0-46d3-8037-f2de8fa1d476", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8cc2a71d-49c7-fb56-f8f1-f4df94f83aa0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8de5c9d3-0c25-4ff6-1a84-0394bc36c57b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8df59f46-4e3b-aa77-0c74-35c93f844e75", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8e8947fd-7108-d528-44db-7657a1fb480c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "8ed7ee55-acb7-9064-da1c-80a20e706464", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "91f45936-daa1-6194-4fa8-1e135b053dd1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "93acf969-1638-980a-5c93-ac1c754d2831", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "941fbf6f-40e4-bfe8-d2ff-b016032ec6dd", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "965d754d-0bc7-06e4-1208-d146de93d6a1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9736203a-fc31-b052-3fc5-abf1afe22f18", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "984069c9-5366-622a-98bf-60c4ca3e0ff5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9a8a1e52-ae97-aee0-c2c9-a4ddf69b5ffc", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9b35c0be-0f76-63a1-445d-9872a1465154", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + }, + { + "name": "Overdue", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + }, + { + "name": "Active", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + }, + { + "name": "Max Year?", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + }, + { + "name": "Number", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "9d228629-7bd0-42df-3b44-b7900f4c1e48", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "9f81f19e-ce84-459e-ab09-b8e4e6677e98", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a0e000ab-dd73-f572-6a91-4ea2e1d2767d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a0f25adf-7399-e938-d5b2-96cec332c78d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a15c1a3a-4cce-f29b-22d7-3044c66da9e1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a17240cd-70c6-f680-007d-25e83f020daf", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a1a22d48-f456-97d0-c098-5fd70f09ff7f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a2bc54e9-6160-2cb6-d61e-4453051220d8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a3702e1d-995f-0cac-3577-7f3500927ed4", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a39e5386-f37e-8d1e-3e74-fc8857d5c08d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a3b1db00-20da-f6c3-85be-8b769d06db6c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a3cfeec0-84f3-6fda-f043-2a6da9598453", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a4cee743-4ff1-c3fc-e305-47ffa6ea9b4f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a788bc5b-010e-00c8-ef97-c112af3343af", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a7e61b7f-2247-0b9c-7da9-39297faadd8e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a93c6637-d961-ae0b-598e-fa8da75e62c2", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ac4e3607-473b-f643-6d23-8cf0c69c7530", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ad2cbb7c-aaad-12d3-36ef-179ff1cfa1ff", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "af59ec99-214e-e0df-22e2-901b24a2624c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b14c7e6b-bd65-5b11-a6a8-5b267a7b1260", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b22db38f-740d-2d76-b929-370248345099", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b28fcdc2-bcd6-42aa-4e64-f2b4b176324d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b30f2384-7e6f-f13e-f57b-f810985e7cd9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b31e32f3-3e3d-01f1-a54c-453aa77a3297", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b73460b5-51fe-5c8f-61b0-7e9da12244fa", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b880aec8-de45-999b-d664-588f4856c472", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "baa349ea-198a-29da-9dae-f10f31a12cad", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "bb459069-04ab-3bd8-a9ed-dc5573834a34", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "bd513be6-26ba-b62a-74bc-adab1fb6488c", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "bdd48dd3-e4e3-ef05-b63f-e2a6fbff3fd1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "bfb0ac8a-31a2-7024-45f3-49996be2df88", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c199dd42-7e3d-ee43-7497-5c878129a3aa", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c204f108-6aaa-1157-6649-c1e68bf42ad3", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c4f111b2-0b44-14c8-46ad-a2d5ffa99c39", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c5d5443a-e3d4-b1d5-484f-326d66905887", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c79ce6cd-b9dd-6734-e452-aeaca19e82bd", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c8cfca57-a823-37a7-4414-6d0b682a8024", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c958daf4-da7c-229e-390c-f1d81c6dde2a", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c988934d-d4a5-3b7c-83e8-b383a8f8419b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c9beabbf-d9d4-56a1-09d1-a8a0be3078cc", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ca51fe9b-f1e4-f6f9-ee9e-2961a3fd0ac9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ca52cc66-4c1b-83ea-41b1-bc14348096b8", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cb8052a6-0871-69b3-b212-62b7c74bf205", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cbd71d39-25b7-3854-6fac-6fa834cce1ee", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cbfef2b1-a95c-02e9-4c5e-c162e84d7341", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cd1619c4-dd7a-fa47-e171-78e7ddb57879", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cd5bb434-957d-79da-2438-89161a10c0f6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cf6943b4-a34c-1fcd-f032-a09219619d29", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cf931c80-aa6a-9a08-26f2-f0bf383fa918", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d2678e95-9a3b-ae61-a30e-a4fc3ce9985d", + "upstreamFields": [ + { + "name": "Opened", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "d2753f51-27e6-bd3c-d86f-c1ac5056f743", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d3a25e7f-4a67-7985-0fad-5325a221613d", + "upstreamFields": null, + "upstreamColumns": [] + }, + { + "id": "d451fb73-04ee-6e91-2b5e-7a619ec49318", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d487e44d-11ff-6c48-9c12-9a94f368e2e4", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d5384062-e552-923e-a612-ca291854b4ca", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d5e37fc7-6a27-f00d-492b-5a04b3aa853e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d5f83f0b-2b83-3723-f0f2-210beaf4ebc9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "da02b984-48fa-76e6-061c-b1462813432b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "da62c9c2-0ca6-a8ab-e518-3fe3959983ba", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "db0bf429-31ae-7a84-7016-343e9631f0cb", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "dc36513d-648a-03f4-6983-d60b911212ea", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "dfcd0d64-ca18-e181-bd07-a2a2528ea65b", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e0e4e50f-5bbc-9b6c-b61c-18c3bead6985", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e107947e-cc43-8d74-bef5-1219b6f26acc", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e2d64ef4-51dd-351b-1a41-34c331438b03", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e2f0512c-5ae3-b551-c540-7f7e9d4e2891", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e3fbc2ec-3c5f-fd89-fee7-a7018f62b8f9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "e8f1f323-2a8a-9f76-a6f1-1b9475149bbb", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "eb75ad3f-7e12-c6b7-816f-f0cc036587d0", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ebd98cba-b969-ab25-a1ec-f9e699259ea5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ed27d249-10e9-e6ab-7d4d-2b804e8c1969", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f1e27f80-b699-f683-cf3b-0ebc53d0dfe2", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f26d57ca-a698-b5e8-b254-65cf3de14a98", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f3298925-2b95-aa53-b2aa-f83feee7a83f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f49bdb6d-26a4-56c1-319c-ecdff5632164", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f59d94c1-f580-0384-8272-ac4be3edd163", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f5f1f0a8-580d-c862-bad4-f0e50aa3f8bc", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f6a05d7e-6f18-f9c7-a424-3f1742a16167", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f92f9515-c6c9-e857-438f-3f4103e34c09", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f97631bf-8375-1560-7883-278f9d6b53fc", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f97fd94e-f5d6-8f68-457b-dfacd40fd7f9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "fba5a588-b3aa-6033-e01c-0bcd4554f3f1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "fbd3c962-218c-de6d-a11c-da9e2e249f16", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "fc35b28d-0112-dbd0-960e-8d1a6d3bf2be", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "fc7a1dae-abc6-8574-b17e-d996e4f57bb9", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "fc82ee6e-5518-0b99-5a3e-f11320190dc2", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "fd5c51a2-8000-9c11-f3f7-b3b8eae0b50e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "ff51c0e0-4b09-ab90-9dca-6b7c9de8f135", + "upstreamFields": [ + { + "name": "Time to Close an Incident (seconds)", + "datasource": { + "id": "dfe2c02a-54b7-f7a2-39fc-c651da2f6ad8" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "ff85fc4f-2886-a45a-1e12-e5f0aa87abd2", + "upstreamFields": [], + "upstreamColumns": [] + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": null + }, + "totalCount": 8 + } + } +} \ No newline at end of file diff --git a/metadata-ingestion/tests/integration/tableau/setup/publishedDatasourcesConnection_all.json b/metadata-ingestion/tests/integration/tableau/setup/publishedDatasourcesConnection_all.json index 93ce61e6d4fa4..4f7812466439b 100644 --- a/metadata-ingestion/tests/integration/tableau/setup/publishedDatasourcesConnection_all.json +++ b/metadata-ingestion/tests/integration/tableau/setup/publishedDatasourcesConnection_all.json @@ -5,7 +5,7 @@ { "__typename": "PublishedDatasource", "id": "00cce29f-b561-bb41-3557-8e19660bb5dd", - "luid":"ffd72f16-004a-4a7d-8f5b-a8fd18d4317d", + "luid": "ffd72f16-004a-4a7d-8f5b-a8fd18d4317d", "name": "test publish datasource", "hasExtracts": false, "extractLastRefreshTime": null, @@ -40,7 +40,7 @@ "fullName": "customer", "connectionType": "postgres", "description": "", - "columnsConnection": { + "columnsConnection": { "totalCount": 0 } }, @@ -79,17 +79,7 @@ "role": "DIMENSION", "dataType": "DATETIME", "defaultFormat": null, - "aggregation": "Year", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "payment_date", - "table": { - "__typename": "CustomSQLTable", - "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" - } - } - ] + "aggregation": "Year" }, { "__typename": "ColumnField", @@ -102,17 +92,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": "Count", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "staff_first_name", - "table": { - "__typename": "CustomSQLTable", - "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" - } - } - ] + "aggregation": "Count" }, { "__typename": "ColumnField", @@ -125,17 +105,7 @@ "role": "MEASURE", "dataType": "INTEGER", "defaultFormat": null, - "aggregation": "Sum", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "customer_id", - "table": { - "__typename": "CustomSQLTable", - "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" - } - } - ] + "aggregation": "Sum" }, { "__typename": "ColumnField", @@ -148,17 +118,7 @@ "role": "MEASURE", "dataType": "REAL", "defaultFormat": null, - "aggregation": "Sum", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "amount", - "table": { - "__typename": "CustomSQLTable", - "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" - } - } - ] + "aggregation": "Sum" }, { "__typename": "ColumnField", @@ -171,8 +131,7 @@ "role": "MEASURE", "dataType": "TABLE", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -185,17 +144,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": "Count", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "customer_last_name", - "table": { - "__typename": "CustomSQLTable", - "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" - } - } - ] + "aggregation": "Count" }, { "__typename": "ColumnField", @@ -208,17 +157,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": "Count", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "customer_first_name", - "table": { - "__typename": "CustomSQLTable", - "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" - } - } - ] + "aggregation": "Count" }, { "__typename": "ColumnField", @@ -231,17 +170,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": "Count", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "staff_last_name", - "table": { - "__typename": "CustomSQLTable", - "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" - } - } - ] + "aggregation": "Count" } ], "upstreamDatasources": [], @@ -295,7 +224,7 @@ "fullName": "[People$]", "connectionType": "excel-direct", "description": "", - "columnsConnection": { + "columnsConnection": { "totalCount": 2 } }, @@ -309,7 +238,7 @@ "fullName": "[Returns$]", "connectionType": "excel-direct", "description": "", - "columnsConnection": { + "columnsConnection": { "totalCount": 2 } }, @@ -323,9 +252,9 @@ "fullName": "[Orders$]", "connectionType": "excel-direct", "description": "", - "columnsConnection": { + "columnsConnection": { "totalCount": 21 - } + } } ], "fields": [ @@ -335,15 +264,7 @@ "name": "Top Customers by Profit", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Profit", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "ColumnField", @@ -356,8 +277,7 @@ "role": "MEASURE", "dataType": "TABLE", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -370,17 +290,7 @@ "role": "DIMENSION", "dataType": "STRING", "defaultFormat": null, - "aggregation": "Count", - "upstreamFields": [], - "upstreamColumns": [ - { - "name": "Segment", - "table": { - "__typename":"DatabaseTable", - "id": "b0e0c3eb-6e53-e0f5-ded1-478d5d9f7281" - } - } - ] + "aggregation": "Count" }, { "__typename": "CalculatedField", @@ -393,21 +303,7 @@ "dataType": "REAL", "defaultFormat": null, "aggregation": null, - "formula": "SUM([Profit])/SUM([Sales])", - "upstreamFields": [ - { - "name": "Profit", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - }, - { - "name": "Sales", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "formula": "SUM([Profit])/SUM([Sales])" }, { "__typename": "ColumnField", @@ -421,7 +317,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "upstreamFields": [], "columns": [ { "name": "City", @@ -443,7 +338,6 @@ "dataType": "REAL", "defaultFormat": null, "aggregation": null, - "upstreamFields": [], "columns": [ { "name": "Profit", @@ -465,7 +359,6 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": "Sum", - "upstreamFields": [], "columns": [ { "table": {} @@ -484,7 +377,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": "Count", - "upstreamFields": [], "columns": [ { "table": {} @@ -503,7 +395,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": "Count", - "upstreamFields": [], "columns": [ { "table": {} @@ -522,7 +413,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "upstreamFields": [], "columns": [ { "table": {} @@ -540,8 +430,7 @@ "role": "MEASURE", "dataType": "TABLE", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -555,7 +444,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "upstreamFields": [], "columns": [ { "table": {} @@ -568,15 +456,7 @@ "name": "Profit (bin)", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Profit", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "ColumnField", @@ -590,7 +470,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "upstreamFields": [], "columns": [ { "table": {} @@ -609,7 +488,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": "Count", - "upstreamFields": [], "columns": [ { "table": {} @@ -628,7 +506,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": "Count", - "upstreamFields": [], "columns": [ { "table": {} @@ -647,7 +524,6 @@ "dataType": "INTEGER", "defaultFormat": "*00000", "aggregation": "Sum", - "upstreamFields": [], "columns": [ { "table": {} @@ -660,33 +536,7 @@ "name": "Product", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "Category", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - }, - { - "name": "Sub-Category", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - }, - { - "name": "Manufacturer", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - }, - { - "name": "Product Name", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "ColumnField", @@ -700,7 +550,6 @@ "dataType": "DATE", "defaultFormat": null, "aggregation": "Year", - "upstreamFields": [], "columns": [ { "table": {} @@ -713,39 +562,7 @@ "name": "Location", "description": null, "isHidden": false, - "folderName": null, - "upstreamFields": [ - { - "name": "City", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - }, - { - "name": "Postal Code", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - }, - { - "name": "Country/Region", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - }, - { - "name": "Region", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - }, - { - "name": "State", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "folderName": null }, { "__typename": "ColumnField", @@ -758,8 +575,7 @@ "role": "MEASURE", "dataType": "TABLE", "defaultFormat": null, - "aggregation": null, - "upstreamFields": [] + "aggregation": null }, { "__typename": "ColumnField", @@ -773,7 +589,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "upstreamFields": [], "columns": [ { "table": {} @@ -792,7 +607,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "upstreamFields": [], "columns": [ { "table": {} @@ -811,7 +625,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "upstreamFields": [], "columns": [ { "table": {} @@ -830,7 +643,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": "Count", - "upstreamFields": [], "columns": [ { "table": {} @@ -849,7 +661,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": "Count", - "upstreamFields": [], "columns": [ { "table": {} @@ -868,7 +679,6 @@ "dataType": "REAL", "defaultFormat": null, "aggregation": "Sum", - "upstreamFields": [], "columns": [ { "table": {} @@ -887,7 +697,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "upstreamFields": [], "columns": [ { "table": {} @@ -906,7 +715,6 @@ "dataType": "INTEGER", "defaultFormat": null, "aggregation": null, - "upstreamFields": [], "columns": [ { "table": {} @@ -921,15 +729,7 @@ "isHidden": false, "folderName": null, "role": "DIMENSION", - "dataType": "STRING", - "upstreamFields": [ - { - "name": "Sub-Category", - "datasource": { - "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" - } - } - ] + "dataType": "STRING" }, { "__typename": "ColumnField", @@ -943,7 +743,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "upstreamFields": [], "columns": [ { "table": {} @@ -962,7 +761,6 @@ "dataType": "REAL", "defaultFormat": null, "aggregation": "Sum", - "upstreamFields": [], "columns": [ { "table": {} @@ -981,7 +779,6 @@ "dataType": "DATE", "defaultFormat": null, "aggregation": "Year", - "upstreamFields": [], "columns": [ { "table": {} @@ -1000,7 +797,6 @@ "dataType": "STRING", "defaultFormat": null, "aggregation": null, - "upstreamFields": [], "columns": [ { "table": {} diff --git a/metadata-ingestion/tests/integration/tableau/setup/publishedDatasourcesFieldUpstream_17139d6e97ae_all.json b/metadata-ingestion/tests/integration/tableau/setup/publishedDatasourcesFieldUpstream_17139d6e97ae_all.json new file mode 100644 index 0000000000000..8527f31560dea --- /dev/null +++ b/metadata-ingestion/tests/integration/tableau/setup/publishedDatasourcesFieldUpstream_17139d6e97ae_all.json @@ -0,0 +1,281 @@ +{ + "data": { + "fieldsConnection": { + "nodes": [ + { + "id": "0749f75a-cc58-e1fd-ba66-d2d2b9dbe2cb", + "upstreamFields": [ + { + "name": "Profit", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "0e2c4d41-12b9-fbd4-d4e0-463c165ecb29", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "0e75ad46-7474-6e02-6d1b-20781db40587", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "Segment", + "table": { + "__typename": "DatabaseTable", + "id": "b0e0c3eb-6e53-e0f5-ded1-478d5d9f7281" + } + } + ] + }, + { + "id": "11242a9a-c161-754c-bdcc-fdc22bfce2b2", + "upstreamFields": [ + { + "name": "Profit", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + }, + { + "name": "Sales", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "18f817fa-a4df-6dfe-98c0-ffdce9f6cdc5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1a63d0cd-0b37-3dea-b171-8893a9fb1417", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "1a6595e6-5eac-1f32-4d8b-dd0569b4e827", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "204a2d38-c144-f946-b426-ee66ef3eb492", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "2e0aa617-9d3d-15db-3597-17b8ccda2381", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "345f239e-1dd0-30fb-8ed4-103810a0b7cc", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "3cc344da-0d30-75a8-1364-a14a1a93350d", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "53ef59b0-7f59-55fb-ead0-4232a8be86d7", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "5b043b44-cbe5-fd3b-2022-7e14f400e11d", + "upstreamFields": [ + { + "name": "Profit", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "60dae0c9-0b36-ead5-977a-07dc049dbd57", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "695e65cb-0c30-fb94-0f09-2323fd88f0fa", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "6c1c7e77-731b-045d-69e9-af6c3c30ac99", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7ba23f14-240b-517d-bffc-e603d6874f29", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "7e40e9c2-8da8-d0c4-6a18-8fade009f33b", + "upstreamFields": [ + { + "name": "Category", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + }, + { + "name": "Sub-Category", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + }, + { + "name": "Manufacturer", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + }, + { + "name": "Product Name", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "8c6d612c-ce53-29d5-3754-9508ca139d1f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "a0900626-117b-25bb-104d-e7e4272f6e0a", + "upstreamFields": [ + { + "name": "City", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + }, + { + "name": "Postal Code", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + }, + { + "name": "Country/Region", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + }, + { + "name": "Region", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + }, + { + "name": "State", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "a443959b-f9a4-d0fb-4900-28eaa3a4b88e", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "aa1a9b8f-2fbc-53f4-2e6b-1f7257d28f74", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "acd7abc3-db70-a36f-6f75-2bf28eb6cff1", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b0011709-ba93-895c-6f49-0e3f5548c96f", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "c96df737-f0d7-5e5e-ac09-9149435647fa", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cc070953-68a0-ed87-82be-221c0d93f943", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cd6063c2-58b4-619a-4229-accea19f5189", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "cfcbc551-00d3-c773-3d68-5cafabc95b61", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d6e46283-01fe-cfd1-ee25-be4c9ea985c6", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "d96dc3eb-5bc7-6c7e-4fed-edffb1de00f2", + "upstreamFields": [ + { + "name": "Sub-Category", + "datasource": { + "id": "6cbbeeb2-9f3a-00f6-2342-17139d6e97ae" + } + } + ], + "upstreamColumns": [] + }, + { + "id": "db0ddcfe-7c23-7031-f774-bfd1eb5dffa5", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f04ff107-5ddb-375d-c1d0-34e65406c841", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "f4c6a79d-05e4-b7ab-22a5-f667b7c708bb", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "fd261ef6-c698-900c-fe37-6694ba107367", + "upstreamFields": [], + "upstreamColumns": [] + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": null + }, + "totalCount": 8 + } + } +} \ No newline at end of file diff --git a/metadata-ingestion/tests/integration/tableau/setup/publishedDatasourcesFieldUpstream_8e19660bb5dd_all.json b/metadata-ingestion/tests/integration/tableau/setup/publishedDatasourcesFieldUpstream_8e19660bb5dd_all.json new file mode 100644 index 0000000000000..14cca1e4ba49f --- /dev/null +++ b/metadata-ingestion/tests/integration/tableau/setup/publishedDatasourcesFieldUpstream_8e19660bb5dd_all.json @@ -0,0 +1,109 @@ +{ + "data": { + "fieldsConnection": { + "nodes": [ + { + "id": "0fe30270-b1b9-9310-3c16-520b2a4824cb", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "payment_date", + "table": { + "__typename": "CustomSQLTable", + "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" + } + } + ] + }, + { + "id": "2b8a4156-7554-9ec1-a5ba-3316ab7d4ee2", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "staff_first_name", + "table": { + "__typename": "CustomSQLTable", + "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" + } + } + ] + }, + { + "id": "740b3cfe-ff17-c957-1e1b-f322d61f9b25", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "customer_id", + "table": { + "__typename": "CustomSQLTable", + "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" + } + } + ] + }, + { + "id": "9481e156-2775-f5fa-5aa3-be174224d4fb", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "amount", + "table": { + "__typename": "CustomSQLTable", + "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" + } + } + ] + }, + { + "id": "b2e77a9b-8961-0637-0907-940a5fcfb643", + "upstreamFields": [], + "upstreamColumns": [] + }, + { + "id": "b950a9fd-ddb8-2a1d-ddbe-91000a3953e1", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "customer_last_name", + "table": { + "__typename": "CustomSQLTable", + "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" + } + } + ] + }, + { + "id": "ca23efe0-5a93-344a-3f69-ec777ee1b318", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "customer_first_name", + "table": { + "__typename": "CustomSQLTable", + "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" + } + } + ] + }, + { + "id": "cab66386-799c-d9b6-812b-d3931b626f3b", + "upstreamFields": [], + "upstreamColumns": [ + { + "name": "staff_last_name", + "table": { + "__typename": "CustomSQLTable", + "id": "4fb670d5-3e19-9656-e684-74aa9729cf18" + } + } + ] + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": null + }, + "totalCount": 8 + } + } +} \ No newline at end of file diff --git a/metadata-ingestion/tests/integration/tableau/test_tableau_ingest.py b/metadata-ingestion/tests/integration/tableau/test_tableau_ingest.py index 0891a1e0cd593..4be39f02757ba 100644 --- a/metadata-ingestion/tests/integration/tableau/test_tableau_ingest.py +++ b/metadata-ingestion/tests/integration/tableau/test_tableau_ingest.py @@ -20,13 +20,13 @@ from datahub.configuration.source_common import DEFAULT_ENV from datahub.emitter.mce_builder import make_schema_field_urn from datahub.ingestion.run.pipeline import Pipeline, PipelineContext -from datahub.ingestion.source.tableau import ( +from datahub.ingestion.source.tableau.tableau import ( TableauConfig, TableauSiteSource, TableauSource, TableauSourceReport, ) -from datahub.ingestion.source.tableau_common import ( +from datahub.ingestion.source.tableau.tableau_common import ( TableauLineageOverrides, TableauUpstreamReference, ) @@ -86,7 +86,7 @@ def enable_logging(): logging.getLogger().setLevel(logging.DEBUG) -def read_response(pytestconfig, file_name): +def read_response(file_name): response_json_path = f"{test_resources_dir}/setup/{file_name}" with open(response_json_path) as file: data = json.loads(file.read()) @@ -285,7 +285,7 @@ def tableau_ingest_common( ) as mock_checkpoint: mock_checkpoint.return_value = mock_datahub_graph - with mock.patch("datahub.ingestion.source.tableau.Server") as mock_sdk: + with mock.patch("datahub.ingestion.source.tableau.tableau.Server") as mock_sdk: mock_sdk.return_value = mock_sdk_client( side_effect_query_metadata_response=side_effect_query_metadata_response, datasources_side_effect=datasources_side_effect, @@ -331,14 +331,25 @@ def test_tableau_ingest(pytestconfig, tmp_path, mock_datahub_graph): tableau_ingest_common( pytestconfig, tmp_path, - [ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), + [ # sequence of json file matters. They are arranged as per graphql api call + read_response("workbooksConnection_all.json"), + read_response("sheetsConnection_all.json"), + read_response("dashboardsConnection_all.json"), + read_response("embeddedDatasourcesConnection_all.json"), + read_response("embeddedDatasourcesFieldUpstream_a561c7beccd3_all.json"), + read_response("embeddedDatasourcesFieldUpstream_04ed1dcc7090_all.json"), + read_response("embeddedDatasourcesFieldUpstream_6f5f4cc0b6c6_all.json"), + read_response("embeddedDatasourcesFieldUpstream_69eb47587cc2_all.json"), + read_response("embeddedDatasourcesFieldUpstream_a0fced25e056_all.json"), + read_response("embeddedDatasourcesFieldUpstream_1570e7f932f6_all.json"), + read_response("embeddedDatasourcesFieldUpstream_c651da2f6ad8_all.json"), + read_response("embeddedDatasourcesFieldUpstream_26675da44a38_all.json"), + read_response("embeddedDatasourcesFieldUpstream_bda46be068e3_all.json"), + read_response("publishedDatasourcesConnection_all.json"), + read_response("publishedDatasourcesFieldUpstream_8e19660bb5dd_all.json"), + read_response("publishedDatasourcesFieldUpstream_17139d6e97ae_all.json"), + read_response("customSQLTablesConnection_all.json"), + read_response("databaseTablesConnection_all.json"), ], golden_file_name, output_file_name, @@ -350,7 +361,7 @@ def test_tableau_ingest(pytestconfig, tmp_path, mock_datahub_graph): @freeze_time(FROZEN_TIME) @pytest.mark.integration def test_tableau_test_connection_success(): - with mock.patch("datahub.ingestion.source.tableau.Server"): + with mock.patch("datahub.ingestion.source.tableau.tableau.Server"): report = test_connection_helpers.run_test_connection( TableauSource, config_source_default ) @@ -366,6 +377,29 @@ def test_tableau_test_connection_failure(): test_connection_helpers.assert_basic_connectivity_failure(report, "Unable to login") +def mock_data() -> List[dict]: + return [ + read_response("workbooksConnection_all.json"), + read_response("sheetsConnection_all.json"), + read_response("dashboardsConnection_all.json"), + read_response("embeddedDatasourcesConnection_all.json"), + read_response("embeddedDatasourcesFieldUpstream_a561c7beccd3_all.json"), + read_response("embeddedDatasourcesFieldUpstream_04ed1dcc7090_all.json"), + read_response("embeddedDatasourcesFieldUpstream_6f5f4cc0b6c6_all.json"), + read_response("embeddedDatasourcesFieldUpstream_69eb47587cc2_all.json"), + read_response("embeddedDatasourcesFieldUpstream_a0fced25e056_all.json"), + read_response("embeddedDatasourcesFieldUpstream_1570e7f932f6_all.json"), + read_response("embeddedDatasourcesFieldUpstream_c651da2f6ad8_all.json"), + read_response("embeddedDatasourcesFieldUpstream_26675da44a38_all.json"), + read_response("embeddedDatasourcesFieldUpstream_bda46be068e3_all.json"), + read_response("publishedDatasourcesConnection_all.json"), + read_response("publishedDatasourcesFieldUpstream_8e19660bb5dd_all.json"), + read_response("publishedDatasourcesFieldUpstream_17139d6e97ae_all.json"), + read_response("customSQLTablesConnection_all.json"), + read_response("databaseTablesConnection_all.json"), + ] + + @freeze_time(FROZEN_TIME) @pytest.mark.integration def test_tableau_cll_ingest(pytestconfig, tmp_path, mock_datahub_graph): @@ -384,15 +418,7 @@ def test_tableau_cll_ingest(pytestconfig, tmp_path, mock_datahub_graph): tableau_ingest_common( pytestconfig=pytestconfig, tmp_path=tmp_path, - side_effect_query_metadata_response=[ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - ], + side_effect_query_metadata_response=mock_data(), golden_file_name=golden_file_name, output_file_name=output_file_name, mock_datahub_graph=mock_datahub_graph, @@ -416,15 +442,7 @@ def test_project_pattern(pytestconfig, tmp_path, mock_datahub_graph): tableau_ingest_common( pytestconfig, tmp_path, - [ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - ], + mock_data(), golden_file_name, output_file_name, mock_datahub_graph, @@ -448,15 +466,7 @@ def test_project_path_pattern(pytestconfig, tmp_path, mock_datahub_graph): tableau_ingest_common( pytestconfig, tmp_path, - [ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - ], + mock_data(), golden_file_name, output_file_name, mock_datahub_graph, @@ -481,15 +491,7 @@ def test_project_hierarchy(pytestconfig, tmp_path, mock_datahub_graph): tableau_ingest_common( pytestconfig, tmp_path, - [ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - ], + mock_data(), golden_file_name, output_file_name, mock_datahub_graph, @@ -513,15 +515,7 @@ def test_extract_all_project(pytestconfig, tmp_path, mock_datahub_graph): tableau_ingest_common( pytestconfig, tmp_path, - [ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - ], + mock_data(), golden_file_name, output_file_name, mock_datahub_graph, @@ -544,15 +538,7 @@ def test_value_error_projects_and_project_pattern( tableau_ingest_common( pytestconfig, tmp_path, - [ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - ], + mock_data(), golden_file_name, output_file_name, mock_datahub_graph, @@ -603,15 +589,7 @@ def test_tableau_ingest_with_platform_instance( tableau_ingest_common( pytestconfig, tmp_path, - [ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - ], + mock_data(), golden_file_name, output_file_name, mock_datahub_graph, @@ -718,15 +696,7 @@ def test_tableau_stateful(pytestconfig, tmp_path, mock_time, mock_datahub_graph) pipeline_run1 = tableau_ingest_common( pytestconfig, tmp_path, - [ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - ], + mock_data(), golden_file_name, output_file_name, mock_datahub_graph, @@ -740,7 +710,7 @@ def test_tableau_stateful(pytestconfig, tmp_path, mock_time, mock_datahub_graph) pipeline_run2 = tableau_ingest_common( pytestconfig, tmp_path, - [read_response(pytestconfig, "workbooksConnection_all_stateful.json")], + [read_response("workbooksConnection_all_stateful.json")], golden_file_deleted_name, output_file_deleted_name, mock_datahub_graph, @@ -885,15 +855,7 @@ def test_tableau_signout_timeout(pytestconfig, tmp_path, mock_datahub_graph): tableau_ingest_common( pytestconfig, tmp_path, - [ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - ], + mock_data(), golden_file_name, output_file_name, mock_datahub_graph, @@ -1003,15 +965,7 @@ def test_get_all_datasources_failure(pytestconfig, tmp_path, mock_datahub_graph) tableau_ingest_common( pytestconfig, tmp_path, - [ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - ], + mock_data(), golden_file_name, output_file_name, mock_datahub_graph, @@ -1037,20 +991,42 @@ def test_tableau_ingest_multiple_sites(pytestconfig, tmp_path, mock_datahub_grap pytestconfig=pytestconfig, tmp_path=tmp_path, side_effect_query_metadata_response=[ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), + read_response("workbooksConnection_all.json"), + read_response("sheetsConnection_all.json"), + read_response("dashboardsConnection_all.json"), + read_response("embeddedDatasourcesConnection_all.json"), + read_response("embeddedDatasourcesFieldUpstream_a561c7beccd3_all.json"), + read_response("embeddedDatasourcesFieldUpstream_04ed1dcc7090_all.json"), + read_response("embeddedDatasourcesFieldUpstream_6f5f4cc0b6c6_all.json"), + read_response("embeddedDatasourcesFieldUpstream_69eb47587cc2_all.json"), + read_response("embeddedDatasourcesFieldUpstream_a0fced25e056_all.json"), + read_response("embeddedDatasourcesFieldUpstream_1570e7f932f6_all.json"), + read_response("embeddedDatasourcesFieldUpstream_c651da2f6ad8_all.json"), + read_response("embeddedDatasourcesFieldUpstream_26675da44a38_all.json"), + read_response("embeddedDatasourcesFieldUpstream_bda46be068e3_all.json"), + read_response("publishedDatasourcesConnection_all.json"), + read_response("publishedDatasourcesFieldUpstream_8e19660bb5dd_all.json"), + read_response("publishedDatasourcesFieldUpstream_17139d6e97ae_all.json"), + read_response("customSQLTablesConnection_all.json"), + read_response("databaseTablesConnection_all.json"), + read_response("workbooksConnection_all.json"), + read_response("sheetsConnection_all.json"), + read_response("dashboardsConnection_all.json"), + read_response("embeddedDatasourcesConnection_all.json"), + read_response("embeddedDatasourcesFieldUpstream_a561c7beccd3_all.json"), + read_response("embeddedDatasourcesFieldUpstream_04ed1dcc7090_all.json"), + read_response("embeddedDatasourcesFieldUpstream_6f5f4cc0b6c6_all.json"), + read_response("embeddedDatasourcesFieldUpstream_69eb47587cc2_all.json"), + read_response("embeddedDatasourcesFieldUpstream_a0fced25e056_all.json"), + read_response("embeddedDatasourcesFieldUpstream_1570e7f932f6_all.json"), + read_response("embeddedDatasourcesFieldUpstream_c651da2f6ad8_all.json"), + read_response("embeddedDatasourcesFieldUpstream_26675da44a38_all.json"), + read_response("embeddedDatasourcesFieldUpstream_bda46be068e3_all.json"), + read_response("publishedDatasourcesConnection_all.json"), + read_response("publishedDatasourcesFieldUpstream_8e19660bb5dd_all.json"), + read_response("publishedDatasourcesFieldUpstream_17139d6e97ae_all.json"), + read_response("customSQLTablesConnection_all.json"), + read_response("databaseTablesConnection_all.json"), ], golden_file_name=golden_file_name, output_file_name=output_file_name, @@ -1075,15 +1051,7 @@ def test_tableau_ingest_sites_as_container(pytestconfig, tmp_path, mock_datahub_ tableau_ingest_common( pytestconfig=pytestconfig, tmp_path=tmp_path, - side_effect_query_metadata_response=[ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - ], + side_effect_query_metadata_response=mock_data(), golden_file_name=golden_file_name, output_file_name=output_file_name, mock_datahub_graph=mock_datahub_graph, @@ -1107,15 +1075,7 @@ def test_site_name_pattern(pytestconfig, tmp_path, mock_datahub_graph): tableau_ingest_common( pytestconfig, tmp_path, - [ - read_response(pytestconfig, "workbooksConnection_all.json"), - read_response(pytestconfig, "sheetsConnection_all.json"), - read_response(pytestconfig, "dashboardsConnection_all.json"), - read_response(pytestconfig, "embeddedDatasourcesConnection_all.json"), - read_response(pytestconfig, "publishedDatasourcesConnection_all.json"), - read_response(pytestconfig, "customSQLTablesConnection_all.json"), - read_response(pytestconfig, "databaseTablesConnection_all.json"), - ], + mock_data(), golden_file_name, output_file_name, mock_datahub_graph, @@ -1134,10 +1094,10 @@ def test_permission_mode_switched_error(pytestconfig, tmp_path, mock_datahub_gra ) as mock_checkpoint: mock_checkpoint.return_value = mock_datahub_graph - with mock.patch("datahub.ingestion.source.tableau.Server") as mock_sdk: + with mock.patch("datahub.ingestion.source.tableau.tableau.Server") as mock_sdk: mock_sdk.return_value = mock_sdk_client( side_effect_query_metadata_response=[ - read_response(pytestconfig, "permission_mode_switched_error.json") + read_response("permission_mode_switched_error.json") ], sign_out_side_effect=[{}], datasources_side_effect=[{}], @@ -1157,6 +1117,7 @@ def test_permission_mode_switched_error(pytestconfig, tmp_path, mock_datahub_gra query=mock.MagicMock(), connection_type=mock.MagicMock(), query_filter=mock.MagicMock(), + current_cursor=None, retries_remaining=1, ) diff --git a/metadata-ingestion/tests/unit/sql_parsing/goldens/test_bigquery_view_from_union.json b/metadata-ingestion/tests/unit/sql_parsing/goldens/test_bigquery_view_from_union.json index 6d41e1285a387..7f57e02b7b2db 100644 --- a/metadata-ingestion/tests/unit/sql_parsing/goldens/test_bigquery_view_from_union.json +++ b/metadata-ingestion/tests/unit/sql_parsing/goldens/test_bigquery_view_from_union.json @@ -3,7 +3,7 @@ "query_type_props": { "kind": "VIEW" }, - "query_fingerprint": "e947f7884942bae354b9f90cdb649c01efd85ab9fddf830b0bec194c22652639", + "query_fingerprint": "3c811a0b47858c50d1c8f666644986a3d9f4522c3f084249656af345741da690", "in_tables": [ "urn:li:dataset:(urn:li:dataPlatform:bigquery,my_project_2.my_dataset_2.sometable,PROD)", "urn:li:dataset:(urn:li:dataPlatform:bigquery,my_project_2.my_dataset_2.sometable2,PROD)" @@ -59,6 +59,6 @@ ], "debug_info": { "confidence": 0.4, - "generalized_statement": "CREATE VIEW my_view AS SELECT * FROM my_project_2.my_dataset_2.sometable UNION DISTINCT SELECT * FROM my_project_2.my_dataset_2.sometable2 AS a" + "generalized_statement": "CREATE VIEW my_view AS SELECT * FROM my_project_2.my_dataset_2.sometable UNION ALL SELECT * FROM my_project_2.my_dataset_2.sometable2 AS a" } } \ No newline at end of file diff --git a/metadata-ingestion/tests/unit/sql_parsing/test_sql_aggregator.py b/metadata-ingestion/tests/unit/sql_parsing/test_sql_aggregator.py index 2e15dabb10d11..c730b4ee35e55 100644 --- a/metadata-ingestion/tests/unit/sql_parsing/test_sql_aggregator.py +++ b/metadata-ingestion/tests/unit/sql_parsing/test_sql_aggregator.py @@ -10,6 +10,7 @@ from datahub.metadata.urns import CorpUserUrn, DatasetUrn from datahub.sql_parsing.sql_parsing_aggregator import ( KnownQueryLineageInfo, + ObservedQuery, QueryLogSetting, SqlParsingAggregator, ) @@ -41,9 +42,11 @@ def test_basic_lineage(pytestconfig: pytest.Config, tmp_path: pathlib.Path) -> N ) aggregator.add_observed_query( - query="create table foo as select a, b from bar", - default_db="dev", - default_schema="public", + ObservedQuery( + query="create table foo as select a, b from bar", + default_db="dev", + default_schema="public", + ) ) mcps = list(aggregator.gen_metadata()) @@ -82,16 +85,20 @@ def test_overlapping_inserts(pytestconfig: pytest.Config) -> None: ) aggregator.add_observed_query( - query="insert into downstream (a, b) select a, b from upstream1", - default_db="dev", - default_schema="public", - query_timestamp=_ts(20), + ObservedQuery( + query="insert into downstream (a, b) select a, b from upstream1", + default_db="dev", + default_schema="public", + timestamp=_ts(20), + ) ) aggregator.add_observed_query( - query="insert into downstream (a, c) select a, c from upstream2", - default_db="dev", - default_schema="public", - query_timestamp=_ts(25), + ObservedQuery( + query="insert into downstream (a, c) select a, c from upstream2", + default_db="dev", + default_schema="public", + timestamp=_ts(25), + ) ) mcps = list(aggregator.gen_metadata()) @@ -118,28 +125,36 @@ def test_temp_table(pytestconfig: pytest.Config) -> None: ) aggregator.add_observed_query( - query="create table foo as select a, 2*b as b from bar", - default_db="dev", - default_schema="public", - session_id="session1", + ObservedQuery( + query="create table foo as select a, 2*b as b from bar", + default_db="dev", + default_schema="public", + session_id="session1", + ) ) aggregator.add_observed_query( - query="create temp table foo as select a, b+c as c from bar", - default_db="dev", - default_schema="public", - session_id="session2", + ObservedQuery( + query="create temp table foo as select a, b+c as c from bar", + default_db="dev", + default_schema="public", + session_id="session2", + ) ) aggregator.add_observed_query( - query="create table foo_session2 as select * from foo", - default_db="dev", - default_schema="public", - session_id="session2", + ObservedQuery( + query="create table foo_session2 as select * from foo", + default_db="dev", + default_schema="public", + session_id="session2", + ) ) aggregator.add_observed_query( - query="create table foo_session3 as select * from foo", - default_db="dev", - default_schema="public", - session_id="session3", + ObservedQuery( + query="create table foo_session3 as select * from foo", + default_db="dev", + default_schema="public", + session_id="session3", + ) ) # foo_session2 should come from bar (via temp table foo), have columns a and c, and depend on bar.{a,b,c} @@ -164,28 +179,36 @@ def test_multistep_temp_table(pytestconfig: pytest.Config) -> None: ) aggregator.add_observed_query( - query="create table #temp1 as select a, 2*b as b from upstream1", - default_db="dev", - default_schema="public", - session_id="session1", + ObservedQuery( + query="create table #temp1 as select a, 2*b as b from upstream1", + default_db="dev", + default_schema="public", + session_id="session1", + ) ) aggregator.add_observed_query( - query="create table #temp2 as select b, c from upstream2", - default_db="dev", - default_schema="public", - session_id="session1", + ObservedQuery( + query="create table #temp2 as select b, c from upstream2", + default_db="dev", + default_schema="public", + session_id="session1", + ) ) aggregator.add_observed_query( - query="create temp table staging_foo as select up1.a, up1.b, up2.c from #temp1 up1 left join #temp2 up2 on up1.b = up2.b where up1.b > 0", - default_db="dev", - default_schema="public", - session_id="session1", + ObservedQuery( + query="create temp table staging_foo as select up1.a, up1.b, up2.c from #temp1 up1 left join #temp2 up2 on up1.b = up2.b where up1.b > 0", + default_db="dev", + default_schema="public", + session_id="session1", + ) ) aggregator.add_observed_query( - query="insert into table prod_foo\nselect * from staging_foo", - default_db="dev", - default_schema="public", - session_id="session1", + ObservedQuery( + query="insert into table prod_foo\nselect * from staging_foo", + default_db="dev", + default_schema="public", + session_id="session1", + ) ) mcps = list(aggregator.gen_metadata()) @@ -224,46 +247,56 @@ def test_overlapping_inserts_from_temp_tables(pytestconfig: pytest.Config) -> No # #stage_online_returns is populated from "online_returns", "customer", and "online_survey". aggregator.add_observed_query( - query="create table #stage_in_person_returns as select ipr.customer_id, customer.customer_email, ipr.return_date " - "from in_person_returns ipr " - "left join customer on in_person_returns.customer_id = customer.customer_id", - default_db="dev", - default_schema="public", - session_id="1234", + ObservedQuery( + query="create table #stage_in_person_returns as select ipr.customer_id, customer.customer_email, ipr.return_date " + "from in_person_returns ipr " + "left join customer on in_person_returns.customer_id = customer.customer_id", + default_db="dev", + default_schema="public", + session_id="1234", + ) ) aggregator.add_observed_query( - query="create table #stage_online_returns as select online_ret.customer_id, customer.customer_email, online_ret.return_date, online_survey.return_reason " - "from online_returns online_ret " - "left join customer on online_ret.customer_id = customer.customer_id " - "left join online_survey on online_ret.customer_id = online_survey.customer_id and online_ret.return_id = online_survey.event_id", - default_db="dev", - default_schema="public", - session_id="2323", + ObservedQuery( + query="create table #stage_online_returns as select online_ret.customer_id, customer.customer_email, online_ret.return_date, online_survey.return_reason " + "from online_returns online_ret " + "left join customer on online_ret.customer_id = customer.customer_id " + "left join online_survey on online_ret.customer_id = online_survey.customer_id and online_ret.return_id = online_survey.event_id", + default_db="dev", + default_schema="public", + session_id="2323", + ) ) aggregator.add_observed_query( - query="insert into all_returns (customer_id, customer_email, return_date) select customer_id, customer_email, return_date from #stage_in_person_returns", - default_db="dev", - default_schema="public", - session_id="1234", + ObservedQuery( + query="insert into all_returns (customer_id, customer_email, return_date) select customer_id, customer_email, return_date from #stage_in_person_returns", + default_db="dev", + default_schema="public", + session_id="1234", + ) ) aggregator.add_observed_query( - query="insert into all_returns (customer_id, customer_email, return_date, return_reason) select customer_id, customer_email, return_date, return_reason from #stage_online_returns", - default_db="dev", - default_schema="public", - session_id="2323", + ObservedQuery( + query="insert into all_returns (customer_id, customer_email, return_date, return_reason) select customer_id, customer_email, return_date, return_reason from #stage_online_returns", + default_db="dev", + default_schema="public", + session_id="2323", + ) ) # We only have one create temp table, but the same insert command from multiple sessions. # This should get ignored. assert len(report.queries_with_non_authoritative_session) == 0 aggregator.add_observed_query( - query="insert into all_returns (customer_id, customer_email, return_date, return_reason) select customer_id, customer_email, return_date, return_reason from #stage_online_returns", - default_db="dev", - default_schema="public", - session_id="5435", + ObservedQuery( + query="insert into all_returns (customer_id, customer_email, return_date, return_reason) select customer_id, customer_email, return_date, return_reason from #stage_online_returns", + default_db="dev", + default_schema="public", + session_id="5435", + ) ) assert len(report.queries_with_non_authoritative_session) == 1 @@ -286,25 +319,31 @@ def test_aggregate_operations(pytestconfig: pytest.Config) -> None: ) aggregator.add_observed_query( - query="create table foo as select a, b from bar", - default_db="dev", - default_schema="public", - query_timestamp=_ts(20), - user=CorpUserUrn("user1"), + ObservedQuery( + query="create table foo as select a, b from bar", + default_db="dev", + default_schema="public", + timestamp=_ts(20), + user=CorpUserUrn("user1"), + ) ) aggregator.add_observed_query( - query="create table foo as select a, b from bar", - default_db="dev", - default_schema="public", - query_timestamp=_ts(25), - user=CorpUserUrn("user2"), + ObservedQuery( + query="create table foo as select a, b from bar", + default_db="dev", + default_schema="public", + timestamp=_ts(25), + user=CorpUserUrn("user2"), + ) ) aggregator.add_observed_query( - query="create table foo as select a, b+1 as b from bar", - default_db="dev", - default_schema="public", - query_timestamp=_ts(26), - user=CorpUserUrn("user3"), + ObservedQuery( + query="create table foo as select a, b+1 as b from bar", + default_db="dev", + default_schema="public", + timestamp=_ts(26), + user=CorpUserUrn("user3"), + ) ) # The first query will basically be ignored, as it's a duplicate of the second one. @@ -397,14 +436,18 @@ def test_column_lineage_deduplication(pytestconfig: pytest.Config) -> None: ) aggregator.add_observed_query( - query="/* query 1 */ insert into foo (a, b, c) select a, b, c from bar", - default_db="dev", - default_schema="public", + ObservedQuery( + query="/* query 1 */ insert into foo (a, b, c) select a, b, c from bar", + default_db="dev", + default_schema="public", + ) ) aggregator.add_observed_query( - query="/* query 2 */ insert into foo (a, b) select a, b from bar", - default_db="dev", - default_schema="public", + ObservedQuery( + query="/* query 2 */ insert into foo (a, b) select a, b from bar", + default_db="dev", + default_schema="public", + ) ) mcps = list(aggregator.gen_metadata()) @@ -483,16 +526,20 @@ def test_table_rename(pytestconfig: pytest.Config) -> None: # Add an unrelated query. aggregator.add_observed_query( - query="create table bar as select a, b from baz", - default_db="dev", - default_schema="public", + ObservedQuery( + query="create table bar as select a, b from baz", + default_db="dev", + default_schema="public", + ) ) # Add the query that created the staging table. aggregator.add_observed_query( - query="create table foo_staging as select a, b from foo_dep", - default_db="dev", - default_schema="public", + ObservedQuery( + query="create table foo_staging as select a, b from foo_dep", + default_db="dev", + default_schema="public", + ) ) mcps = list(aggregator.gen_metadata()) @@ -514,10 +561,12 @@ def test_create_table_query_mcps(pytestconfig: pytest.Config) -> None: ) aggregator.add_observed_query( - query="create or replace table `dataset.foo` (date_utc timestamp, revenue int);", - default_db="dev", - default_schema="public", - query_timestamp=datetime.now(), + ObservedQuery( + query="create or replace table `dataset.foo` (date_utc timestamp, revenue int);", + default_db="dev", + default_schema="public", + timestamp=datetime.now(), + ) ) mcps = list(aggregator.gen_metadata()) @@ -539,14 +588,18 @@ def test_lineage_via_temp_table_disordered_add(pytestconfig: pytest.Config) -> N ) aggregator.add_observed_query( - query="create table derived_from_foo as select * from foo", - default_db="dev", - default_schema="public", + ObservedQuery( + query="create table derived_from_foo as select * from foo", + default_db="dev", + default_schema="public", + ) ) aggregator.add_observed_query( - query="create temp table foo as select a, b+c as c from bar", - default_db="dev", - default_schema="public", + ObservedQuery( + query="create temp table foo as select a, b+c as c from bar", + default_db="dev", + default_schema="public", + ) ) mcps = list(aggregator.gen_metadata()) @@ -579,19 +632,23 @@ def test_basic_usage(pytestconfig: pytest.Config) -> None: ) aggregator.add_observed_query( - query="select * from foo", - default_db="dev", - default_schema="public", - usage_multiplier=5, - query_timestamp=frozen_timestamp, - user=CorpUserUrn("user1"), + ObservedQuery( + query="select * from foo", + default_db="dev", + default_schema="public", + usage_multiplier=5, + timestamp=frozen_timestamp, + user=CorpUserUrn("user1"), + ) ) aggregator.add_observed_query( - query="create table bar as select b+c as c from foo", - default_db="dev", - default_schema="public", - query_timestamp=frozen_timestamp, - user=CorpUserUrn("user2"), + ObservedQuery( + query="create table bar as select b+c as c from foo", + default_db="dev", + default_schema="public", + timestamp=frozen_timestamp, + user=CorpUserUrn("user2"), + ) ) mcps = list(aggregator.gen_metadata()) diff --git a/metadata-ingestion/tests/unit/sql_parsing/test_sqlglot_lineage.py b/metadata-ingestion/tests/unit/sql_parsing/test_sqlglot_lineage.py index 1bd634e9d10ec..fb1d2a0bc5011 100644 --- a/metadata-ingestion/tests/unit/sql_parsing/test_sqlglot_lineage.py +++ b/metadata-ingestion/tests/unit/sql_parsing/test_sqlglot_lineage.py @@ -618,7 +618,7 @@ def test_bigquery_view_from_union(): """ CREATE VIEW my_view as select * from my_project_2.my_dataset_2.sometable -union +union all select * from my_project_2.my_dataset_2.sometable2 as a """, dialect="bigquery", diff --git a/metadata-ingestion/tests/unit/sql_parsing/test_tool_meta_extractor.py b/metadata-ingestion/tests/unit/sql_parsing/test_tool_meta_extractor.py new file mode 100644 index 0000000000000..6f590b5307146 --- /dev/null +++ b/metadata-ingestion/tests/unit/sql_parsing/test_tool_meta_extractor.py @@ -0,0 +1,55 @@ +from datahub.configuration.datetimes import parse_absolute_time +from datahub.metadata.urns import CorpUserUrn +from datahub.sql_parsing.sql_parsing_aggregator import PreparsedQuery +from datahub.sql_parsing.tool_meta_extractor import ToolMetaExtractor + + +def test_extract_mode_metadata() -> None: + extractor = ToolMetaExtractor() + query = """\ +select * from LONG_TAIL_COMPANIONS.ADOPTION.PET_PROFILES +LIMIT 100 +-- {"user":"@foo","email":"foo@acryl.io","url":"https://modeanalytics.com/acryltest/reports/6234ff78bc7d/runs/662b21949629/queries/f0aad24d5b37","scheduled":false} +""" + + entry = PreparsedQuery( + query_id=None, + query_text=query, + upstreams=[], + downstream=None, + column_lineage=None, + column_usage=None, + inferred_schema=None, + user=CorpUserUrn("mode"), + timestamp=parse_absolute_time("2021-08-01T01:02:03Z"), + ) + + assert extractor.extract_bi_metadata(entry) + assert entry.user == CorpUserUrn("foo") + + assert extractor.report.num_queries_meta_extracted["mode"] == 1 + + +def test_extract_no_metadata() -> None: + extractor = ToolMetaExtractor() + query = """\ +select * from LONG_TAIL_COMPANIONS.ADOPTION.PET_PROFILES +LIMIT 100 +-- random comment on query +""" + + entry = PreparsedQuery( + query_id=None, + query_text=query, + upstreams=[], + downstream=None, + column_lineage=None, + column_usage=None, + inferred_schema=None, + user=CorpUserUrn("mode"), + timestamp=parse_absolute_time("2021-08-01T01:02:03Z"), + ) + + assert not extractor.extract_bi_metadata(entry) + + assert extractor.report.num_queries_meta_extracted["mode"] == 0 diff --git a/metadata-ingestion/tests/unit/test_bigquery_sql_lineage.py b/metadata-ingestion/tests/unit/test_bigquery_sql_lineage.py index b685f12fae774..b2b92f18d0ae9 100644 --- a/metadata-ingestion/tests/unit/test_bigquery_sql_lineage.py +++ b/metadata-ingestion/tests/unit/test_bigquery_sql_lineage.py @@ -289,7 +289,7 @@ def test_bigquery_sql_lineage_create_or_replace_view_name_with_hyphens_is_accept CREATE OR REPLACE VIEW test-project.dataset.test_view AS SELECT * FROM project.dataset.src_table_a - UNION + UNION ALL SELECT * FROM `project.dataset.src_table_b` """, schema_resolver=SchemaResolver(platform="bigquery"), diff --git a/metadata-ingestion/tests/unit/test_mapping.py b/metadata-ingestion/tests/unit/test_mapping.py index b4168af3029d0..75eacf9509a53 100644 --- a/metadata-ingestion/tests/unit/test_mapping.py +++ b/metadata-ingestion/tests/unit/test_mapping.py @@ -188,6 +188,7 @@ def test_operation_processor_ownership_category(): "user_owner": "@test_user", "business_owner": "alice,urn:li:corpGroup:biz-data-team", "architect": "bob", + "producer": "urn:li:corpGroup:producer-group", } processor = OperationProcessor( operation_defs={ @@ -215,6 +216,14 @@ def test_operation_processor_ownership_category(): "owner_category": "urn:li:ownershipType:architect", }, }, + "producer": { + "match": ".*", + "operation": "add_owner", + "config": { + # Testing using full urns without any owner_type set. + "owner_category": OwnershipTypeClass.PRODUCER, + }, + }, }, owner_source_type="SOURCE_CONTROL", ) @@ -222,26 +231,30 @@ def test_operation_processor_ownership_category(): assert "add_owner" in aspect_map ownership_aspect: OwnershipClass = aspect_map["add_owner"] - assert len(ownership_aspect.owners) == 4 + assert len(ownership_aspect.owners) == 5 + assert all( + new_owner.source and new_owner.source.type == "SOURCE_CONTROL" + for new_owner in ownership_aspect.owners + ) new_owner: OwnerClass = ownership_aspect.owners[0] assert new_owner.owner == "urn:li:corpGroup:biz-data-team" - assert new_owner.source and new_owner.source.type == "SOURCE_CONTROL" assert new_owner.type and new_owner.type == OwnershipTypeClass.BUSINESS_OWNER new_owner = ownership_aspect.owners[1] + assert new_owner.owner == "urn:li:corpGroup:producer-group" + assert new_owner.type and new_owner.type == OwnershipTypeClass.PRODUCER + + new_owner = ownership_aspect.owners[2] assert new_owner.owner == "urn:li:corpGroup:test_user" - assert new_owner.source and new_owner.source.type == "SOURCE_CONTROL" assert new_owner.type and new_owner.type == OwnershipTypeClass.DATA_STEWARD - new_owner = ownership_aspect.owners[2] + new_owner = ownership_aspect.owners[3] assert new_owner.owner == "urn:li:corpuser:alice" - assert new_owner.source and new_owner.source.type == "SOURCE_CONTROL" assert new_owner.type and new_owner.type == OwnershipTypeClass.BUSINESS_OWNER - new_owner = ownership_aspect.owners[3] + new_owner = ownership_aspect.owners[4] assert new_owner.owner == "urn:li:corpuser:bob" - assert new_owner.source and new_owner.source.type == "SOURCE_CONTROL" assert new_owner.type == OwnershipTypeClass.CUSTOM assert new_owner.typeUrn == "urn:li:ownershipType:architect" diff --git a/metadata-ingestion/tests/unit/test_tableau_source.py b/metadata-ingestion/tests/unit/test_tableau_source.py index 1cd0557d085f1..c81aa0bd8a1b1 100644 --- a/metadata-ingestion/tests/unit/test_tableau_source.py +++ b/metadata-ingestion/tests/unit/test_tableau_source.py @@ -2,9 +2,9 @@ import pytest -import datahub.ingestion.source.tableau_constant as c -from datahub.ingestion.source.tableau import TableauSiteSource -from datahub.ingestion.source.tableau_common import ( +import datahub.ingestion.source.tableau.tableau_constant as c +from datahub.ingestion.source.tableau.tableau import TableauSiteSource +from datahub.ingestion.source.tableau.tableau_common import ( get_filter_pages, make_filter, tableau_field_to_schema_field, diff --git a/metadata-io/src/main/java/com/linkedin/metadata/entity/AspectDao.java b/metadata-io/src/main/java/com/linkedin/metadata/entity/AspectDao.java index 646b995f87d00..401d40ec177ce 100644 --- a/metadata-io/src/main/java/com/linkedin/metadata/entity/AspectDao.java +++ b/metadata-io/src/main/java/com/linkedin/metadata/entity/AspectDao.java @@ -51,16 +51,30 @@ Map batchGet( List getAspectsInRange( @Nonnull Urn urn, Set aspectNames, long startTimeMillis, long endTimeMillis); + /** + * @param urn urn to fetch + * @param aspectName aspect to fetch + * @param forUpdate set to true if the result is used for versioning link + * @return + */ @Nullable default EntityAspect getLatestAspect( - @Nonnull final String urn, @Nonnull final String aspectName) { - return getLatestAspects(Map.of(urn, Set.of(aspectName))) + @Nonnull final String urn, @Nonnull final String aspectName, boolean forUpdate) { + return getLatestAspects(Map.of(urn, Set.of(aspectName)), forUpdate) .getOrDefault(urn, Map.of()) .getOrDefault(aspectName, null); } + /** + * @param urnAspects urn/aspects to fetch + * @param forUpdate set to true if the result is used for versioning link + * @return the data + */ @Nonnull - Map> getLatestAspects(Map> urnAspects); + Map> getLatestAspects( + Map> urnAspects, boolean forUpdate); void saveAspect( @Nullable Transaction tx, diff --git a/metadata-io/src/main/java/com/linkedin/metadata/entity/EntityServiceImpl.java b/metadata-io/src/main/java/com/linkedin/metadata/entity/EntityServiceImpl.java index 2e12b52194ffb..fd6ad57c0adf5 100644 --- a/metadata-io/src/main/java/com/linkedin/metadata/entity/EntityServiceImpl.java +++ b/metadata-io/src/main/java/com/linkedin/metadata/entity/EntityServiceImpl.java @@ -849,7 +849,7 @@ private List ingestAspectsToLocalDB( final Map> latestAspects = EntityUtils.toSystemAspects( opContext.getRetrieverContext().get(), - aspectDao.getLatestAspects(urnAspects)); + aspectDao.getLatestAspects(urnAspects, true)); // read #2 (potentially) final Map> nextVersions = EntityUtils.calculateNextVersions(aspectDao, latestAspects, urnAspects); @@ -866,7 +866,7 @@ private List ingestAspectsToLocalDB( Map> newLatestAspects = EntityUtils.toSystemAspects( opContext.getRetrieverContext().get(), - aspectDao.getLatestAspects(updatedItems.getFirst())); + aspectDao.getLatestAspects(updatedItems.getFirst(), true)); // merge updatedLatestAspects = AspectsBatch.merge(latestAspects, newLatestAspects); @@ -2064,7 +2064,7 @@ public RollbackRunResult deleteUrn(@Nonnull OperationContext opContext, Urn urn) EntityAspect latestKey = null; try { - latestKey = aspectDao.getLatestAspect(urn.toString(), keyAspectName); + latestKey = aspectDao.getLatestAspect(urn.toString(), keyAspectName, false); } catch (EntityNotFoundException e) { log.warn("Entity to delete does not exist. {}", urn.toString()); } @@ -2217,7 +2217,7 @@ private RollbackResult deleteAspectWithoutMCL( (EntityAspect.EntitySystemAspect) EntityUtils.toSystemAspect( opContext.getRetrieverContext().get(), - aspectDao.getLatestAspect(urn, aspectName)) + aspectDao.getLatestAspect(urn, aspectName, false)) .orElse(null); // 1.1 If no latest exists, skip this aspect diff --git a/metadata-io/src/main/java/com/linkedin/metadata/entity/cassandra/CassandraAspectDao.java b/metadata-io/src/main/java/com/linkedin/metadata/entity/cassandra/CassandraAspectDao.java index 15c37b6c0085f..51f898d3122af 100644 --- a/metadata-io/src/main/java/com/linkedin/metadata/entity/cassandra/CassandraAspectDao.java +++ b/metadata-io/src/main/java/com/linkedin/metadata/entity/cassandra/CassandraAspectDao.java @@ -81,14 +81,15 @@ private boolean validateConnection() { } @Override - public EntityAspect getLatestAspect(@Nonnull String urn, @Nonnull String aspectName) { + public EntityAspect getLatestAspect( + @Nonnull String urn, @Nonnull String aspectName, boolean forUpdate) { validateConnection(); return getAspect(urn, aspectName, ASPECT_LATEST_VERSION); } @Override public Map> getLatestAspects( - Map> urnAspects) { + Map> urnAspects, boolean forUpdate) { return urnAspects.entrySet().stream() .map( entry -> @@ -97,7 +98,8 @@ public Map> getLatestAspects( entry.getValue().stream() .map( aspectName -> { - EntityAspect aspect = getLatestAspect(entry.getKey(), aspectName); + EntityAspect aspect = + getLatestAspect(entry.getKey(), aspectName, forUpdate); return aspect != null ? Map.entry(aspectName, aspect) : null; }) .filter(Objects::nonNull) diff --git a/metadata-io/src/main/java/com/linkedin/metadata/entity/ebean/EbeanAspectDao.java b/metadata-io/src/main/java/com/linkedin/metadata/entity/ebean/EbeanAspectDao.java index 524e947476122..93c06b9236d50 100644 --- a/metadata-io/src/main/java/com/linkedin/metadata/entity/ebean/EbeanAspectDao.java +++ b/metadata-io/src/main/java/com/linkedin/metadata/entity/ebean/EbeanAspectDao.java @@ -242,7 +242,7 @@ private void saveEbeanAspect( @Override public Map> getLatestAspects( - @Nonnull Map> urnAspects) { + @Nonnull Map> urnAspects, boolean forUpdate) { validateConnection(); List keys = @@ -256,7 +256,12 @@ public Map> getLatestAspects( entry.getKey(), aspect, ASPECT_LATEST_VERSION))) .collect(Collectors.toList()); - List results = _server.find(EbeanAspectV2.class).where().idIn(keys).findList(); + final List results; + if (forUpdate) { + results = _server.find(EbeanAspectV2.class).where().idIn(keys).forUpdate().findList(); + } else { + results = _server.find(EbeanAspectV2.class).where().idIn(keys).findList(); + } return toUrnAspectMap(results); } @@ -814,7 +819,8 @@ public Map> getNextVersions( return result; } - List dbResults = exp.endOr().findIds(); + // forUpdate is required to avoid duplicate key violations + List dbResults = exp.endOr().forUpdate().findIds(); for (EbeanAspectV2.PrimaryKey key : dbResults) { if (result.get(key.getUrn()).get(key.getAspect()) <= key.getVersion()) {