{"id":10248,"date":"2026-08-15T00:34:10","date_gmt":"2026-08-14T22:34:10","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/looker-studio-blend-join-planner\/"},"modified":"2026-08-15T00:34:10","modified_gmt":"2026-08-14T22:34:10","slug":"looker-studio-blend-join-planner","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/looker-studio-blend-join-planner\/","title":{"rendered":"Planer f\u00fcr Datenzusammenf\u00fchrungen in Looker Studio"},"content":{"rendered":"<div class=\"gtm-analyser-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 20px;\">Eine Zusammenf\u00fchrung in Looker Studio addiert keine Tabellen, sie verkn\u00fcpft sie. Tr\u00e4gt die rechte Seite mehr als eine Zeile je Schl\u00fcssel, wird jede linke Zeile wiederholt und ihre Kennzahlen z\u00e4hlen mehrfach. Die Rechnung darunter zeigt das, bevor es das Diagramm tut.<\/p>\n<div style=\"display: flex; gap: 18px; flex-wrap: wrap;\">\n<div style=\"flex: 1; min-width: 250px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 6px; padding: 14px;\">\n<div style=\"color: var(--text-primary, #e8e8ee); font-weight: 700; margin-bottom: 10px;\">Linke Tabelle<\/div>\n<p>            <label for=\"bl-l-name\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.8rem; margin-bottom: 4px;\">Name<\/label><br \/>\n            <input type=\"text\" id=\"bl-l-name\" class=\"form-control\" style=\"width: 100%; padding: 9px; background: var(--bg-panel, #1e1e24); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box; margin-bottom: 10px;\" value=\"GA4 Sitzungen\"><br \/>\n            <label for=\"bl-l-zeilen\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.8rem; margin-bottom: 4px;\">Zeilen<\/label><br \/>\n            <input type=\"text\" id=\"bl-l-zeilen\" class=\"form-control\" style=\"width: 100%; padding: 9px; background: var(--bg-panel, #1e1e24); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box; margin-bottom: 10px;\" value=\"1000\"><br \/>\n            <label for=\"bl-l-schluessel\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.8rem; margin-bottom: 4px;\">Verschiedene Werte des Schl\u00fcssels<\/label><br \/>\n            <input type=\"text\" id=\"bl-l-schluessel\" class=\"form-control\" style=\"width: 100%; padding: 9px; background: var(--bg-panel, #1e1e24); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box;\" value=\"1000\">\n        <\/div>\n<div style=\"flex: 1; min-width: 250px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 6px; padding: 14px;\">\n<div style=\"color: var(--text-primary, #e8e8ee); font-weight: 700; margin-bottom: 10px;\">Rechte Tabelle<\/div>\n<p>            <label for=\"bl-r-name\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.8rem; margin-bottom: 4px;\">Name<\/label><br \/>\n            <input type=\"text\" id=\"bl-r-name\" class=\"form-control\" style=\"width: 100%; padding: 9px; background: var(--bg-panel, #1e1e24); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box; margin-bottom: 10px;\" value=\"Google Ads Kosten\"><br \/>\n            <label for=\"bl-r-zeilen\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.8rem; margin-bottom: 4px;\">Zeilen<\/label><br \/>\n            <input type=\"text\" id=\"bl-r-zeilen\" class=\"form-control\" style=\"width: 100%; padding: 9px; background: var(--bg-panel, #1e1e24); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box; margin-bottom: 10px;\" value=\"3000\"><br \/>\n            <label for=\"bl-r-schluessel\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.8rem; margin-bottom: 4px;\">Verschiedene Werte des Schl\u00fcssels<\/label><br \/>\n            <input type=\"text\" id=\"bl-r-schluessel\" class=\"form-control\" style=\"width: 100%; padding: 9px; background: var(--bg-panel, #1e1e24); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box;\" value=\"1000\">\n        <\/div>\n<\/p><\/div>\n<div style=\"display: flex; gap: 12px; flex-wrap: wrap; margin-top: 15px;\">\n<div style=\"flex: 1; min-width: 190px;\">\n            <label for=\"bl-art\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Art der Verkn\u00fcpfung<\/label><br \/>\n            <select id=\"bl-art\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box;\"><option value=\"links\">links au\u00dfen<\/option><option value=\"innen\">innen<\/option><option value=\"rechts\">rechts au\u00dfen<\/option><option value=\"voll\">voll au\u00dfen<\/option><option value=\"kreuz\">kreuz<\/option><\/select>\n        <\/div>\n<div style=\"flex: 1; min-width: 190px;\">\n            <label for=\"bl-treffer\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Anteil der linken Schl\u00fcssel, die rechts vorkommen, in Prozent<\/label><br \/>\n            <input type=\"text\" id=\"bl-treffer\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box;\" value=\"80\">\n        <\/div>\n<div style=\"flex: 1; min-width: 190px;\">\n            <label for=\"bl-kennzahl\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Kennzahl der linken Tabelle (Summe)<\/label><br \/>\n            <input type=\"text\" id=\"bl-kennzahl\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box;\" value=\"12500\">\n        <\/div>\n<div style=\"flex: 1; min-width: 190px;\">\n            <label for=\"bl-felder\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Verkn\u00fcpfungsfelder<\/label><br \/>\n            <input type=\"text\" id=\"bl-felder\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-family: monospace; box-sizing: border-box;\" value=\"Kampagne, Datum\">\n        <\/div>\n<\/p><\/div>\n<div style=\"display: flex; gap: 10px; flex-wrap: wrap; margin: 18px 0 0;\">\n        <button id=\"bl-btn\" class=\"button\" style=\"background: var(--accent, #7ee787); color: #0b1114; border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Durchrechnen<\/button><br \/>\n        <button id=\"bl-beispiel\" class=\"button\" type=\"button\" style=\"background: transparent; color: var(--text-primary, #e8e8ee); border: 1px solid var(--border, #2a2a35); padding: 12px 20px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Beispiel laden<\/button>\n    <\/div>\n<div id=\"bl-ergebnis\" style=\"margin-top: 22px;\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Eine Zusammenf\u00fchrung in Looker Studio addiert keine Tabellen, sie verkn\u00fcpft sie. Tr\u00e4gt die rechte Seite mehr als eine Zeile je Schl\u00fcssel, wird jede linke Zeile wiederholt und ihre Kennzahlen z\u00e4hlen mehrfach. Die Rechnung darunter zeigt das, bevor es das Diagramm tut.\",\"h_links\":\"Linke Tabelle\",\"h_rechts\":\"Rechte Tabelle\",\"label_quelle\":\"Name\",\"label_zeilen\":\"Zeilen\",\"label_schluessel\":\"Verschiedene Werte des Schl\u00fcssels\",\"label_art\":\"Art der Verkn\u00fcpfung\",\"art_links\":\"links au\u00dfen\",\"art_innen\":\"innen\",\"art_rechts\":\"rechts au\u00dfen\",\"art_voll\":\"voll au\u00dfen\",\"art_kreuz\":\"kreuz\",\"label_treffer\":\"Anteil der linken Schl\u00fcssel, die rechts vorkommen, in Prozent\",\"label_kennzahl\":\"Kennzahl der linken Tabelle (Summe)\",\"label_felder\":\"Verkn\u00fcpfungsfelder\",\"knopf\":\"Durchrechnen\",\"beispiel\":\"Beispiel laden\",\"fehler_zeilen\":\"Beide Zeilenzahlen m\u00fcssen ganze Zahlen \u00fcber null sein.\",\"fehler_schluessel\":\"Beide Schl\u00fcsselzahlen m\u00fcssen ganze Zahlen \u00fcber null sein.\",\"fehler_mehr_schluessel\":\"Eine Tabelle kann nicht mehr verschiedene Schl\u00fcssel als Zeilen haben.\",\"fehler_treffer\":\"Der Anteil muss zwischen 0 und 100 liegen.\",\"fehler_kennzahl\":\"Die Kennzahl muss eine Zahl ab 0 sein.\",\"h_ergebnis\":\"Was die Zusammenf\u00fchrung erzeugt\",\"h_befunde\":\"Befunde\",\"h_formel\":\"Feld f\u00fcr einen sauberen Schl\u00fcssel\",\"h_pruefliste\":\"Bevor die Zusammenf\u00fchrung in Betrieb geht\",\"z_links_je\":\"Zeilen je Schl\u00fcssel links\",\"z_rechts_je\":\"Zeilen je Schl\u00fcssel rechts\",\"z_passend\":\"Schl\u00fcssel mit Treffer\",\"z_zeilen\":\"Zeilen nach der Verkn\u00fcpfung\",\"z_kennzahl_vorher\":\"Kennzahl vor der Zusammenf\u00fchrung\",\"z_kennzahl_nachher\":\"Kennzahl nach der Zusammenf\u00fchrung\",\"z_faktor\":\"Faktor der Aufbl\u00e4hung\",\"formel_erklaerung\":\"Schl\u00fcssel passen selten von allein: ein Leerzeichen zu viel oder ein Gro\u00dfbuchstabe gen\u00fcgt, um sie auseinanderzutreiben. Ein berechnetes Feld auf beiden Seiten stellt sie gleich.\",\"b_kreuz\":\"Eine Kreuzverkn\u00fcpfung paart jede Zeile mit jeder anderen. Das braucht ein Bericht fast nie, und es w\u00e4chst schnell ins Unhandliche.\",\"b_vervielfacht\":\"Die rechte Tabelle tr\u00e4gt %s Zeilen je Schl\u00fcssel, jede linke Zeile erscheint dadurch %n mal und ihre Kennzahlen z\u00e4hlen so oft mit.\",\"b_beidseitig\":\"Beide Seiten tragen mehrere Zeilen je Schl\u00fcssel. Das Ergebnis w\u00e4chst mit dem Produkt aus beiden, das ist der klassische Ausrei\u00dfer.\",\"b_sauber\":\"Auf beiden Seiten eine Zeile je Schl\u00fcssel: diese Verkn\u00fcpfung erg\u00e4nzt Spalten, ohne Zeilen zu vervielfachen.\",\"b_innen_verliert\":\"Eine innere Verkn\u00fcpfung verwirft Zeilen ohne Partner - rund %s Zeilen der linken Tabelle verschwinden aus dem Bericht.\",\"b_links_leer\":\"Linke Zeilen ohne Partner bleiben erhalten, ihre Spalten von rechts bleiben aber leer und erscheinen im Diagramm als null.\",\"b_wenig_treffer\":\"Nur %s Prozent der Schl\u00fcssel treffen. Dahinter steckt meist ein unterschiedlich gebauter Schl\u00fcssel und keine fehlenden Daten.\",\"b_mehrere_felder\":\"%s Verkn\u00fcpfungsfelder: alle m\u00fcssen genau \u00fcbereinstimmen, und jedes weitere Feld senkt die Zahl der Treffer.\",\"b_ohne_feld\":\"Es ist kein Verkn\u00fcpfungsfeld genannt. Ohne Schl\u00fcssel hat die Zusammenf\u00fchrung nichts, woran sie ansetzen kann.\",\"l_datum\":\"Der Zeitraum einer Zusammenf\u00fchrung richtet sich nach der ersten Tabelle. Ein zweites Datumsfeld daneben erzeugt L\u00fccken, die wie fehlende Daten aussehen.\",\"l_granular\":\"Zusammenf\u00fchrungen verkn\u00fcpfen bereits Verdichtetes. Beide Seiten m\u00fcssen vorher auf dieselbe K\u00f6rnung verdichtet sein, sonst trifft der Schl\u00fcssel nie.\",\"l_kennzahl\":\"Kennzahlen der rechten Tabelle lassen sich hinterher nicht neu verdichten. Was vervielfacht ankommt, bleibt vervielfacht.\",\"l_reihenfolge\":\"Die Reihenfolge der Tabellen entscheidet \u00fcber das Ergebnis: links und rechts zu tauschen macht aus einer linken Verkn\u00fcpfung einen anderen Bericht.\",\"l_gegenprobe\":\"Die Gegenprobe, die eine Minute kostet: die Summe einer Kennzahl vor und nach der Zusammenf\u00fchrung vergleichen. Ist sie gewachsen, hat die Verkn\u00fcpfung Zeilen vervielfacht.\"};<\/p>\n<p>    \/\/ --- reine Rechenlogik ---<\/p>\n<p>    function zahl(wert) {\n        const roh = String(wert === undefined || wert === null ? '' : wert).trim().replace(\/[\\s.]\/g, '').replace(',', '.');\n        if (roh === '') { return NaN; }\n        if (!\/^[0-9]+(\\.[0-9]+)?$\/.test(roh)) { return NaN; }\n        return parseFloat(roh);\n    }<\/p>\n<p>    function trennen(text) {\n        return String(text === undefined || text === null ? '' : text)\n            .split(\/[,;]+\/)\n            .map(function (s) { return s.trim(); })\n            .filter(function (s) { return s !== ''; });\n    }<\/p>\n<p>    function rechnen(e) {\n        const ergebnis = { ok: false, fehler: '', befunde: [], felder: [] };\n        const eingabe = e || {};<\/p>\n<p>        const lZeilen = zahl(eingabe.lZeilen);\n        const lSchluessel = zahl(eingabe.lSchluessel);\n        const rZeilen = zahl(eingabe.rZeilen);\n        const rSchluessel = zahl(eingabe.rSchluessel);\n        const treffer = zahl(eingabe.treffer);\n        const kennzahl = eingabe.kennzahl === '' || eingabe.kennzahl === undefined ? 0 : zahl(eingabe.kennzahl);<\/p>\n<p>        if (!isFinite(lZeilen) || !isFinite(rZeilen) || lZeilen <= 0 || rZeilen <= 0) {\n            ergebnis.fehler = T.fehler_zeilen;\n            return ergebnis;\n        }\n        if (!isFinite(lSchluessel) || !isFinite(rSchluessel) || lSchluessel <= 0 || rSchluessel <= 0) {\n            ergebnis.fehler = T.fehler_schluessel;\n            return ergebnis;\n        }\n        if (lSchluessel > lZeilen || rSchluessel > rZeilen) {\n            ergebnis.fehler = T.fehler_mehr_schluessel;\n            return ergebnis;\n        }\n        if (!isFinite(treffer) || treffer < 0 || treffer > 100) {\n            ergebnis.fehler = T.fehler_treffer;\n            return ergebnis;\n        }\n        if (!isFinite(kennzahl) || kennzahl < 0) {\n            ergebnis.fehler = T.fehler_kennzahl;\n            return ergebnis;\n        }\n\n        const art = ['links', 'innen', 'rechts', 'voll', 'kreuz'].indexOf(eingabe.art) !== -1 ? eingabe.art : 'links';\n\n        \/\/ Zeilen je Schluessel: genau daran entscheidet sich, ob eine\n        \/\/ Verknuepfung Zeilen vervielfacht.\n        const mLinks = lZeilen \/ lSchluessel;\n        const mRechts = rZeilen \/ rSchluessel;\n        const passendeSchluessel = Math.round(lSchluessel * (treffer \/ 100));\n\n        let zeilen;\n        if (art === 'kreuz') {\n            zeilen = lZeilen * rZeilen;\n        } else {\n            const innen = passendeSchluessel * mLinks * mRechts;\n            const linksAllein = (lSchluessel - passendeSchluessel) * mLinks;\n            \/\/ Wie viele rechte Schluessel keinen Partner haben, laesst sich aus\n            \/\/ der Trefferquote der linken Seite nur schaetzen.\n            const rechtsAllein = Math.max(0, (rSchluessel - passendeSchluessel)) * mRechts;\n            if (art === 'innen') { zeilen = innen; }\n            else if (art === 'links') { zeilen = innen + linksAllein; }\n            else if (art === 'rechts') { zeilen = innen + rechtsAllein; }\n            else { zeilen = innen + linksAllein + rechtsAllein; }\n        }\n\n        const faktor = art === 'kreuz' ? rZeilen : mRechts;\n        const kennzahlNachher = kennzahl * (art === 'kreuz' ? rZeilen : mRechts);\n\n        ergebnis.ok = true;\n        ergebnis.art = art;\n        ergebnis.mLinks = Math.round(mLinks * 100) \/ 100;\n        ergebnis.mRechts = Math.round(mRechts * 100) \/ 100;\n        ergebnis.passendeSchluessel = passendeSchluessel;\n        ergebnis.zeilen = Math.round(zeilen);\n        ergebnis.faktor = Math.round(faktor * 100) \/ 100;\n        ergebnis.kennzahl = kennzahl;\n        ergebnis.kennzahlNachher = Math.round(kennzahlNachher * 100) \/ 100;\n        ergebnis.verloren = art === 'innen' ? Math.round((lSchluessel - passendeSchluessel) * mLinks) : 0;\n        ergebnis.felder = trennen(eingabe.felder);\n\n        \/\/ --- Befunde ---\n        if (art === 'kreuz') {\n            ergebnis.befunde.push({ schwer: true, text: T.b_kreuz });\n        }\n        if (mRechts > 1.01) {\n            ergebnis.befunde.push({ schwer: true, text: T.b_vervielfacht.replace('%s', String(ergebnis.mRechts)).replace('%n', String(ergebnis.faktor)) });\n        }\n        if (mLinks > 1.01 && mRechts > 1.01) {\n            ergebnis.befunde.push({ schwer: true, text: T.b_beidseitig });\n        }\n        if (mRechts <= 1.01 &#038;&#038; mLinks <= 1.01 &#038;&#038; art !== 'kreuz') {\n            ergebnis.befunde.push({ schwer: false, text: T.b_sauber });\n        }\n        if (art === 'innen' &#038;&#038; treffer < 100) {\n            ergebnis.befunde.push({ schwer: true, text: T.b_innen_verliert.replace('%s', String(ergebnis.verloren)) });\n        }\n        if (art === 'links' &#038;&#038; treffer < 100) {\n            ergebnis.befunde.push({ schwer: false, text: T.b_links_leer });\n        }\n        if (treffer < 60) {\n            ergebnis.befunde.push({ schwer: true, text: T.b_wenig_treffer.replace('%s', String(treffer)) });\n        }\n        if (ergebnis.felder.length > 1) {\n            ergebnis.befunde.push({ schwer: false, text: T.b_mehrere_felder.replace('%s', String(ergebnis.felder.length)) });\n        }\n        if (ergebnis.felder.length === 0) {\n            ergebnis.befunde.push({ schwer: true, text: T.b_ohne_feld });\n        }<\/p>\n<p>        \/\/ --- Feld zur Vereinheitlichung des Schluessels ---\n        if (ergebnis.felder.length) {\n            const teile = ergebnis.felder.map(function (f) { return 'LOWER(TRIM(' + f + '))'; });\n            ergebnis.formel = teile.length === 1 ? teile[0] : 'CONCAT(' + teile.join(', \"|\", ') + ')';\n        } else {\n            ergebnis.formel = '';\n        }<\/p>\n<p>        return ergebnis;\n    }<\/p>\n<p>    if (typeof window !== 'undefined') {\n        window.LW_TEST = window.LW_TEST || {};\n        window.LW_TEST.BL = { rechnen: rechnen, zahl: zahl, trennen: trennen };\n    }<\/p>\n<p>    \/\/ --- Anbindung an das Dokument ---<\/p>\n<p>    const btn = document.getElementById('bl-btn');\n    const out = document.getElementById('bl-ergebnis');\n    const beispielBtn = document.getElementById('bl-beispiel');\n    if (!btn || !out || !beispielBtn) { return; }<\/p>\n<p>    const KASTEN = 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 6px; padding: 14px; margin-bottom: 18px;';\n    const UEBERSCHRIFT = 'color: var(--text-primary, #e8e8ee); font-weight: 700; margin-bottom: 8px;';<\/p>\n<p>    function el(tag, css, text) {\n        const knoten = document.createElement(tag);\n        if (css) { knoten.setAttribute('style', css); }\n        if (text !== undefined && text !== null) { knoten.textContent = text; }\n        return knoten;\n    }<\/p>\n<p>    function wert(id) {\n        const knoten = document.getElementById(id);\n        return knoten ? knoten.value : '';\n    }<\/p>\n<p>    function zeile(kasten, name, inhalt, hervor) {\n        const z = el('div', 'display: flex; justify-content: space-between; gap: 14px; flex-wrap: wrap; padding: 5px 0;');\n        z.appendChild(el('span', 'color: var(--text-secondary, #a0a0b0);', name));\n        z.appendChild(el('span', 'color: ' + (hervor ? '#ffb86c' : 'var(--text-primary, #e8e8ee)') + '; font-family: monospace;', inhalt));\n        kasten.appendChild(z);\n    }<\/p>\n<p>    function zeigen(erg) {\n        out.textContent = '';<\/p>\n<p>        out.appendChild(el('div', UEBERSCHRIFT, T.h_ergebnis));\n        const kasten = el('div', KASTEN);\n        zeile(kasten, T.z_links_je, String(erg.mLinks));\n        zeile(kasten, T.z_rechts_je, String(erg.mRechts), erg.mRechts > 1.01);\n        zeile(kasten, T.z_passend, String(erg.passendeSchluessel));\n        zeile(kasten, T.z_zeilen, String(erg.zeilen), erg.faktor > 1.01);\n        if (erg.kennzahl > 0) {\n            zeile(kasten, T.z_kennzahl_vorher, String(erg.kennzahl));\n            zeile(kasten, T.z_kennzahl_nachher, String(erg.kennzahlNachher), erg.kennzahlNachher > erg.kennzahl * 1.01);\n            zeile(kasten, T.z_faktor, erg.faktor + ' x', erg.faktor > 1.01);\n        }\n        out.appendChild(kasten);<\/p>\n<p>        if (erg.befunde.length) {\n            out.appendChild(el('div', UEBERSCHRIFT, T.h_befunde));\n            const befunde = el('div', KASTEN);\n            erg.befunde.forEach(function (b) {\n                const z = el('div', 'display: flex; gap: 10px; padding: 5px 0;');\n                z.appendChild(el('span', 'color: ' + (b.schwer ? '#ffb86c' : 'var(--accent, #7ee787)') + '; font-family: monospace;', b.schwer ? '!' : '+'));\n                z.appendChild(el('span', 'color: var(--text-secondary, #a0a0b0); font-size: 0.9rem; line-height: 1.5;', b.text));\n                befunde.appendChild(z);\n            });\n            out.appendChild(befunde);\n        }<\/p>\n<p>        if (erg.formel) {\n            out.appendChild(el('div', UEBERSCHRIFT, T.h_formel));\n            out.appendChild(el('div', 'color: var(--text-secondary, #a0a0b0); font-size: 0.85rem; margin-bottom: 8px;', T.formel_erklaerung));\n            out.appendChild(el('pre', 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); padding: 16px; border-radius: 6px; overflow-x: auto; font-family: monospace; font-size: 0.85rem; white-space: pre-wrap; word-break: break-all; margin-bottom: 18px;', erg.formel));\n        }<\/p>\n<p>        out.appendChild(el('div', UEBERSCHRIFT, T.h_pruefliste));\n        const liste = el('div', KASTEN);\n        [T.l_datum, T.l_granular, T.l_kennzahl, T.l_reihenfolge, T.l_gegenprobe].forEach(function (text) {\n            liste.appendChild(el('div', 'color: var(--text-secondary, #a0a0b0); font-size: 0.88rem; line-height: 1.6; padding: 5px 0;', text));\n        });\n        out.appendChild(liste);\n    }<\/p>\n<p>    btn.addEventListener('click', function () {\n        const erg = rechnen({\n            lZeilen: wert('bl-l-zeilen'),\n            lSchluessel: wert('bl-l-schluessel'),\n            rZeilen: wert('bl-r-zeilen'),\n            rSchluessel: wert('bl-r-schluessel'),\n            art: wert('bl-art'),\n            treffer: wert('bl-treffer'),\n            kennzahl: wert('bl-kennzahl'),\n            felder: wert('bl-felder')\n        });\n        out.textContent = '';\n        if (!erg.ok) {\n            out.appendChild(el('div', 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-left: 3px solid #ffb86c; color: var(--text-secondary, #a0a0b0); padding: 14px; border-radius: 6px;', erg.fehler));\n            return;\n        }\n        zeigen(erg);\n    });<\/p>\n<p>    beispielBtn.addEventListener('click', function () {\n        document.getElementById('bl-l-zeilen').value = '1000';\n        document.getElementById('bl-l-schluessel').value = '1000';\n        document.getElementById('bl-r-zeilen').value = '3000';\n        document.getElementById('bl-r-schluessel').value = '1000';\n        document.getElementById('bl-art').value = 'links';\n        document.getElementById('bl-treffer').value = '80';\n        document.getElementById('bl-kennzahl').value = '12500';\n        document.getElementById('bl-felder').value = 'Kampagne, Datum';\n        btn.click();\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Rechnet aus, wie viele Zeilen eine Zusammenf\u00fchrung erzeugt und um welchen Faktor eine Kennzahl der linken Tabelle dabei aufgebl\u00e4ht wird, bevor die Zahlen in einem Diagramm landen.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9283,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92088,92091],"class_list":["post-10248","page","type-page","status-publish","hentry","tag-data-quality-de","tag-google-analytics-4-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Planer f\u00fcr Datenzusammenf\u00fchrungen in Looker Studio - Lukas Wojcik - Blog<\/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.lukaswojcik.com\/blog\/de\/werkzeuge\/looker-studio-blend-join-planner\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Planer f\u00fcr Datenzusammenf\u00fchrungen in Looker Studio - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Rechnet aus, wie viele Zeilen eine Zusammenf\u00fchrung erzeugt und um welchen Faktor eine Kennzahl der linken Tabelle dabei aufgebl\u00e4ht wird, bevor die Zahlen in einem Diagramm landen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/looker-studio-blend-join-planner\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/looker-studio-blend-join-planner\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/looker-studio-blend-join-planner\\\/\",\"name\":\"Planer f\u00fcr Datenzusammenf\u00fchrungen in Looker Studio - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-14T22:34:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/looker-studio-blend-join-planner\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/looker-studio-blend-join-planner\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/looker-studio-blend-join-planner\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-2\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Planer f\u00fcr Datenzusammenf\u00fchrungen in Looker Studio\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"luky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Planer f\u00fcr Datenzusammenf\u00fchrungen in Looker Studio - Lukas Wojcik - Blog","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.lukaswojcik.com\/blog\/de\/werkzeuge\/looker-studio-blend-join-planner\/","og_locale":"en_US","og_type":"article","og_title":"Planer f\u00fcr Datenzusammenf\u00fchrungen in Looker Studio - Lukas Wojcik - Blog","og_description":"Rechnet aus, wie viele Zeilen eine Zusammenf\u00fchrung erzeugt und um welchen Faktor eine Kennzahl der linken Tabelle dabei aufgebl\u00e4ht wird, bevor die Zahlen in einem Diagramm landen.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/looker-studio-blend-join-planner\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/looker-studio-blend-join-planner\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/looker-studio-blend-join-planner\/","name":"Planer f\u00fcr Datenzusammenf\u00fchrungen in Looker Studio - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-14T22:34:10+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/looker-studio-blend-join-planner\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/looker-studio-blend-join-planner\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/looker-studio-blend-join-planner\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-2\/"},{"@type":"ListItem","position":3,"name":"Planer f\u00fcr Datenzusammenf\u00fchrungen in Looker Studio"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"luky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/10248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=10248"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/10248\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9283"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10248"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}