Výuka a školení Excelu Výuka a školení Excelu Výuka a školení Excelu
Výuka a školení Excelu Výuka a školení Excelu

pondělí 30. prosince 2013

Power Pivot - moje nové stránky zabývající se Excelem

Power Pivot se tváří jako obyčejný doplněk Excelu. Ve skutečnosti se ale jedná o velmi zajímavou technologii Business Intelligence.
Osobně Power Pivotu předpovídám slibnou budoucnost. Proto vytvářím nový web, zaměřený pouze na něj.
Některé kapitoly jsou zatím ve stavu "rozpracované", některé kapitoly jsou zatím ve stavu "ještě ani ne rozpracované". Nicméně i tak to je jeden z mála souvislých textů / návodů týkajících se Power Pivotu a myslím, že by to pro Vás jako pro čtenáře webu www.excelentnitriky.com mohlo být inspirativní čtení.
Předem díky za zpětnou vazbu.
Jo a také přeji pěkný příští rok!




pátek 27. prosince 2013

Řazení čísel pomocí funkce

Příklad

Potřebuji seřadit čísla v tabulce. Nechci ale (nebo nemohu) to udělat řazením - potřebuji použít funkci.

Návod

Připravím si někde sloupeček, kde budou čísla od jedničky do tolika, kolik je čísel. Pak do vedlejších sloupečku zapíšu funkci LARGE (řazení od největšího), resp. SMALL (řazení od nejmenšího).
Tato funkce bude mít v prvním parametru oblast, kde jsou původní neseřazená čísla, a ve druhém číslo z vedlejšího sloupce. Toto číslo vyjadřuje, kolikáté největší (nejmenší) číslo se právě na této pozici má zobrazit.


Pokud bych se chtěl obejít bez pomocného sloupečku, mohl by zápis funkce vypadat např. takto:
=LARGE(A:A;ŘÁDEK()-1)
V následujícím příkladu je v praxi použita kombinace funkce SMALL a SVYHLEDAT pro seřazení jmen závodníků podle času, kterého dosáhli:
Zápis funkce pak může vypadat např. takto:
=SVYHLEDAT(SMALL($A$2:$A$7;ŘÁDEK()-1);A:B;2;0)

pátek 29. listopadu 2013

Načítání hodnot proměnných z buněk v makrech

V tomto článku se podíváme na jedno základní, užitečné a jednoduché téma z oblasti VBA - načítání hodnot proměnných z buněk.

Příklad

Řekněme, že mám v buňce A1 číslo (nebo text nebo cokoliv), které chci načíst do proměnné "a". Proto, abych s ním mohl nějak počítat nebo provádět libovolné psí kusy.
Otázka tedy je, jak tuto hodnotu vzít z buňky a uložit ji do hodnoty.

Návod

Existuje několik způsobů (i jiné než uvádím tady), a použiji je podle situace.

Načtení proměnné "a" na základě názvu listu a názvu oblasti

a = Worksheets("List1").Range("a1").Value

Načtení proměnné "a" z aktivního listu na základě názvu oblasti

a = ActiveSheet.Range("a1").Value

Načtení proměnné "a" z aktivního listu na základě souřadnic buňky

a = ActiveSheet.Cells(1, 1).Value

Načtení proměnné "a" z aktivní buňky

a = ActiveCell.Value

Příklad makra

Například toto makro zařídí, že excel pípne tolikrát, jak vysoké je číslo v buňce A1.
Neříkám, že zrovna bez tohoto makra nepřežijete, ale jako příklad je to snad OK.

'Název makra a jeho začátek
Sub nacitanihodnot()
    'To, co je v bunce A1, se uloží jako proměnná "a"
    a = Worksheets("List1").Range("a1").Value
    'Zacatek cyklu - ten se bude opakova, dokud nebude "b" (to zacina na nule) stejně velké jako "a"
    Do Until b = a
        '"b" se zvetsi o jednicku
        b = b + 1
            'Pipnuti
            Beep
            'Poseckani jednu vterinu - aby pipnuti nesplynula do jednoho
            Application.Wait (Now + TimeValue("0:00:01"))
    'Navrat na zacatek cyklu - pokud tedy uz neni "a" stejne velke jako "b"
    Loop
