{"id":754,"date":"2024-10-22T08:58:45","date_gmt":"2024-10-22T06:58:45","guid":{"rendered":"https:\/\/www.syntera.ch\/blog\/?p=754"},"modified":"2024-10-22T08:58:46","modified_gmt":"2024-10-22T06:58:46","slug":"google-analytics-4-data-in-microsoft-fabric","status":"publish","type":"post","link":"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/","title":{"rendered":"Google Analytics 4 Data in Microsoft Fabric"},"content":{"rendered":"<div class=\"wp-block-post-author has-medium-font-size\"><div class=\"wp-block-post-author__avatar\"><img alt='' src='https:\/\/secure.gravatar.com\/avatar\/bd3589b8a6ccc62e37c3cee8f8e06c73a4085816337ad7d6c154e30dc60cc4c1?s=48&#038;d=mm&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/bd3589b8a6ccc62e37c3cee8f8e06c73a4085816337ad7d6c154e30dc60cc4c1?s=96&#038;d=mm&#038;r=g 2x' class='avatar avatar-48 photo' height='48' width='48' \/><\/div><div class=\"wp-block-post-author__content\"><p class=\"wp-block-post-author__byline\">LEAD DATA ENGINEERING<\/p><p class=\"wp-block-post-author__name\">Dominic Schranz<\/p><\/div><\/div>\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Google Analytics 4 data is essential for understanding website performance and user behavior. The native dashboard is great for initial analysis but there are other use cases where it is just not quite enough. What if you want to export the data to combine it with other sources? Or give new users the required permissions all at once? What if you just want to consolidate all your dashboards in a single place? For us, this place is called Microsoft Fabric and in this blog post we&#8217;ll explore how to use Fabric Notebooks to connect directly to Google Analytics with the goal of exporting and storing the data in OneLake.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preparing Google Analytics<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Navigate to Google Analytics (GA) <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/reporting\/data\/v1\/quickstart-client-libraries\">API Quickstart<\/a> and follow the steps to enable the API access. Step 1 will create a service account, which can be added to your Google Analytics property in Step 2.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"753\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/GA_setup_quickstart-1024x753.png\" alt=\"\" class=\"wp-image-755\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/GA_setup_quickstart-1024x753.png 1024w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/GA_setup_quickstart-300x221.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/GA_setup_quickstart-768x565.png 768w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/GA_setup_quickstart.png 1291w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">GA API Quickstart<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To add the newly created service account to your GA property, follow the &#8220;add users&#8221; section of this<a href=\"https:\/\/support.google.com\/analytics\/answer\/1009702#add-users&amp;zippy=%2Cin-this-article\" target=\"_blank\" rel=\"noreferrer noopener\"> guide<\/a>. In short, navigate to <a href=\"https:\/\/analytics.google.com\/\">google analytics<\/a> and click on the large gear icon in the bottom left. Select &#8220;Property access management&#8221; and in the upper right corner click on the large &#8220;+&#8221; sign to add a new permission. Grab the Email-address from the client configuration you downloaded in step 1. and add this user with &#8220;Viewer&#8221; permissions. The end result should look something like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"135\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/account_in_analytics-1024x135.png\" alt=\"\" class=\"wp-image-756\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/account_in_analytics-1024x135.png 1024w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/account_in_analytics-300x40.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/account_in_analytics-768x102.png 768w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/account_in_analytics-1536x203.png 1536w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/account_in_analytics.png 1747w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Permissions in GA for API access<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Preparing Fabric Notebook<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On the Fabric side, we\u2019ll use a Notebook to connect to Google Analytics via the API. To do this, store the credentials file directly in the Notebook\u2019s built-in resources. Open a new Notebook and, in the &#8220;Explorer&#8221; section on the left, navigate to &#8220;Resources.&#8221; Under &#8220;Built-in,&#8221; click the three dots and select &#8220;Upload Files.&#8221; Upload the client credentials JSON file.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-f56f613f wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"703\" height=\"759\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/NotebookResources-1.png\" alt=\"\" class=\"wp-image-758\" style=\"width:auto;height:440px\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/NotebookResources-1.png 703w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/NotebookResources-1-278x300.png 278w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"780\" height=\"762\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/UploadingFileToNotebook.png\" alt=\"\" class=\"wp-image-759\" style=\"width:auto;height:440px\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/UploadingFileToNotebook.png 780w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/UploadingFileToNotebook-300x293.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/UploadingFileToNotebook-768x750.png 768w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-background wp-block-paragraph\" style=\"background-color:#e5f0f8\">Warning: Storing the credentials directly in the built-in resources can be a security risk. To store credentials securely, take a look at this post on using <a href=\"https:\/\/www.syntera.ch\/blog\/2023\/10\/18\/how-to-access-azure-key-vault-secrets-from-fabric-notebook\/\">Key Vault with Fabric Notebooks<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Code<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><em>(Full code at the end of page)<\/em><br>First we need to install the Python client library. Fabric Notebooks provide the possibility to use inline installation to directly get additional packages via PIP. The PySpark kernel will be restarting after the installation and it is therefore required to run in the first cell.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"111\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-1-1024x111.png\" alt=\"\" class=\"wp-image-761\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-1-1024x111.png 1024w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-1-300x33.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-1-768x83.png 768w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-1.png 1297w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To ensure the successful authentication with the GA API, the environment variable for the credentials needs to be set. This corresponds to step 3 in the <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/reporting\/data\/v1\/quickstart-client-libraries\">API Quickstart<\/a>. The simplest way to do this in a Notebook is via os.environ. Setting the path to the uploaded credentials json in the builtin resources.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"143\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-2-1024x143.png\" alt=\"\" class=\"wp-image-762\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-2-1024x143.png 1024w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-2-300x42.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-2-768x107.png 768w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-2.png 1344w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Additionally, the GA property id needs to be set to instruct the client which property will be queried.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"134\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-16-1024x134.png\" alt=\"\" class=\"wp-image-791\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-16-1024x134.png 1024w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-16-300x39.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-16-768x101.png 768w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-16.png 1204w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">After setting up the application credentials and property ID, the Notebook is ready to call the API and extract data. In the example below, we retrieve views per page and day. While getting page views is relatively straightforward, other queries can get quite complex. Visit the <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/reporting\/data\/v1\/api-schema\">API Dimensions &amp; Metrics Documentation<\/a> to get a full overview.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"595\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-3-1024x595.png\" alt=\"\" class=\"wp-image-763\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-3-1024x595.png 1024w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-3-300x174.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-3-768x447.png 768w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-3-1536x893.png 1536w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-3.png 1546w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Get views by page and day<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The results of the API calls are stored in a Python list called &#8220;results,&#8221; which can then be added to a DataFrame for easy storage in a Fabric Lakehouse or Warehouse. The schema defines the data types and column names, which are applied in the <code>spark.createDataFrame()<\/code> call. Running <code>display(df)<\/code> shows the extracted data inline, giving you a first look at the results.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"353\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-6-1024x353.png\" alt=\"\" class=\"wp-image-767\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-6-1024x353.png 1024w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-6-300x103.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-6-768x265.png 768w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-6.png 1315w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Loading results into a DataFrame<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"388\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-7-1024x388.png\" alt=\"\" class=\"wp-image-768\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-7-1024x388.png 1024w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-7-300x114.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-7-768x291.png 768w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-7.png 1186w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Displayed DataFrame with the Results ordered by pageViews.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The code below stores this data in a Fabric Lakehouse Table. Ensure that you are not overwriting an existing Table and keep in mind that the write mode &#8220;overwrite&#8221; makes sense for this initial setup. To add data incrementally each day you would use mode &#8220;append&#8221; with a different date range and\/or upsert logic.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"130\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-9-1024x130.png\" alt=\"\" class=\"wp-image-771\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-9-1024x130.png 1024w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-9-300x38.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-9-768x98.png 768w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-9.png 1429w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Results<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Now that the website performance data is in Fabric, you can transform, combine, and visualize it however you like. Below is a comparison of the original Google Analytics dashboard (left) with the exported data in a Power BI report (right).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"364\" src=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-15-1024x364.png\" alt=\"\" class=\"wp-image-790\" srcset=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-15-1024x364.png 1024w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-15-300x107.png 300w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-15-768x273.png 768w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-15-1536x546.png 1536w, https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/image-15.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Google Analytics dashboard (left) and the now exported equivalent in Fabric with Power BI (right)<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Extracting data, while not the most thrilling task, forms the basis for many valuable insights. The method shown in this blog is the foundation for a range of use cases &#8211; from centralizing data in a single dashboard to building advanced models, like using AI to analyze similarities in your best-performing pages.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">COPY &amp; Paste<\/h6>\n\n\n\n<pre class=\"wp-block-code\"><code># Installing the Google Analytics Python Client Library for our API Calls\n%pip install google-analytics-data\n\n# set the environment variable for the GA Credentials to the credentials json file\nimport os\nos.environ&#91;\"GOOGLE_APPLICATION_CREDENTIALS\"] = \".\/builtin\/your_credentials_file.json\"\n\n# set your Google Analytics Property Id\nYOUR_GA4_PROPERTY_ID = \"**********\"\n\nfrom datetime import date, timedelta\nfrom google.analytics.data_v1beta import BetaAnalyticsDataClient\nfrom google.analytics.data_v1beta.types import (\n    DateRange,\n    Dimension,\n    Metric,\n    RunReportRequest,\n)\n\n# Using a default constructor instructs the client to use the credentials# specified in GOOGLE_APPLICATION_CREDENTIALS environment variable.client = BetaAnalyticsDataClient()\n\n# creating an api call for each day in the past 28 days \n# and storing the results\nresults = &#91;]\n\nfor i in range(1, 29):\n    day = date.today() - timedelta(days=i)\n    # get the views per page and day\n    request = RunReportRequest(\n        property=f\"properties\/{YOUR_GA4_PROPERTY_ID}\",\n        dimensions=&#91;Dimension(name=\"pagePath\")],\n        metrics=&#91;Metric(name=\"screenPageViews\")],\n        date_ranges=&#91;\n            DateRange(\n                start_date=day.strftime(\"%Y-%m-%d\"), end_date=day.strftime(\"%Y-%m-%d\")\n            )\n        ],\n    )\n    response = client.run_report(request)\n    for row in response.rows:\n        row_val = (day, row.dimension_values&#91;0].value, int(row.metric_values&#91;0].value))\n        results.append(row_val)\n\nfrom pyspark.sql.types import *\n    \n# Create the schema for the table\norderSchema = StructType(&#91;\n    StructField(\"date\", DateType()),\n    StructField(\"pagePath\", StringType()),\n    StructField(\"pageViews\", IntegerType()),\n    ])\n\n# create a spark dataframe with the GA result data\ndf = spark.createDataFrame(results, orderSchema)\ndisplay(df)\n\n# writing the data to lakehouse\n# add a lakehouse first in the Explorer view to the left if none is connected\ndf.write.format(\"delta\").mode(\"overwrite\").saveAsTable(\"web_page_views\")<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Google Analytics 4 data is essential for understanding website performance and user behavior. The native dashboard is great for initial analysis but there are other use cases where it is just not quite enough. What if you want to export the data to combine it with other sources? Or give new users the required permissions [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":773,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,7],"tags":[34,36,6],"class_list":["post-754","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein","category-data-engineering","tag-microsoft-fabric","tag-notebook","tag-power-bi"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Google Analytics 4 Data in Microsoft Fabric - Syntera<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Google Analytics 4 Data in Microsoft Fabric - Syntera\" \/>\n<meta property=\"og:description\" content=\"Google Analytics 4 data is essential for understanding website performance and user behavior. The native dashboard is great for initial analysis but there are other use cases where it is just not quite enough. What if you want to export the data to combine it with other sources? Or give new users the required permissions [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/\" \/>\n<meta property=\"og:site_name\" content=\"Syntera\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-22T06:58:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-22T06:58:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/title-image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"455\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Dominic Schranz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dominic Schranz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/\",\"url\":\"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/\",\"name\":\"Google Analytics 4 Data in Microsoft Fabric - Syntera\",\"isPartOf\":{\"@id\":\"https:\/\/www.syntera.ch\/blog\/#website\"},\"datePublished\":\"2024-10-22T06:58:45+00:00\",\"dateModified\":\"2024-10-22T06:58:46+00:00\",\"author\":{\"@id\":\"https:\/\/www.syntera.ch\/blog\/#\/schema\/person\/e038d1dcebeca2193c5503f78783988d\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.syntera.ch\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Google Analytics 4 Data in Microsoft Fabric\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.syntera.ch\/blog\/#website\",\"url\":\"https:\/\/www.syntera.ch\/blog\/\",\"name\":\"Syntera\",\"description\":\"translating data into business value.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.syntera.ch\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.syntera.ch\/blog\/#\/schema\/person\/e038d1dcebeca2193c5503f78783988d\",\"name\":\"Dominic Schranz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.syntera.ch\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bd3589b8a6ccc62e37c3cee8f8e06c73a4085816337ad7d6c154e30dc60cc4c1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bd3589b8a6ccc62e37c3cee8f8e06c73a4085816337ad7d6c154e30dc60cc4c1?s=96&d=mm&r=g\",\"caption\":\"Dominic Schranz\"},\"url\":\"https:\/\/www.syntera.ch\/blog\/author\/domi\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Google Analytics 4 Data in Microsoft Fabric - Syntera","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/","og_locale":"en_US","og_type":"article","og_title":"Google Analytics 4 Data in Microsoft Fabric - Syntera","og_description":"Google Analytics 4 data is essential for understanding website performance and user behavior. The native dashboard is great for initial analysis but there are other use cases where it is just not quite enough. What if you want to export the data to combine it with other sources? Or give new users the required permissions [&hellip;]","og_url":"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/","og_site_name":"Syntera","article_published_time":"2024-10-22T06:58:45+00:00","article_modified_time":"2024-10-22T06:58:46+00:00","og_image":[{"width":1280,"height":455,"url":"https:\/\/www.syntera.ch\/blog\/wp-content\/uploads\/2024\/10\/title-image.png","type":"image\/png"}],"author":"Dominic Schranz","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Dominic Schranz","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/","url":"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/","name":"Google Analytics 4 Data in Microsoft Fabric - Syntera","isPartOf":{"@id":"https:\/\/www.syntera.ch\/blog\/#website"},"datePublished":"2024-10-22T06:58:45+00:00","dateModified":"2024-10-22T06:58:46+00:00","author":{"@id":"https:\/\/www.syntera.ch\/blog\/#\/schema\/person\/e038d1dcebeca2193c5503f78783988d"},"breadcrumb":{"@id":"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.syntera.ch\/blog\/2024\/10\/22\/google-analytics-4-data-in-microsoft-fabric\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.syntera.ch\/blog\/"},{"@type":"ListItem","position":2,"name":"Google Analytics 4 Data in Microsoft Fabric"}]},{"@type":"WebSite","@id":"https:\/\/www.syntera.ch\/blog\/#website","url":"https:\/\/www.syntera.ch\/blog\/","name":"Syntera","description":"translating data into business value.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.syntera.ch\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.syntera.ch\/blog\/#\/schema\/person\/e038d1dcebeca2193c5503f78783988d","name":"Dominic Schranz","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.syntera.ch\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/bd3589b8a6ccc62e37c3cee8f8e06c73a4085816337ad7d6c154e30dc60cc4c1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bd3589b8a6ccc62e37c3cee8f8e06c73a4085816337ad7d6c154e30dc60cc4c1?s=96&d=mm&r=g","caption":"Dominic Schranz"},"url":"https:\/\/www.syntera.ch\/blog\/author\/domi\/"}]}},"_links":{"self":[{"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/posts\/754","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/comments?post=754"}],"version-history":[{"count":11,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/posts\/754\/revisions"}],"predecessor-version":[{"id":796,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/posts\/754\/revisions\/796"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/media\/773"}],"wp:attachment":[{"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/media?parent=754"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/categories?post=754"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.syntera.ch\/blog\/wp-json\/wp\/v2\/tags?post=754"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}