760 likes | 911 Views
FIRST FRIDAY. Workshop – Analysemodell for vinanmeldelser Pål Hellesnes. Analysemodell for vinanmeldelser. Vi ønsker oss en gjenbrukbar BI løsning for rask og effektiv analyse av alle anmeldelser av nye viner som blir lansert ved et av vinslippene til Vinmonopolet.
E N D
FIRST FRIDAY Workshop – Analysemodell for vinanmeldelser Pål Hellesnes
Analysemodell for vinanmeldelser Vi ønsker oss en gjenbrukbar BI løsning for rask og effektiv analyse av alle anmeldelser av nye viner som blir lansert ved et av vinslippene til Vinmonopolet. Mulige bruksområder vil være: • Beste kjøp: Vi ønsker a finne det beste kjøpet i vår prisklasse • Middagsvin: Vi ønsker å servere den beste vinen til gjestene våre • Til kjelleren: Vi ønsker de beste kandidatene til å legge i kjelleren • Vindistrikt: Vi ønsker å prøve en ny vin fra vårt favorittdistrikt For å støtte dette vil vi implementere: • En standard metode for å laste inn kildedata for vin og anmeldelser • En standard metode for å konsolidere anmeldt vin og score • En datamodell som lar brukerne å utføre analysere og lage egne rapporter
introduksjon (målsetning, verktøy og metode)
målsetning Analyse av vinanmeldelser Vinmonopolet nye viner Nettaviser anmeldelser
verktøy Excel med Power Query og Power Pivot Power Query • laste inn kildedata • transformere data • konsolidere data • kalkulere verdier • tilrettelegge dimensjoner • tilrettelegge fakta Power Pivot • designe analysemodell • kalkulere verdier Pivot Table • analysere • rapportere • Add-ins: • Microsoft Office PowerPivot for Excel 2013 • Microsoft Power Query for Excel
metode Steg i analyseprosessen vinlister fra Vinmonopolet og anmelselser i nettaviser en CSV-fil for hver anmelder Finn kildedata en tabell for alle nye viner og en tabell for alle anmeldelser Tilrettelegg kildedata et stjernediagram med score som fakta Konsolider kildedata en rapport over viner med minst 3 anmeldelser sortert etter høyest score Notepad Bygg en analysemodell Power Query den beste vin med alle vinens anmeldelser Analyser Power Pivot Pivot Table Publiser resultat
finn kildedata (surf på nettet)
finn kildedata Vininformasjon fra Vinmonopolet http://www.vinmonopolet.no/artikkel/om-vinmonopolet/nye-produkter-i-september
finn kildedata Nettsider med vinanmeldelser http://www.dn.no/matvin/vin/ http://www.adressa.no/kultur/vin/vinslipp/ http://vinofil.no/2014/09/nyhetsslippet/ http://www.klikk.no/mat/drikke/ http://www.oblad.no/nyttig/ http://dinmat.no/Artikler/ http://www.aperitif.no/Vintips/tester/
tilrettelegg kildedata (lag en csv-fil for hver anmelder)
tilrettelegg kildedata Nyheter i basisutvalget Nyheter i basis-, parti- og testutvalget september 2014.xlsx
tilrettelegg kildedata Nyheter i bestillingsutvalget Nyheter i bestillingsutvalget september 2014.xlsx
tilrettelegg kildedata Vininformasjon fra Vinmonopolet Nyheter i bestillingsutvalget september 2014.xlsx varenummer pris varenavn varegruppe land distrikt produsent volum Nyheter i basis-, parti- og testutvalget september 2014.xlsx I tillegg ønsker vi å registrere URL til Vinmonopolets informasjonsside for hver av vinene. Vi vil da kunne innhente ytterligere informasjon om vinen som f.eks. smaksnotat, lagringsanbefaling og hvilke retter vinen passer til.
tilrettelegg kildedata Vininformasjon fra Vinmonopolet passer til beskrivelse lagringsgrad url http://www.vinmonopolet.no/vareutvalg/hvitvin/frankrike/ch-carbonnieux-2012/sku-1716001
tilrettelegg kildedata Vinanmeldelser fra Vinofil vinofil.csv Masi Masianco 2013;Middels dyp strågul. Tiltalende duft i retning eple/melon, sitrus, toppet med urter. Mildt syrefriskt anslag med ytterligere underbygging av duftinntrykket.;5;84;125,00;42221 BraunebergerJufferSonnenuhr Riesling Trocken GG 2013;Middels dyp grønngul. Tiltalende aroma i retning gule sommerepler ispedd florale toner, sitrus med lette grønne urtetoner. Friskt anslag i balanse, med toner som bekrefter og forsterker aromainntrykket. Lang.;6;90;307,10;17144 Von WinningUngeheuer Riesling GG 2013;Blek grønngul. Konsentrert aroma i retning sitrus, gule sommerepler, ispedd florale toner med mildt preg som fra grønne urter.I munnen forsterkes og underbygges aromainntrykket, lett mineralsk preg i avslutningen.;6;90;279,80;17145 Bassermann-Jordan Grainhübel Riesling 2013;Lys grønngul. Fruktpreget aroma med florale toner i retning friske blomster, grønn melon og urter.Saftig anslag med flott syre/frukt-preg i balanse.;6;88;215,00;17104 Fischer OckfenerBockstein Riesling Kabinett 2013;Lys strågul, grønne toner. Forfriskende fruktig aroma med preg som fra moden gul sitrusfrukt toppet med florale toner. Aromainntrykket underbygges og bekreftes i munnen. Bra lengde.;5;85;175,70;17055 DonnaTá Nero d'Avola 2012;Dyp mørkerød, middel tett kjerne, blålig rand. Tiltalende aroma som av modne mørke skogsbær, svisker, lakris/urter og en aning florale toner.Anslag med avrundede/bløte tanniner, tiltalende fruktsødme-preg i behagelig rund avslutning som varer lenge.;5;87;139,90;16964 Louis Pascal SignatureCahorsMalbec 2012;Dyp mørk rød, fiolette toner i kanten.Velutviklet aroma som av godt modne mørke skogsbær ispedd lette toner i retning urtekrydder. Mildt tiltalende fatpreg.Konsentrert fasthet i anslaget med ytterligere bekreftelse av aromainntrykket. Lang.;5;86;124,90;17123 CauvardBeauneClos de la MaladièreMonopole 2012;Dyp rød, middels kjernepreg, fiolett rand.Aroma i retning røde, modne hagebær, florale toner ispedd urter. For en Nese! Ung, saftig preg som underbygger og forsterker aromainntrykket.;6;90;219,90;16481 Deutz Brut Classic;Lys gyllen farge. Aroma av grønt eple, sitrusskall og moden frukt. Publikumsfrier med flott syrlighet og balansert mousse.;5;86;339,90;11609
tilrettelegg kildedata kildedata for vinanmeldelser adressa.csv aperitif.csv dagbladet.csv dinmat.csv klikk.csv oblad.csv vinofil.csv dn.csv
tilrettelegg kildedata kildedata for vinanmeldelser vin anmeldelse score Må klikke in på underside for å lese smaksnotatet. Vil bare bli gjort på de beste vinene. Anmeldelsene til Vinforum er ikke med i analysen da dette er en betalt tjeneste.
konsolider kildedata (lag en tabell for viner og en for anmeldelser)
konsolider kildedata Tabell for alle viner produsent url distrikt url
konsolider kildedata Tabell for alle viner varenavn distrikt lagringsgrad produsent
konsolider kildedata Tabell for alle viner varebeskrivelse * pris varenummer varetype farge lukt smak passer til distrikt lagringsgrad *) Beskrivelse av produktene i bestillingsutvalget er foretatt av grossistene. Produktbeskrivelsene av varer i basis-, parti- og testutvalget er, etter sensorisk prøving og kvalitetskontroll, foretatt av Vinmonopolet.
konsolider kildedata Tabell for alle viner Demo 1 konsolidering av tabeller for viner
konsolider kildedata Tabell for alle viner Demo 2 én felles tabell for alle viner
konsolider kildedata Tabell for alle anmeldelser varenummer varenavn pris poeng smaksnotat
konsolider kildedata Tabell for alle anmeldelser Demo 3 konsolidering av tabeller for anmeldelser
konsolider kildedata Tabell for alle anmeldelser Demo 4 én felles tabell for alle anmeldelser
konsolider kildedata Konsolidering av varenummer De 2 siste siffernei varenummeret angir ulike volum av varen. De fleste anmeldere sløyfer disse sifferne fordi de ikke kreves for å identifisere selve varen.
konsolider kildedata Tabell for alle vinslipp Demo 5 en tabell for alle vinslipp
analysemodell (lag en tabell for viner og en for anmeldelser)
stjernediagram Analysemodell for vinanmeldelser vinen gjenkjennes ved varenummer, varenavn og pris Vin land – distrikt Anmeldelse Anmeldelse Dimensjon Vin Dimensjon Vinslipp Dimensjon score kalkuleres ut i fra terning, poeng og stjerner Anmeldelse Key Anmeldelse Kilde Vin Key Varenummer Varenavn Pris Smaksnotat Terning Poeng Stjerner Vin Key Vare Varenummer Varenavn Varebeskrivelse Varetype Pris Distrikt Distrikt URL Produsent Produsent URL Farge Lukt Smak Passer til Lagringsgrad Antall anmeldelser Vinslipp Key Vinslipp År Måned Score en rad pr vin pr vinslipp pr anmeldelse Hva gjør vi hvis produktet endres i en kontrakt som er opprettet i Core? Da vil det ikke være det samme produktet som er knyttet til søknaden i Front. Dette vil medføre at vi ikke har en entydig kobling mellom produkter i Front og Core! antall anmeldelser bestemmes ved å telle antall anmeldelser Vinslipp år – måned
analysemodell Dimensjonstabell for vinslipp let Source = Excel.Workbook(File.Contents("D:\Prosjekter\BedreInnsikt\Vin\2014-5-September-Analysemodell\vinslipp.xlsx")), Vinslipp1 = Source{[Name="Vinslipp"]}[Data], FirstRowAsHeader = Table.PromoteHeaders(Vinslipp1), InsertedIndex = Table.AddIndexColumn(FirstRowAsHeader,"Index"), RenamedColumns = Table.RenameColumns(InsertedIndex,{{"Index", "Vinslipp Key"}}), ReorderedColumns = Table.ReorderColumns(RenamedColumns,{"Vinslipp Key", "Vinslipp", "År", "Måned"}) in ReorderedColumns
analysemodell Dimensjonstabell for vinslipp Demo 6 dimensjonstabell for vinslipp
analysemodell Dimensjonstabell for viner let Source = Excel.Workbook(File.Contents("D:\Prosjekter\BedreInnsikt\Vin\2014-5-September-Analysemodell\viner.xlsx")), Viner = Source{[Name="Viner"]}[Data], FirstRowAsHeader = Table.PromoteHeaders(Viner), InsertedIndex = Table.AddIndexColumn(FirstRowAsHeader,"Index"), RenamedColumns = Table.RenameColumns(InsertedIndex,{{"Index", "Vin Key"}}), InsertedCustom= Table.AddColumn(ReorderedColumns, "Vin", eachNumber.ToText([Varenummer]) & " " & [Varenavn] & " - kr. " & Number.ToText([Pris], "N", "nb-NO")), ReorderedColumns = Table.ReorderColumns(InsertedCustom,{"Vin Key", "Vin", "Varenummer", "Varenavn", "Varegruppe", "Land", "Distrikt", "Produsent", "Volum", "Pris"}) in ReorderedColumns
analysemodell Dimensjonstabell for anmeldelser let Source = Excel.Workbook(File.Contents("D:\Prosjekter\BedreInnsikt\Vin\2014-5-September-Analysemodell\anmeldelser.xlsx")), AnmeldelserVasket= Source{[Name="AnmeldelserVasket"]}[Data], FirstRowAsHeader = Table.PromoteHeaders(AnmeldelserVasket), ChangedType = Table.TransformColumnTypes(FirstRowAsHeader,{{"Varenummer", type number}, {"Pris", type number}, {"Terning", type number}, {"Poeng", type number}, {"Stjerner", type number}}), InsertedIndex = Table.AddIndexColumn(ChangedType,"Index"), RenamedColumns = Table.RenameColumns(InsertedIndex,{{"Index", "Anmeldelse Key"}}), InsertedCustom= Table.AddColumn(ReorderedColumns, "Kildescore", eachif [Poeng]<>null then "[" & [Kilde] & ": " & Number.ToText([Poeng]) & " poeng]" else if[Terning]<>null then "[" & [Kilde] & ": terning " & Number.ToText([Terning]) & "]" elseif [Stjerner]<>null then"[" & [Kilde] & ": " & Number.ToText([Stjerner]) & " stjerner]" else ""), InsertedCustom= Table.AddColumn(InsertedCustom, "Anmeldelse", eachif [Smaksnotat]<>null then [Smaksnotat] & " " & [Kildescore] else [Kildescore]), ReorderedColumns= Table.ReorderColumns(InsertedCustom1,{"Anmeldelse Key", "Kilde", "Anmeldelse", "Kildescore", "Varenummer", "Varenavn", "Pris", "Smaksnotat", "Terning", "Poeng", "Stjerner"}) in ReorderedColumns
analysemodell Faktatabell for score let Source = Table.Join( Vin,{"Varenummer"}, Table.RenameColumns( Anmeldelse,{{"Varenummer", "Anmeldelse Varenummer"}, {"Varenavn", "Anmeldelse Varenavn"}, {"Pris", "Anmeldelse Pris"}} ),{"Anmeldelse Varenummer"}, JoinKind.Inner ), RemovedColumns = Table.RemoveColumns(Source,{"Varenummer", "Varenavn", "Varegruppe", "Land", "Distrikt", "Produsent", "Volum", "Pris", "Kilde", "Anmeldelse Varenummer", "Anmeldelse Varenavn", "Anmeldelse Pris", "Smaksnotat"}), InsertedCustom = Table.AddColumn(RemovedColumns, "Anmeldelse score", eachif [Poeng]<>null then [Poeng] elseif [Terning]<>null then [Terning]*4+68 elseif [Stjerner]<>null then [Stjerner]*5+67 else 0), InsertedCustom1 = Table.AddColumn(InsertedCustom, "Vinslipp Key", each 0), ChangedType = Table.TransformColumnTypes(InsertedCustom1,{{"Vinslipp Key", type number}}), ReorderedColumns = Table.ReorderColumns(ChangedType,{"Vinslipp Key", "Vin Key", "Anmeldelse Key", "Terning", "Poeng", "Stjerner", "Anmeldelse score"}), RemovedColumns1 = Table.RemoveColumns(ReorderedColumns,{"Terning", "Poeng", "Stjerner"}), ChangedType1 = Table.TransformColumnTypes(RemovedColumns1,{{"Anmeldelse score", type number}}), RemovedColumns2 = Table.RemoveColumns(ChangedType1,{"Vin", "Anmeldelse", "Kildescore"}) in RemovedColumns2
analysemodell Analysemodell for vinanmeldelser Demo 7 analysemodell for vinanmeldelser
stjernediagram Analysemodell for vinanmeldelser skulte kolonner hierarki kalkulerte verdier Score:=AVERAGE([Anmeldelse score]) Antall anmeldelser=COUNTROWS(RELATEDTABLE(Score))
analyse (beste viner med minst 3 anmeldelser)
analysemodell De beste vinene 3 eller flere anmeldelser kun hvitvin under kr. 350,-
alternativ løsning (kan dette løses på en enklere måte?)
alternativ løsning Analysetabell for anmeldelser let Source = Excel.Workbook(File.Contents("D:\Prosjekter\BedreInnsikt\Vin\2014-5-September-Analysemodell\anmeldelser.xlsx")), AnmeldelserVasket1 = Source{[Name="AnmeldelserVasket"]}[Data], FirstRowAsHeader = Table.PromoteHeaders(AnmeldelserVasket1), InsertedCustom = Table.AddColumn(FirstRowAsHeader, "Anmeldelse score", eachif [Poeng]<>null then [Poeng] elseif [Terning]<>null then [Terning]*4+68 elseif [Stjerner]<>null then [Stjerner]*5+67 else 0), InsertedCustom1 = Table.AddColumn(InsertedCustom, "Kilde score", eachif [Poeng]<>null then "[" & [Kilde] & ": " & Number.ToText([Poeng]) & " poeng]" elseif [Terning]<>null then "[" & [Kilde] & ": terning " & Number.ToText([Terning]) & "]" elseif [Stjerner]<>null then "[" & [Kilde] & ": " & Number.ToText([Stjerner]) & " stjerner]" else""), InsertedCustom2 = Table.AddColumn(InsertedCustom1, "Anmeldelse", eachif [Smaksnotat]<>null then [Smaksnotat] & " " & [Kilde score] else [Kilde score]), InsertedCustom3 = Table.AddColumn(InsertedCustom2, "Vare", each [Varenummer] & " " & [Varenavn] & " - kr. " & Number.ToText([Pris], "N", "nb-NO")), ReorderedColumns = Table.ReorderColumns(InsertedCustom3,{"Varenummer", "Vare", "Varenavn", "Pris", "Kilde", "Anmeldelse", "Anmeldelse score", "Smaksnotat", "Terning", "Poeng", "Stjerner", "Kilde score"}) in ReorderedColumns
alternativ løsning Analysemodell for anmeldelser under kr. 350,- kan ikke filtrere på antall anmeldelser eller varetype samme vare har forskjellig navn analysemodellen består av kun én tabell ingen Key kolonner eller faktatabell kalkulert verdi Score:=AVERAGE([Anmeldelse score])
alternativ løsning Valg av løsningsalternativ stjernediagram enkel tabell VS • Mer elegant og brukervennlig • Skiller mellom fakta og dimensjoner • Kan filtrere på antall anmeldelser • Kan filtrere på varetype • Har konsoliderer varenavn • Støtter analyse for flere vinslipp • Enklere å implementere Velg denne dersom du selv skal gjennomføre analysen én gang … … ellers velg denne!
forbedringer (kan løsningen lages bedre?)
forbedringer Endringer som ville forbedre løsningen • Maskinell parsing av HTML for å laste inn anmeldelsene • Laste inn smaksnotater fra anmeldelser med undersider • Laste inn detaljert informasjon av vinene fra Vinmonopolet • Vasking av varenummer med bruk av Master Data Management • Lage en ønskeliste av interessante viner • Lage en innkjøpsliste som kan sendes som e-post
Information is not knowledge Albert Einstein
konsolider kildedata Tabell for alle viner Demo 1 konsolidering av tabeller for viner
konsolider kildedata Tabell for alle viner Start Excel med et nytt regneark. Fra POWER QUERY fanen, velg From File og så From Excel. I Navigator panelet dobbel-klikk på den første tabellen.
konsolider kildedata Tabell for alle viner I Home-fanen klikk på Use First Row As Headers.
konsolider kildedata Tabell for alle viner Merk kolonnen KATEGORI. I Home-fanen klikk på RemoveColumns og velg RemoveColumns