'Konec makra

End Sub

úterý 26. listopadu 2013

Propojování tabulek v Excelu, Accessu, Power Pivotu a SQL

Propojování tabulek je téma, které na různých kursech často řešíme. Proto bych chtěl tento článek věnovat tomu, jak se tato otázka řeší v různých typech aplikací. Vybral jsem si ty, které běžný uživatel asi použije nejčastěji - tedy samozřejmě Excel, dále pak Access a Power Pivot, a navíc ještě jazyk SQL - platný plus minus univerzálně v databázových nástrojích.

Příklad

Ve všech čtyřech ukázkách budu pracovat s jedním příkladem. Řekněme, že máme několik zaměstnanců, kteří pracují na pobočkách. Tyto pobočky jsou ve městech.
V jedné tabulce jsou zaměstnanci a čísla poboček, kde pracují. Ve druhé tabulce jsou pobočky a města. Každý zaměstnanec tedy pracuje na určité pobočce, a protože každá pobočka je v určitém městě, tak každý zaměstnanec pracuje i v určitém městě.

Mým cílem je přidat do posledního sloupce v první tabulce města, kde zaměstnanci pracují. Přičemž tato města jsou ve druhé tabulce. K tomuto se tedy chci dopracovat:

Jak na to v Excelu

V Excelu použiji, nám už docela dobře známou, funkci SVYHLEDAT / VLOOKUP.
Zapíšu ji do první buňky oblasti s výsledky a roztáhnu dolů.


Funkce má v první buňce takovouto syntaxi:
=SVYHLEDAT(C4;F:G;2;0)
  • C4 - co se má ve druhé tabulce hledat
  • F:G - kde je tabulka, ze které se čerpá výsledek
  • 2 - z kolikátého sloupce se čerpá výsledek
  • 0 - protože chci přesnou shodu (ne přibližnou)
Více o funkci SVYHLEDAT tady.

Jak na to v Power Pivotu 

V Power Pivotu je třeba nejprve zadat informaci o tom, že a jak jsou tabulky propojeny.
V datovém modelu tedy vytvoříme relaci, která tento vztah zachycuje.

Tím dáme Excelu na vědomí, které tabulky a přes co jsou propojené.
Pak použijeme zápis jazyka DAX a do tabulky s lidmi přidáme vzorec, který odkáže na tabulku s pobočkami.
Syntaxe funkce je:
=related(pobocky[Město])


Kulaté závorky označují tabulku, do které se odkazuji, a hranatá závorka konkrétní sloupec. Vidíme, že syntaxe je výrazně jednodušší než v běžném Excelu. Je to proto, že ve vzorci nemusím určovat, přes co se tabulky propojují. To už je dáno nadefinováním relace (vztahu) tabulek. Funkci RELATED tedy stačí jen jeden parametr oproti čtyřem parametrům, které vyžaduje SVYHLEDAT. 
Výsledek je ale v zásadě podobný jako v předchozím případě.

Jak na to v Accessu

V Accessu je to podobné jako v Power Pivotu. 
Nejprve musíme propojit tabulky, podobně jako v Power Pivotu:

Pak vytvořím dotaz. Tady je tedy principiální rozdíl mezi předchozími dvěma případy a Accessem i SQL. Zatímco v Excelu a v Power Pivotu jsme do jedné tabulky přidávali hodnoty z druhé tabulky, tak v Accessu propojíme tabulky tak, že vytvoříme nový dotaz obsahující sloupce z obou tabulek.

Výsledkem je pak takováto tabulka (která je ovšem ve skutečnosti dotazem):


Jak na to v jazyce SQL

Jazyk SQL se používá univerzálně, nezávisle na technologii.
Dotaz, který jsme si ukázali v předchozím případě, by vypadal takto:
  • SELECT zamestnanci.[Jméno zaměstnance], zamestnanci.[Číslo pobočky], pobočky.Město FROM pobočky INNER JOIN zamestnanci ON pobočky.[Číslo pobočky] = zamestnanci.[Číslo pobočky];
Vysvětlení logiky:
  • SELECT zamestnanci.[Jméno zaměstnance], zamestnanci.[Číslo pobočky], pobočky.Město (vyber Jméno zaměstnance a Číslo pobočky z tabulky "zamestnanci" a dále Město z tabulky "pobočky") FROM pobočky INNER JOIN zamestnanci ON pobočky.[Číslo pobočky] = zamestnanci.[Číslo pobočky] (tabulka "pobočky" je provázaná s tabulkou "zamestnanci" na základě toho, že Číslo pobočky je v obou tabulkách stejné).
Výsledkem je stejný dotaz jako v předchozím případě.

pondělí 11. listopadu 2013

Histogram v Excelu - jak na něj

Histogram je grafické zobrazení rozložení hodnot. Je to typ grafu, který se používá velmi často a v řadě situací.
Např. v takovémto jednoduchém histogramu jsou znázorněny počty bodů, které dostali studenti z testu. Na první pohled vidím, že velká část studentů měla vcelku průměrný počet bodů - a jen několik jich mělo velmi málo nebo naopak hodně bodů.


V tomto článku popíšu několik způsobů, jak histogram vytvořit. Nebo respektive jak vytvořit tabulku, ze které se pak graf vytváří - protože když mám tabulku, je už graf hračka.

Vytvoření histogramu s pomocí kontingenční tabulky

Tento způsob považuji za většinou nejšikovnější. Mohu totiž dynamicky měnit, ze kterých dat, dimenzí, filtrů atd. se hodnoty pro něj berou. Navíc při úpravě vstupních dat se samozřejmě přepočítá i histogram, alias kontingenční tabulka.
Návod na vytvoření histogramu pomocí kontingenční tabulky je popsaný tady.

Vytvoření histogramu pomocí funkce COUNTIFS

Histogram mohu také vytvořit tak, že že si připravím dva sloupce - s dolním a horním limitem - a do třetího sloupce zapíšu funkci COUNTIFS tak, aby počítala vždy hodnoty omezené tímto intervalem.
Zápis pak vypadá takto:
=COUNTIFS(A:A;">"&D2;A:A;"<"&E2)

Vytvoření histogramu pomocí analytického doplňku

Histogram mohu také vkládat přes funkci, přímo k tomu určenou. Je součástí analytického doplňku - ten je standardní součástí Excelu.

V zásadě stačí jít na kartu data, pak úplně vpravo na Analýza dat, pak vyplnit odkud se berou data a kde jsou hranice intervalu.

Tento třetí způsob nemá v podstatě žádné výhody, uvádím jej spíš do počtu :)





čtvrtek 7. listopadu 2013

Scoring v Excelu

V tomto článku navazuji na sérii článků o dataminingu v Excelu - tentokrát půjde o scoring. Než se pustíme do Excelu, chci v rychlosti vysvětlit, k čemu se scoring používá a jak funguje.

Scoring - příklad použití

Jeho typické použití je v bankách. Klient přijde požádat o úvěr, a banka rozhodne, jestli mu jej dát nebo nedat.
Pokud mu úvěr dá, tak klient buď bude splácet (pak banka vydělá), nebo nebude (pak banka přijde o půjčené peníze). Pokud banka klientovi úvěr nedá, pak o žádné peníze nepřijde, ale také nevydělá. Je tedy nesmírně důležité rozdělit klienty co nejpřesněji na ty, kteří budou splácet, a na ty, kteří nebudou - a půjčit jen těm prvním.
Banka má o klientech řadu informací, podle kterých se může rozhodovat (např. měsíční příjem klienta, počet závislých osob, délku současného zaměstnání klienta, příjem...). Některé z těch informací jsou důležité, jiné méně. Je důležité odlišit ty podstatné od těch nepodstatných a rozhodovat se jen podle těch, které mají na výsledek skutečně vliv. Tedy stanovit váhy informací - kritérií a určit způsob, jak výsledek ovlivňují.
Banka se k tomu může postavit dvěma způsoby. Může vybrat důležitá kritéria (a jejich hodnoty) na základě osobní zkušenosti expertů, zákonných požadavků a podobných informací "zvenku". Tato cesta nás teď ale nebude zajímat.
Druhým způsobem je podívat se, jak se kritéria osvědčila v minulosti, a podle toho rozhodovací proces nastavit, resp. upravovat. A o tom, jak to udělat, je tento článek.
Scoring se také používá pro odhadování potenciálních zákazníků. Pokud vám například telefonní operátor zavolá a nabídne nový tarif, je pravděpodobné, že jste dostali vysoké skóre, když operátor skóroval své zákazníky. Skóroval je s ohledem na to, jak je pravděpodobné, že budou chtít nový tarif a že za něj utratí hodně peněz. A pokud Vám operátor volá, zřejmě vám vyšlo skóre vysoké.

Příklad a návod

Odhadování reakce zákazníků se bude týkat náš příklad. Máme sto zákazníků, kterým jsme v minulosti nabídli nový volací tarif. U těchto zákazníků víme nejen jestli si tarif koupili, ale také kolik jim je let, jakého jsou pohlaví, z jak velkého jsou města a navíc jestli při oslovení byli našimi zákazníky (pro jinou službu nebo tarif) nebo ne.
Tabulku si můžete stáhnout zde.
Mým úkolem je vytvořit předpovídací model, který mě umožní u každého budoucího potenciálního zákazníka, u kterého budu znát uvedené informace, určit, jestli si produkt koupí nebo ne. Nebudu tak zbytečně a draze oslovovat marné případy, a zároveň mi neuteče žádný potenciální dobrý klient.
Takto vypadá tabulka s údaji z minulosti, na základě které model vznikne:


Nejprve data označím a jdu na Vložit / Tabulka. Od této chvíle už s tabulkou Excel pracuje jako s uceleným souborem dat.


Pak jdu na Nástroje tabulky / Analyze. Pokud pod Nástroji tabulky kartu Analyze nevidím, musím si doinstalovat analytický doplněk k Excelu a připojit se na MS SQL Server.
Kliknu na Prediction Calculator.


V "Target" vyberu, co chci předpovídat. V našem případě předpovídáme, jestli uživatel uzavře nebo neuzavře smlouvu.


Odklikneme a počkáme na zpracování výsledků.
Výsledkem jsou hned tři nové listy s výsledky. Pojďme si je projít.

List "Prediction report for..."

V tomto listu jsou dvě oddělené tabulky.
Ve spodní tabulce našeho příkladu je na první pohled vidět, že v datech se projevují tři faktory, které předurčují zákazníky k tomu, aby si nový produkt koupili.
Je to věk do třiceti let, ženské pohlaví a to, že zákazník pro nový tarif už je naším zákazníkem. Méně významnými, ale existujícími vlivy jsou pak věk od 30 do 41 let a od 41 do 55 let a také bydliště ve velkém městě.


V horní tabulce se stanovuje limitní skóre. Tedy skóre, které když bude u klienta překročeno, vyplatí se jej oslovit - protože smlouvu asi uzavře.


K tomu ale musíme dodat další informace:
  • False Positive Cost
    Zadávám, kolik bude stát, když se model splete a navrhne k oslovení klienta, který smlouvu neuzavře. Čím větší číslo, tím bude model opatrnější, a bude požadovat vyšší skóre k tomu, aby navrhl klienta k uzavření smlouvy. V našem případě třeba 50 - protože, dejme tomu, oslovení klienta stojí 50 Kč a pokud klient smlouvu neuzavře, tak o ty peníze přijdeme.
  • False Negative Cost - zadám, kolik mi bude stát, když se model splete a navrhne mi, že nemám oslovovat klienta, ač by tento klient ve skutečnosti smlouvu uzavřel. Čím větší číslo, tím nižší skóre bude model požadovat - protože se bude snažit falešně negativnímu hodnocení vyhnout. V našem případě můžeme nechat nulu - chybné neoslovení klienta nás nebude stát nic.
  • True Positive Profit - zadám, kolik vydělám v případě, že model správně určí klienta k oslovení. Tedy potenciální tržby za klienta. Pokud budu vědět, že každý klient, kterého oslovím, a on uzavře smlouvu, mi vydělá 500 Kč, vyplním 500.
  • True Negative Profit - pokud bych měl nějaký zisk z toho, že model vyhodnotí správně a negativně některého z klientů, vyplním to sem. V našem případě necháme nulu.
Výsledkem je skóre. Tedy hodnota, kterou musí potenciální klient za všechny parametry (věk, pohlaví..) nasbírat, abychom jej oslovili s nabídkou smlouvy.

List "Prediction Calculator for ..."

Spodní tabulka je stejná jako u předchozího listu, zajímá nás tedy ta horní.
Teď už jsme v situaci, kdy máme potenciálního klienta, a chceme odhadnout, jesti uzavře nebo neuzavře smlouvu.
V tabulce vyplníme vlastnosti tohoto posuzovaného klienta. V našem případě je to například žena mladší než 30 let, bydlící v malé obci, která zatím není naším zákazníkem.


A hned po vyplnění vidím, že tato žena na nabídku nového produktu zřejmě zareaguje pozitivně a smlouvu uzavře. A tím jsme splnili účel našeho snažení - od teď už můžeme takto odhadovat každého klienta.
Výše skóre, kterou musela součtem svých parametrů překonat, se odvíjí mimo jiné od cen, zadaných na předchozím listě.

List "Printable Calculator for..."

Na tomto listě je obsahově to, co na tom předchozím, jen upravené pro vytisknutí a ruční vyhodnocování - třeba pro pracovníky v terénu.


Scoring v Excelu

V tomto článku navazuji na sérii článků o dataminingu v Excelu - tentokrát půjde o scoring. Než se pustíme do Excelu, chci v rychlosti vysvětlit, k čemu se scoring používá a jak funguje.

Scoring - příklad použití

Jeho typické použití je v bankách. Klient přijde požádat o úvěr, a banka rozhodne, jestli mu jej dát nebo nedat.
Pokud mu úvěr dá, tak klient buď bude splácet (pak banka vydělá), nebo nebude (pak banka přijde o půjčené peníze). Pokud banka klientovi úvěr nedá, pak o žádné peníze nepřijde, ale také nevydělá. Je tedy nesmírně důležité rozdělit klienty co nejpřesněji na ty, kteří budou splácet, a na ty, kteří nebudou - a půjčit jen těm prvním.
Banka má o klientech řadu informací, podle kterých se může rozhodovat (např. měsíční příjem klienta, počet závislých osob, délku současného zaměstnání klienta, příjem...). Některé z těch informací jsou důležité, jiné méně. Je důležité odlišit ty podstatné od těch nepodstatných a rozhodovat se jen podle těch, které mají na výsledek skutečně vliv. Tedy stanovit váhy informací - kritérií a určit způsob, jak výsledek ovlivňují.
Banka se k tomu může postavit dvěma způsoby. Může vybrat důležitá kritéria (a jejich hodnoty) na základě osobní zkušenosti expertů, zákonných požadavků a podobných informací "zvenku". Tato cesta nás teď ale nebude zajímat.
Druhým způsobem je podívat se, jak se kritéria osvědčila v minulosti, a podle toho rozhodovací proces nastavit, resp. upravovat. A o tom, jak to udělat, je tento článek.
Scoring se také používá pro odhadování potenciálních zákazníků. Pokud vám například telefonní operátor zavolá a nabídne nový tarif, je pravděpodobné, že jste dostali vysoké skóre, když operátor skóroval své zákazníky. Skóroval je s ohledem na to, jak je pravděpodobné, že budou chtít nový tarif a že za něj utratí hodně peněz. A pokud Vám operátor volá, zřejmě vám vyšlo skóre vysoké.

Příklad a návod

Odhadování reakce zákazníků se bude týkat náš příklad. Máme sto zákazníků, kterým jsme v minulosti nabídli nový volací tarif. U těchto zákazníků víme nejen jestli si tarif koupili, ale také kolik jim je let, jakého jsou pohlaví, z jak velkého jsou města a navíc jestli při oslovení byli našimi zákazníky (pro jinou službu nebo tarif) nebo ne.
Tabulku si můžete stáhnout zde.
Mým úkolem je vytvořit předpovídací model, který mě umožní u každého budoucího potenciálního zákazníka, u kterého budu znát uvedené informace, určit, jestli si produkt koupí nebo ne. Nebudu tak zbytečně a draze oslovovat marné případy, a zároveň mi neuteče žádný potenciální dobrý klient.
Takto vypadá tabulka s údaji z minulosti, na základě které model vznikne:


