{"id":13053,"date":"2026-08-28T13:39:19","date_gmt":"2026-08-28T11:39:19","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/narzedzia\/conversion-window-audience-duration-calculator\/"},"modified":"2026-08-28T13:39:19","modified_gmt":"2026-08-28T11:39:19","slug":"conversion-window-audience-duration-calculator","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/conversion-window-audience-duration-calculator\/","title":{"rendered":"Kalkulator okna konwersji i czasu cz\u0142onkostwa odbiorc\u00f3w"},"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;\">Trzy ustawienia decyduj\u0105 o liczbach, kt\u00f3re wygl\u0105daj\u0105 jak wyniki. Okno konwersji decyduje o tym, ile ze sprzeda\u017cy, kt\u00f3re nast\u0105pi\u0142y, zostanie policzonych, a nie ile ich nast\u0105pi\u0142o. Drugie, kr\u00f3tsze okno na jednym rodzaju kontaktu usuwa wszystko, co przychodzi po nim. A czas cz\u0142onkostwa mno\u017cy si\u0119 przez dzienny nap\u0142yw &#8211; skr\u00f3cenie go o po\u0142ow\u0119 nie przycina listy, tylko j\u0105 po\u0142owi. Wszystkie trzy to rachunki i wszystkie trzy da si\u0119 policzy\u0107, zanim ustawienie zostanie zmienione.<\/p>\n<div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; margin-bottom: 14px;\">\n<div>\n            <label for=\"kf-taeglich\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Konwersje dziennie, kt\u00f3re ostatecznie dochodz\u0105 do skutku<\/label><br \/>\n            <input id=\"kf-taeglich\" type=\"number\" min=\"0\" step=\"10\" value=\"500\" 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; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-median\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Mediana op\u00f3\u017anienia, dni<\/label><br \/>\n            <input id=\"kf-median\" type=\"number\" min=\"0.1\" step=\"0.5\" value=\"7\" 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; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-fenstera\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Okno A, dni<\/label><br \/>\n            <input id=\"kf-fenstera\" type=\"number\" min=\"1\" max=\"540\" step=\"1\" value=\"30\" 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; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-fensterb\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Okno B, dni<\/label><br \/>\n            <input id=\"kf-fensterb\" type=\"number\" min=\"1\" max=\"540\" step=\"1\" value=\"90\" 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; box-sizing: border-box;\">\n        <\/div>\n<\/p><\/div>\n<div style=\"margin-bottom: 14px;\">\n        <label for=\"kf-verteilung\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Zmierzone op\u00f3\u017anienie, w wierszu: dzie\u0144, konwersje<\/label><br \/>\n        <textarea id=\"kf-verteilung\" rows=\"4\" 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; box-sizing: border-box; font-family: monospace; font-size: 0.82rem;\"><\/textarea>\n    <\/div>\n<div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; margin-bottom: 14px;\">\n<div>\n            <label for=\"kf-anteilkurz\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Kontakty z kr\u00f3tkim oknem, %<\/label><br \/>\n            <input id=\"kf-anteilkurz\" type=\"number\" min=\"0\" max=\"100\" step=\"1\" value=\"35\" 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; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-fensterkurz\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Kr\u00f3tkie okno, dni<\/label><br \/>\n            <input id=\"kf-fensterkurz\" type=\"number\" min=\"1\" max=\"30\" step=\"1\" value=\"1\" 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; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-zulauf\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Dzienny nap\u0142yw do grupy odbiorc\u00f3w<\/label><br \/>\n            <input id=\"kf-zulauf\" type=\"number\" min=\"0\" step=\"100\" value=\"2000\" 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; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-dauera\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Czas cz\u0142onkostwa A, dni<\/label><br \/>\n            <input id=\"kf-dauera\" type=\"number\" min=\"1\" max=\"10000\" step=\"1\" value=\"60\" 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; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-dauerb\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Czas cz\u0142onkostwa B, dni<\/label><br \/>\n            <input id=\"kf-dauerb\" type=\"number\" min=\"1\" max=\"10000\" step=\"1\" value=\"540\" 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; box-sizing: border-box;\">\n        <\/div>\n<\/p><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">Gdy pole op\u00f3\u017anienia pozostaje puste, rachunek korzysta z modelu wyk\u0142adniczego, w kt\u00f3rym do dnia mediany dociera dok\u0142adnie po\u0142owa konwersji. Po wklejeniu zmierzonych danych model nie jest u\u017cywany wcale &#8211; dzie\u0144 1 oznacza: w ci\u0105gu pierwszej doby po kontakcie, a okno n dni obejmuje ka\u017cdy wiersz do dnia n w\u0142\u0105cznie.<\/p>\n<p>    <button id=\"kf-btn\" class=\"button\" style=\"background: var(--accent, #7ee787); color: var(--on-accent, #0b1114); border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Oblicz<\/button><\/p>\n<div id=\"kf-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Trzy ustawienia decyduj\u0105 o liczbach, kt\u00f3re wygl\u0105daj\u0105 jak wyniki. Okno konwersji decyduje o tym, ile ze sprzeda\u017cy, kt\u00f3re nast\u0105pi\u0142y, zostanie policzonych, a nie ile ich nast\u0105pi\u0142o. Drugie, kr\u00f3tsze okno na jednym rodzaju kontaktu usuwa wszystko, co przychodzi po nim. A czas cz\u0142onkostwa mno\u017cy si\u0119 przez dzienny nap\u0142yw - skr\u00f3cenie go o po\u0142ow\u0119 nie przycina listy, tylko j\u0105 po\u0142owi. Wszystkie trzy to rachunki i wszystkie trzy da si\u0119 policzy\u0107, zanim ustawienie zostanie zmienione.\",\"label_taeglich\":\"Konwersje dziennie, kt\u00f3re ostatecznie dochodz\u0105 do skutku\",\"label_median\":\"Mediana op\u00f3\u017anienia, dni\",\"label_verteilung\":\"Zmierzone op\u00f3\u017anienie, w wierszu: dzie\u0144, konwersje\",\"label_fenstera\":\"Okno A, dni\",\"label_fensterb\":\"Okno B, dni\",\"label_anteilkurz\":\"Kontakty z kr\u00f3tkim oknem, %\",\"label_fensterkurz\":\"Kr\u00f3tkie okno, dni\",\"label_zulauf\":\"Dzienny nap\u0142yw do grupy odbiorc\u00f3w\",\"label_dauera\":\"Czas cz\u0142onkostwa A, dni\",\"label_dauerb\":\"Czas cz\u0142onkostwa B, dni\",\"modell_erklaerung\":\"Gdy pole op\u00f3\u017anienia pozostaje puste, rachunek korzysta z modelu wyk\u0142adniczego, w kt\u00f3rym do dnia mediany dociera dok\u0142adnie po\u0142owa konwersji. Po wklejeniu zmierzonych danych model nie jest u\u017cywany wcale - dzie\u0144 1 oznacza: w ci\u0105gu pierwszej doby po kontakcie, a okno n dni obejmuje ka\u017cdy wiersz do dnia n w\u0142\u0105cznie.\",\"knopf\":\"Oblicz\",\"h_fenster\":\"Co zmienia okno\",\"zeile_quelle\":\"Podstawa rachunku\",\"quelle_verteilung\":\"wklejone dane o op\u00f3\u017anieniu\",\"quelle_modell\":\"model wyk\u0142adniczy\",\"zeile_anteila\":\"Obj\u0119te oknem A\",\"zeile_anteilb\":\"Obj\u0119te oknem B\",\"zeile_gemeldeta\":\"Raportowane dziennie, okno A\",\"zeile_gemeldetb\":\"Raportowane dziennie, okno B\",\"zeile_unterschied\":\"R\u00f3\u017cnica\",\"zeile_grenzertrag\":\"Co daje jeden dzie\u0144 ponad A\",\"h_tabelle\":\"Przez typowe okna\",\"spalte_fenster\":\"Okno\",\"spalte_anteil\":\"Obj\u0119te\",\"spalte_gemeldet\":\"Raportowane dziennie\",\"einheit_tage\":\"dni\",\"h_geteilt\":\"Kr\u00f3tkie okno dla cz\u0119\u015bci kontakt\u00f3w\",\"zeile_einheitlich\":\"Jedno okno na wszystko\",\"zeile_gemischt\":\"Okna rozdzielone\",\"zeile_verlust\":\"Wypada\",\"h_bestand\":\"Grupa odbiorc\u00f3w w stanie ustalonym\",\"zeile_bestanda\":\"Wielko\u015b\u0107 listy przy czasie A\",\"zeile_bestandb\":\"Wielko\u015b\u0107 listy przy czasie B\",\"zeile_faktor\":\"Stosunek\",\"h_hinweise\":\"Uwagi\",\"hinweis_keine_konversionen\":\"Bez dziennej liczby konwersji sensowne s\u0105 jedynie udzia\u0142y; kolumny bezwzgl\u0119dne zostaj\u0105 na zerze.\",\"hinweis_verteilung_genutzt\":\"U\u017cywane s\u0105 wklejone dane o op\u00f3\u017anieniu. Pole mediany pozostaje bez znaczenia, dop\u00f3ki te dane tam stoj\u0105.\",\"hinweis_modell_genutzt\":\"Nie wklejono danych o op\u00f3\u017anieniu, wi\u0119c pracuje model wyk\u0142adniczy z podan\u0105 median\u0105.\",\"hinweis_kein_median\":\"Bez mediany powy\u017cej zera i bez wklejonych danych nie ma czego rozk\u0142ada\u0107; ka\u017cdy udzia\u0142 zostaje na zerze.\",\"hinweis_zeilen_verworfen\":\"Tych wierszy nie da\u0142o si\u0119 odczyta\u0107 jako dnia i liczby, wi\u0119c pozosta\u0142y pomini\u0119te: {verworfen}\",\"hinweis_fenster_gleich\":\"Oba okna s\u0105 tej samej d\u0142ugo\u015bci, r\u00f3\u017cnica jest wi\u0119c z za\u0142o\u017cenia zerowa.\",\"hinweis_mehr_gezaehlt\":\"R\u00f3\u017cnica sk\u0142ada si\u0119 z raportowanych konwersji, a nie z dodatkowej sprzeda\u017cy. Kupiono w obu przypadkach to samo - okno decyduje jedynie o tym, kt\u00f3re z tego raport mo\u017ce pokaza\u0107.\",\"hinweis_bruch\":\"Zmiana okna dzieli szereg czasowy w dniu zmiany. Liczby sprzed i po nie s\u0105 por\u00f3wnywalne, \u017cadne przeliczenie nie odtworzy starszej strony, a por\u00f3wnanie rok do roku przeskakuje ten szew, nic o tym nie m\u00f3wi\u0105c.\",\"hinweis_kurzfenster\":\"Kr\u00f3tkie okno obowi\u0105zuje dla cz\u0119\u015bci kontakt\u00f3w. Wszystko, co konwertuje p\u00f3\u017aniej, wypada z ka\u017cdej kolumny - nie do osobnej i nie do mniejszej wagi atrybucji.\",\"hinweis_bestand_faktor\":\"W stanie ustalonym lista to jej dzienny nap\u0142yw razy czas cz\u0142onkostwa; stosunek czas\u00f3w jest wi\u0119c stosunkiem wielko\u015bci list: wsp\u00f3\u0142czynnik {faktor} przy tej samej grupie odbiorc\u00f3w.\",\"hinweis_bestand_annahme\":\"Liczba dla stanu ustalonego zak\u0142ada sta\u0142y nap\u0142yw i cz\u0142onk\u00f3w odchodz\u0105cych dok\u0142adnie na koniec okresu. Po zmianie prawdziwa lista potrzebuje pe\u0142nego okresu, zanim osi\u0105gnie now\u0105 wielko\u015b\u0107.\",\"hinweis_schwanz\":\"Model wyk\u0142adniczy umieszcza po\u0142ow\u0119 konwersji w obr\u0119bie mediany. Zmierzone op\u00f3\u017anienia nios\u0105 zwykle ci\u0119\u017cszy ogon, wi\u0119c d\u0142ugie okna zyskuj\u0105 raczej nieco wi\u0119cej ni\u017c tu pokazano.\",\"dezimal\":\",\"};<\/p>\n<p>    var TABELLE = [1, 3, 7, 14, 30, 60, 90];<\/p>\n<p>    function zahl(wert, ersatz) {\n        var n = Number(wert);\n        return isFinite(n) ? n : ersatz;\n    }<\/p>\n<p>    \/**\n     * Liest eine eingefuegte Verzoegerungsverteilung: je Zeile ein Tag und die\n     * Zahl der Konversionen mit dieser Verzoegerung. Tag 1 heisst: innerhalb\n     * des ersten Tages nach der Beruehrung.\n     *\/\n    function verteilungLesen(text) {\n        var punkte = [];\n        var ungueltig = [];\n        var zeilen = String(text == null ? '' : text).split(\/\\r\\n|\\r|\\n\/);\n        zeilen.forEach(function (z) {\n            var roh = z.replace(\/^\\s+|\\s+$\/g, '');\n            if (!roh.length) { return; }\n            var t = roh.split(\/[,;\\t ]+\/);\n            if (t.length < 2) { ungueltig.push(roh); return; }\n            \/\/ Number('') ist 0, nicht NaN: eine Zeile aus lauter Trennzeichen\n            \/\/ waere sonst lautlos zum Datenpunkt (0,0) geworden. Deshalb wird\n            \/\/ die Schreibweise geprueft und nicht bloss das Ergebnis.\n            if (!\/^\\d+(\\.\\d+)?$\/.test(t[0]) || !\/^\\d+(\\.\\d+)?$\/.test(t[1])) { ungueltig.push(roh); return; }\n            var tag = Number(t[0]);\n            var anzahl = Number(t[1]);\n            if (!isFinite(tag) || !isFinite(anzahl) || tag < 0 || anzahl < 0) { ungueltig.push(roh); return; }\n            punkte.push({ tag: tag, anzahl: anzahl });\n        });\n        var gesamt = punkte.reduce(function (s, p) { return s + p.anzahl; }, 0);\n        return { punkte: punkte, gesamt: gesamt, ungueltig: ungueltig, brauchbar: punkte.length > 0 && gesamt > 0 };\n    }<\/p>\n<p>    \/** Anteil der Konversionen, die innerhalb von w Tagen eintreffen. *\/\n    function anteilAus(w, median, verteilung) {\n        var fenster = zahl(w, 0);\n        if (fenster <= 0) { return 0; }\n        if (verteilung &#038;&#038; verteilung.brauchbar) {\n            var drin = 0;\n            verteilung.punkte.forEach(function (p) { if (p.tag <= fenster) { drin += p.anzahl; } });\n            return drin \/ verteilung.gesamt;\n        }\n        var m = zahl(median, 0);\n        if (m <= 0) { return 0; }\n        \/\/ Exponentialmodell: bei w = Median ist genau die Haelfte eingetroffen.\n        return 1 - Math.pow(2, -fenster \/ m);\n    }\n\n    function rechnen(e) {\n        var ein = e || {};\n        var taeglich = Math.max(0, zahl(ein.taeglich, 0));\n        var median = Math.max(0, zahl(ein.median, 0));\n        var verteilung = verteilungLesen(ein.verteilung);\n        var fensterA = Math.max(0, Math.round(zahl(ein.fensterA, 0)));\n        var fensterB = Math.max(0, Math.round(zahl(ein.fensterB, 0)));\n        var fensterKurz = Math.max(0, Math.round(zahl(ein.fensterKurz, 0)));\n        var anteilKurz = Math.min(1, Math.max(0, zahl(ein.anteilKurz, 0) \/ 100));\n        var zulauf = Math.max(0, zahl(ein.zulauf, 0));\n        var dauerA = Math.max(0, Math.round(zahl(ein.dauerA, 0)));\n        var dauerB = Math.max(0, Math.round(zahl(ein.dauerB, 0)));\n\n        function anteil(w) { return anteilAus(w, median, verteilung); }\n\n        \/\/ --- Fenstervergleich ---\n        var aA = anteil(fensterA);\n        var aB = anteil(fensterB);\n        var gemeldetA = taeglich * aA;\n        var gemeldetB = taeglich * aB;\n        var unterschied = gemeldetB - gemeldetA;\n        var relativ = gemeldetA > 0 ? (gemeldetB \/ gemeldetA - 1) : null;<\/p>\n<p>        var tabelle = TABELLE.map(function (w) {\n            var a = anteil(w);\n            return { fenster: w, anteil: a, gemeldet: taeglich * a };\n        });\n        \/\/ Grenzertrag: was der jeweils naechste Tag ueber Fenster A hinaus bringt.\n        var grenzertrag = taeglich * (anteil(fensterA + 1) - aA);<\/p>\n<p>        \/\/ --- Geteilte Fenster: kurzes Fenster fuer einen Teil der Beruehrungen ---\n        var aKurz = anteil(fensterKurz);\n        var gemischt = anteilKurz * aKurz + (1 - anteilKurz) * aA;\n        var einheitlich = aA;\n        var verlustAnteil = einheitlich - gemischt;\n        var verlustAbsolut = taeglich * verlustAnteil;<\/p>\n<p>        \/\/ --- Zielgruppenbestand im eingeschwungenen Zustand ---\n        var bestandA = zulauf * dauerA;\n        var bestandB = zulauf * dauerB;\n        var faktor = dauerA > 0 ? dauerB \/ dauerA : null;<\/p>\n<p>        var hinweise = [];\n        if (taeglich <= 0) { hinweise.push('keine_konversionen'); }\n        if (verteilung.brauchbar) { hinweise.push('verteilung_genutzt'); }\n        else if (median > 0) { hinweise.push('modell_genutzt'); }\n        else { hinweise.push('kein_median'); }\n        if (verteilung.ungueltig.length) { hinweise.push('zeilen_verworfen'); }\n        if (fensterA === fensterB) { hinweise.push('fenster_gleich'); }\n        if (unterschied > 0) { hinweise.push('mehr_gezaehlt'); }\n        hinweise.push('bruch');\n        if (anteilKurz > 0 && fensterKurz < fensterA) { hinweise.push('kurzfenster'); }\n        if (faktor !== null &#038;&#038; faktor !== 1) { hinweise.push('bestand_faktor'); }\n        hinweise.push('bestand_annahme');\n        if (!verteilung.brauchbar &#038;&#038; median > 0) { hinweise.push('schwanz'); }<\/p>\n<p>        return {\n            anteilA: aA, anteilB: aB, anteilKurzFenster: aKurz,\n            gemeldetA: gemeldetA, gemeldetB: gemeldetB,\n            unterschied: unterschied, relativ: relativ,\n            grenzertrag: grenzertrag,\n            tabelle: tabelle,\n            gemischt: gemischt, einheitlich: einheitlich,\n            verlustAnteil: verlustAnteil, verlustAbsolut: verlustAbsolut,\n            bestandA: bestandA, bestandB: bestandB, faktor: faktor,\n            quelle: verteilung.brauchbar ? 'verteilung' : 'modell',\n            verworfen: verteilung.ungueltig,\n            hinweise: hinweise\n        };\n    }<\/p>\n<p>    \/\/ --- Pruefpunkt ----------------------------------------------------------\n    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.KF = {\n        rechnen: rechnen,\n        anteilAus: anteilAus,\n        verteilungLesen: verteilungLesen,\n        TABELLE: TABELLE,\n        T: T\n    };<\/p>\n<p>    \/\/ --- Oberflaeche ---------------------------------------------------------<\/p>\n<p>    var btn = document.getElementById('kf-btn');\n    var out = document.getElementById('kf-ausgabe');\n    if (!btn || !out) { return; }<\/p>\n<p>    function el(tag, stil, text) {\n        var e = document.createElement(tag);\n        if (stil) { e.setAttribute('style', stil); }\n        if (text !== undefined) { e.textContent = text; }\n        return e;\n    }\n    function wert(id) { var e = document.getElementById(id); return e ? e.value : ''; }\n    function komma(n, stellen) {\n        if (!isFinite(n)) { return '-'; }\n        return Number(n).toFixed(stellen === undefined ? 0 : stellen).replace('.', T.dezimal);\n    }\n    function prozent(a, stellen) {\n        if (a === null || !isFinite(a)) { return '-'; }\n        return komma(a * 100, stellen === undefined ? 1 : stellen) + ' %';\n    }<\/p>\n<p>    var UEBERSCHRIFT = 'font-family: \"Nunito Sans\", sans-serif; font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.92rem; margin: 18px 0 8px;';\n    var ZELLE = 'padding: 5px 12px 5px 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem;';\n    var ZELLE_WERT = 'padding: 5px 12px 5px 0; color: var(--text-primary, #e8e8ee); font-size: 0.87rem; font-family: monospace;';\n    var GUT = ' color: #7ee787;';\n    var WARN = ' color: #ffa94d;';<\/p>\n<p>    function gitter(spalten) {\n        return el('div', 'display: grid; grid-template-columns: ' + spalten + '; gap: 0 18px; align-items: baseline;');\n    }\n    function paar(g, name, w, stil) {\n        g.appendChild(el('div', ZELLE, name));\n        g.appendChild(el('div', ZELLE_WERT + (stil || ''), w));\n    }<\/p>\n<p>    btn.addEventListener('click', function () {\n        var erg = rechnen({\n            taeglich: wert('kf-taeglich'),\n            median: wert('kf-median'),\n            verteilung: wert('kf-verteilung'),\n            fensterA: wert('kf-fenstera'),\n            fensterB: wert('kf-fensterb'),\n            anteilKurz: wert('kf-anteilkurz'),\n            fensterKurz: wert('kf-fensterkurz'),\n            zulauf: wert('kf-zulauf'),\n            dauerA: wert('kf-dauera'),\n            dauerB: wert('kf-dauerb')\n        });\n        out.innerHTML = '';<\/p>\n<p>        \/\/ --- Fenstervergleich ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_fenster));\n        var g1 = gitter('auto auto');\n        paar(g1, T.zeile_quelle, erg.quelle === 'verteilung' ? T.quelle_verteilung : T.quelle_modell);\n        paar(g1, T.zeile_anteila, prozent(erg.anteilA));\n        paar(g1, T.zeile_anteilb, prozent(erg.anteilB));\n        paar(g1, T.zeile_gemeldeta, komma(erg.gemeldetA, 1));\n        paar(g1, T.zeile_gemeldetb, komma(erg.gemeldetB, 1));\n        paar(g1, T.zeile_unterschied, komma(erg.unterschied, 1)\n            + (erg.relativ === null ? '' : '  (' + prozent(erg.relativ) + ')'),\n            erg.unterschied > 0 ? WARN : '');\n        paar(g1, T.zeile_grenzertrag, komma(erg.grenzertrag, 2));\n        out.appendChild(g1);<\/p>\n<p>        \/\/ --- Tabelle ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_tabelle));\n        var tab = gitter('auto auto auto');\n        tab.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', T.spalte_fenster));\n        tab.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', T.spalte_anteil));\n        tab.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', T.spalte_gemeldet));\n        erg.tabelle.forEach(function (r) {\n            tab.appendChild(el('div', ZELLE_WERT, komma(r.fenster) + ' ' + T.einheit_tage));\n            tab.appendChild(el('div', ZELLE_WERT, prozent(r.anteil)));\n            tab.appendChild(el('div', ZELLE_WERT, komma(r.gemeldet, 1)));\n        });\n        out.appendChild(tab);<\/p>\n<p>        \/\/ --- Geteilte Fenster ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_geteilt));\n        var g2 = gitter('auto auto');\n        paar(g2, T.zeile_einheitlich, prozent(erg.einheitlich));\n        paar(g2, T.zeile_gemischt, prozent(erg.gemischt), erg.verlustAnteil > 0 ? WARN : '');\n        paar(g2, T.zeile_verlust, prozent(erg.verlustAnteil) + '  (' + komma(erg.verlustAbsolut, 1) + ')',\n            erg.verlustAnteil > 0 ? WARN : GUT);\n        out.appendChild(g2);<\/p>\n<p>        \/\/ --- Zielgruppenbestand ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_bestand));\n        var g3 = gitter('auto auto');\n        paar(g3, T.zeile_bestanda, komma(erg.bestandA));\n        paar(g3, T.zeile_bestandb, komma(erg.bestandB));\n        paar(g3, T.zeile_faktor, erg.faktor === null ? '-' : (komma(erg.faktor, 2) + ' x'),\n            erg.faktor !== null && erg.faktor !== 1 ? WARN : '');\n        out.appendChild(g3);<\/p>\n<p>        \/\/ --- Hinweise ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_hinweise));\n        var liste = el('ul', 'margin: 0 0 0 18px; padding: 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem; line-height: 1.65;');\n        erg.hinweise.forEach(function (h) {\n            var text = T['hinweis_' + h];\n            if (!text) { return; }\n            text = text.replace('{faktor}', erg.faktor === null ? '-' : komma(erg.faktor, 2))\n                .replace('{verworfen}', erg.verworfen.join(', '));\n            liste.appendChild(el('li', '', text));\n        });\n        out.appendChild(liste);\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Szersze okno konwersji podnosi raportowan\u0105 liczb\u0119, cho\u0107 nie dochodzi ani jedna sprzeda\u017c, kr\u00f3tkie okno na jednym rodzaju kontaktu po cichu odcina reszt\u0119, a lista odbiorc\u00f3w to jej dzienny nap\u0142yw razy czas cz\u0142onkostwa. Trzy ustawienia, trzy nast\u0119pstwa rachunkowe.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9284,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92361,92035,92074],"class_list":["post-13053","page","type-page","status-publish","hentry","tag-attribution-pl","tag-conversion-tracking-pl","tag-google-ads-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kalkulator okna konwersji i czasu cz\u0142onkostwa odbiorc\u00f3w - 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\/pl\/narzedzia\/conversion-window-audience-duration-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kalkulator okna konwersji i czasu cz\u0142onkostwa odbiorc\u00f3w - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Szersze okno konwersji podnosi raportowan\u0105 liczb\u0119, cho\u0107 nie dochodzi ani jedna sprzeda\u017c, kr\u00f3tkie okno na jednym rodzaju kontaktu po cichu odcina reszt\u0119, a lista odbiorc\u00f3w to jej dzienny nap\u0142yw razy czas cz\u0142onkostwa. Trzy ustawienia, trzy nast\u0119pstwa rachunkowe.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/conversion-window-audience-duration-calculator\/\" \/>\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<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/conversion-window-audience-duration-calculator\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/conversion-window-audience-duration-calculator\\\/\",\"name\":\"Kalkulator okna konwersji i czasu cz\u0142onkostwa odbiorc\u00f3w - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-28T11:39:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/conversion-window-audience-duration-calculator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/conversion-window-audience-duration-calculator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/conversion-window-audience-duration-calculator\\\/#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-3\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Kalkulator okna konwersji i czasu cz\u0142onkostwa odbiorc\u00f3w\"}]},{\"@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":"Kalkulator okna konwersji i czasu cz\u0142onkostwa odbiorc\u00f3w - 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\/pl\/narzedzia\/conversion-window-audience-duration-calculator\/","og_locale":"en_US","og_type":"article","og_title":"Kalkulator okna konwersji i czasu cz\u0142onkostwa odbiorc\u00f3w - Lukas Wojcik - Blog","og_description":"Szersze okno konwersji podnosi raportowan\u0105 liczb\u0119, cho\u0107 nie dochodzi ani jedna sprzeda\u017c, kr\u00f3tkie okno na jednym rodzaju kontaktu po cichu odcina reszt\u0119, a lista odbiorc\u00f3w to jej dzienny nap\u0142yw razy czas cz\u0142onkostwa. Trzy ustawienia, trzy nast\u0119pstwa rachunkowe.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/conversion-window-audience-duration-calculator\/","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","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/conversion-window-audience-duration-calculator\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/conversion-window-audience-duration-calculator\/","name":"Kalkulator okna konwersji i czasu cz\u0142onkostwa odbiorc\u00f3w - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-28T11:39:19+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/conversion-window-audience-duration-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/conversion-window-audience-duration-calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/conversion-window-audience-duration-calculator\/#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-3\/"},{"@type":"ListItem","position":3,"name":"Kalkulator okna konwersji i czasu cz\u0142onkostwa odbiorc\u00f3w"}]},{"@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\/13053","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=13053"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/13053\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9284"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13053"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}