Blog
Announcements
Announcing Tableau Support in Foundational

Announcing Tableau Support in Foundational

Announcements
December 14, 2023
Team Foundational
Subscribe to our Newsletter
Get the latest from our team delivered to your inbox
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Ready to get started?
Try It Free

Announcing Tableau Support in Foundational

At Foundational, our mission is to streamline and simplify code development for data, which means any code that impacts data, throughout the data lifecycle and across the entire data stack.

Today, we're excited to announce our latest addition: Foundational now offers comprehensive support for Tableau, one of the most popular business intelligence platforms. This integration enables organizations using Tableau to receive:

  • Pre-Merge Analysis for Every Pull Request Affecting Tableau: Any pull request in your code repositories, which may impact Tableau dashboards, is always analyzed before merging. This analysis focuses on the downstream impact on dashboards and reports, ensuring integrity and performance.
  • Automated, Up-to-Date Column-Level Lineage: Experience a seamless, end-to-end automated lineage, constantly updated to reflect the latest code commits. This feature is key to understanding dependencies between Tableau and other elements of your data stack and ensuring cohesive data management.
  • On-premise Support for Enhanced Security: Organizations running Tableau on-premise can choose to utilize our Tableau Foundational Client, which runs locally and would make all API calls within your company network's perimeter.

Tackling the Business Intelligence Scaling Challenge

Business Intelligence (BI) systems are often the most vulnerable components in a data stack, and running into broken dashboards and dashboards that display bad data seems way too common. This vulnerability arises from several factors:

  • BI is at the edge of the data stack: Since most data ultimately flows to BI, any upstream issue ends up affecting the dashboard. And since all of these repositories are spread across the company, pretty much anyone may cause damage to BI, without even knowing. The analysts are almost always outside of the loop when changes are being made upstream.
  • BI is not git controlled: While technically most BI tools do support this, it’s hard to set up and today the common state is that BI doesn’t go through git. Consequently, changes in BI are typically not peer-reviewed or audited before going live.
  • Optimization for individual reports over organizational Needs: BI tools are typically optimized for individuals rather than the broader organization. This means that commonly, there would be a lot of dashboard sprawl, duplicate datasets, and redundant reports. These, together with their associated pipelines in the warehouse, add both to confusion as well as to the warehouse bill.

Addressing BI governance

Outside of dashboards breaking or showing the wrong data, perhaps the biggest challenge BI users often experience is governance. Often this may be voiced as missing a single source of truth, dashboard sprawl, lack of consistency, and many other symptoms that all result in BI being a lot more messy, costly, and slow than it should.

Foundational's integration with Tableau addresses these challenges by:

  • Upstream lineage all the way to code - With Foundational, analysts can inspect a dashboard or report to understand every path the data goes through before landing in the dashboard. And since our lineage is derived from the source code, users can understand what code changes impacted which dashboards and who were the people that made them. This connects producers and consumers in a straightforward way.
  • Change management - With Tableau integrated, everyone that is making code changes can understand if they’re going to impact any dashboards that the company is relying on. This eliminates surprises you’d otherwise have even when making small changes or code refactors.
  • Data contract enforcement - Users can establish rules around dashboards just like any other data asset, to alert or get alerted when dashboard changes are happening.  

Build Better with Foundational

At Foundational, we are solving pragmatic challenges that data organizations face constantly. Not breaking dashboards and avoiding BI sprawl are only some aspects of this – Please reach out to learn more.

code snippet <goes here>
<style>.horizontal-trigger {height: calc(100% - 100vh);}</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/ScrollTrigger.min.js"></script>
<script>
// © Code by T.RICKS, https://www.timothyricks.com/
// Copyright 2021, T.RICKS, All rights reserved.
// You have the license to use this code in your projects but not to redistribute it to others
gsap.registerPlugin(ScrollTrigger);
let horizontalItem = $(".horizontal-item");
let horizontalSection = $(".horizontal-section");
let moveDistance;
function calculateScroll() {
 // Desktop
 let itemsInView = 3;
 let scrollSpeed = 1.2;  if (window.matchMedia("(max-width: 479px)").matches) {
   // Mobile Portrait
   itemsInView = 1;
   scrollSpeed = 1.2;
 } else if (window.matchMedia("(max-width: 767px)").matches) {
   // Mobile Landscape
   itemsInView = 1;
   scrollSpeed = 1.2;
 } else if (window.matchMedia("(max-width: 991px)").matches) {
   // Tablet
   itemsInView = 2;
   scrollSpeed = 1.2;
 }
 let moveAmount = horizontalItem.length - itemsInView;
 let minHeight =
   scrollSpeed * horizontalItem.outerWidth() * horizontalItem.length;
 if (moveAmount <= 0) {
   moveAmount = 0;
   minHeight = 0;
   // horizontalSection.css('height', '100vh');
 } else {
   horizontalSection.css("height", "200vh");
 }
 moveDistance = horizontalItem.outerWidth() * moveAmount;
 horizontalSection.css("min-height", minHeight + "px");
}
calculateScroll();
window.onresize = function () {
 calculateScroll();
};let tl = gsap.timeline({
 scrollTrigger: {
   trigger: ".horizontal-trigger",
   // trigger element - viewport
   start: "top top",
   end: "bottom top",
   invalidateOnRefresh: true,
   scrub: 1
 }
});
tl.to(".horizontal-section .list", {
 x: () => -moveDistance,
 duration: 1
});
</script>
Share this post
Subscribe to our Newsletter
Get the latest from our team delivered to your inbox
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Ready to get started?
Try It Free