Nejprve data označím a jdu na Vložit / Tabulka. Od této chvíle už s tabulkou Excel pracuje jako s uceleným souborem dat.


Pak jdu na Nástroje tabulky / Analyze. Pokud pod Nástroji tabulky kartu Analyze nevidím, musím si doinstalovat analytický doplněk k Excelu a připojit se na MS SQL Server.
Kliknu na Prediction Calculator.


V "Target" vyberu, co chci předpovídat. V našem případě předpovídáme, jestli uživatel uzavře nebo neuzavře smlouvu.


Odklikneme a počkáme na zpracování výsledků.
Výsledkem jsou hned tři nové listy s výsledky. Pojďme si je projít.

List "Prediction report for..."

V tomto listu jsou dvě oddělené tabulky.
Ve spodní tabulce našeho příkladu je na první pohled vidět, že v datech se projevují tři faktory, které předurčují zákazníky k tomu, aby si nový produkt koupili.
Je to věk do třiceti let, ženské pohlaví a to, že zákazník pro nový tarif už je naším zákazníkem. Méně významnými, ale existujícími vlivy jsou pak věk od 30 do 41 let a od 41 do 55 let a také bydliště ve velkém městě.


V horní tabulce se stanovuje limitní skóre. Tedy skóre, které když bude u klienta překročeno, vyplatí se jej oslovit - protože smlouvu asi uzavře.


K tomu ale musíme dodat další informace:
  • False Positive Cost
    Zadávám, kolik bude stát, když se model splete a navrhne k oslovení klienta, který smlouvu neuzavře. Čím větší číslo, tím bude model opatrnější, a bude požadovat vyšší skóre k tomu, aby navrhl klienta k uzavření smlouvy. V našem případě třeba 50 - protože, dejme tomu, oslovení klienta stojí 50 Kč a pokud klient smlouvu neuzavře, tak o ty peníze přijdeme.
  • False Negative Cost - zadám, kolik mi bude stát, když se model splete a navrhne mi, že nemám oslovovat klienta, ač by tento klient ve skutečnosti smlouvu uzavřel. Čím větší číslo, tím nižší skóre bude model požadovat - protože se bude snažit falešně negativnímu hodnocení vyhnout. V našem případě můžeme nechat nulu - chybné neoslovení klienta nás nebude stát nic.
  • True Positive Profit - zadám, kolik vydělám v případě, že model správně určí klienta k oslovení. Tedy potenciální tržby za klienta. Pokud budu vědět, že každý klient, kterého oslovím, a on uzavře smlouvu, mi vydělá 500 Kč, vyplním 500.
  • True Negative Profit - pokud bych měl nějaký zisk z toho, že model vyhodnotí správně a negativně některého z klientů, vyplním to sem. V našem případě necháme nulu.
Výsledkem je skóre. Tedy hodnota, kterou musí potenciální klient za všechny parametry (věk, pohlaví..) nasbírat, abychom jej oslovili s nabídkou smlouvy.

List "Prediction Calculator for ..."

Spodní tabulka je stejná jako u předchozího listu, zajímá nás tedy ta horní.
Teď už jsme v situaci, kdy máme potenciálního klienta, a chceme odhadnout, jesti uzavře nebo neuzavře smlouvu.
V tabulce vyplníme vlastnosti tohoto posuzovaného klienta. V našem případě je to například žena mladší než 30 let, bydlící v malé obci, která zatím není naším zákazníkem.


A hned po vyplnění vidím, že tato žena na nabídku nového produktu zřejmě zareaguje pozitivně a smlouvu uzavře. A tím jsme splnili účel našeho snažení - od teď už můžeme takto odhadovat každého klienta.
Výše skóre, kterou musela součtem svých parametrů překonat, se odvíjí mimo jiné od cen, zadaných na předchozím listě.

List "Printable Calculator for..."

Na tomto listě je obsahově to, co na tom předchozím, jen upravené pro vytisknutí a ruční vyhodnocování - třeba pro pracovníky v terénu.