;

B jako Byznys, I jako Inteligence

14. 6. 2010
Doba čtení: 4 minuty

Sdílet

Všichni víme, jak se to dělá: Nejdřív se vypumpují pokud možno všechna data všech podnikových systémů a napumpují se do datového skladu a tam se pěkně uskladní. To je první krok na cestě k informační nirváně.

Pak se zjistí, že sklad je bezvadná věc, ale je jaksi problém dostat z něj zboží do oběhu. Prvotní nadšení střídá mírná až větší skepse, neboť nazíráme, že spousta peněz byla utracena za produkci ležáků, ještě k tomu chráněných nedobytnou informační pevností, kterou se náš datový sklad fakticky stal. Takže – co s tím? Peněz už zpravidla moc nezbývá a po zkušenostech s „první fází“ je ochota pustit další spíše mizivá. Potřebujeme rychle něco ukázat, vyzrát na tu prekérní situaci, potřebujeme alespoň nějaké vavříny, abychom obhájili kromě velké myšlenky také své místo na slunci. A aby to moc nestálo. Tedy hlavně ne moc úsilí, není totiž čas na hrdinství. Potřebujeme něco, čemu se odborně říká „kvikvin“. Takže – vyrobíme reporty.

Nejdřív pro ty, kdo nejvíce dotírají. Vytvoříme pro ně tabulky a grafy, ohromíme je spoustou obrázků, barevnými škálami, až žasnou, co všechno a jak pěkně jim počítač může ukázat. Zdá se, že se to povedlo. Dnešní výpočetní technika dokáže skutečné divy. S pěknými obrázky je možno se blýsknout na poradě, při prezentaci, dokonce je publikovat v tisku. Roste zájem a přichází čím dál více „zakázek“, až nakonec máme co dělat, abychom je všechny zvládli. Konečně nastává naše chvíle, kdy, ocitnuvše se na Olympu popularity, máme sílu a důvody praštit do stolu a říci: „Takhle ne, takhle to dál nejde. Potřebujeme na ty reporty něco pořádného“. A – zavedeme pokročilý reportovací systém – „skutečnou business intelligenci“.

Je to ale ještě s malými písmeny, protože vzápětí zjistíme, že to pořád ještě není ono. Je to totiž jako léčit průjem klystýrem, jak praví klasik. Výsledkem je většinou instalace jakéhosi chrliče, jenž produkuje spoustu hezkých sice, ale v podstatě stále stejných a jen málo objevných reportů, které nám, byť efektivně, avšak dosti fádně, stále jen ukazují, co se už vlastně stalo. A hlavní zamýšlený přínos – totiž skutečné „nahlédnutí pod pokličku“ – tedy jak se to stalo, proč se to stalo, co se ještě může stát, a co máme činit, aby se to už víckrát nestalo – tak to nám stále uniká.

Háček je v samotných začátcích. Otcové business intelligence v podnicích jsou totiž tradičně IT profesionálové, kteří vědí, jaké máme systémy a data i jak je dobře prodat, ale už méně vlastní jim je znalost toho, co potřebuje byznys.

Takže – co by měla splňovat Busi­ness Intelligence s velkým B a I?

Předně: Měla by vycházet z potřeb byznysu, kterým se přizpůsobí požadavky na informace, těm pak požadavky na data a nakonec se zvolí způsob, jak je patřičným lidem na patřičná místa doručit. Jinak řečeno: měla by umožňovat dělat „chytrý byznys“, který se jen neohlíží dozadu, ale dokáže se adaptovat na to, co teprve přijde.

Dále: Měla by najít informace, které nejsou „vidět pouhým okem“. Což znamená aplikovat na informační materiál skutečnou chytrost – netriviální metody, postupy a nástroje, které jenom nepřehazují data z jedné úhledné hromady na druhou, ale skutečně je analyzují.

A nakonec: Měla by sloužit těm, kdo dokážou s pokročilými informacemi patřičně naložit – tedy těm, kdo rozumí podstatě svého byznysu, dokáží jej cílit a směřovat na základě toho, co se dověděli (a předtím nevěděli).

Cyber25

Takže jsme se zase dostali zpátky k těm šprochům: Analytické vytěžování informací má  skutečně cosi společné se špionáží. Business intelligence slouží inteligentním lidem, kteří chtějí dobře dělat svůj byznys a umožňuje jej řídit skutečně inteligentně.

V praxi to vše znamená jít na věc „od lesa“ – nahradit hrubou sílu vtipem a elegancí, která umožní hned od začátku požadavky na informace dobře cílit. Cílení znamená účinnou analýzu a rozlišení podstatného. Proto je tak důležité mít už na startu možnost využít zkušeností (s byznysem) a postupů (s analytickými metodami), které v sobě spojují nástroje a řešení, kterým se říká Business Analytics.

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }