Joulupähkinän tulokset

Tein joulukuussa blogisarjan, jossa jokaisena joulukuun 24 ensimmäisenä päivänä näille sivuille tuli jokin Microsoft Data-aiheinen pulma. Aikaa ratkaista pulma oli kyseinen päivä ja sit seuraavana päivänä tuli vastaus + uusi pulma. Eräänlainen joulupulmakalenteri siis.

Ensimmäisenä päivänä pulmaan tuli eniten vastauksia, yhteensä 21 kpl (2. päivän blogissa lukee 19 mutta varmaan silmät haritti tai jotain). Sen jälkeen määrä vaihteli ollen pienimmillään 5 ja suurimmillaan 18.

Aiheina Power BI/tabulaarisen mallinnuksen ongelmat olivat suosituimpia. T-SQL kielen sisäisen tietämyksen ongelmat sellaisia, joihin tuli vähiten vastauksia. Esimerkiksi 12. ongelma suoritussuunnitelmista sai vain 5 vastausta lopulta. Ehkä pilviaika näkyy siinä mielessä että moni meistä soveltaa ja käyttää palveluita, eikä enää tutki niiden sielunelämää. Tämä on hyvä suuntaus, koska sillä tavalla tuotetaan enemmän lisäarvoa. Epäilen kuitenkin että myös pinnanalla tapahtuvalle selvittelylle on sijaa vielä kauas tulevaisuuteeen. Ongelmat ehkä vaihtuvat, mutta eivät ne palvelut toimi ikinä kaikissa tapauksissa täydellisesti.

Vastauksia tuli siis aika hienosti. Yhteensä 46 eri nimimerkkiä palautti vastauksen. Kuitenkin vain 16 henkilöä palautti useamman kuin yhden vastauksen.

Vastausten kärki meni seuraavasti (nimet julkaistu henkilöiden luvalla)

  • Joni Juutilainen, 24 vastausta
  • Santeri Virtanen, 23 vastausta
  • xx, 18 vastausta
  • xx2, 16 vastausta
  • xx3, 15 vastausta

Jussi Roine Microsoftilta (https://twitter.com/jussiroine) lupasi ennen joulua pari palkintoakin kisaan. Jonille ja Santerille on siis lähdössä postilla Azure-henkinen tuotepalkinto! Jussi kerkesi tuon jälkeen jo vaihtaa uusiin haasteisiin ja hänet löytää nykyisin http://www.northadvisors.com – startupin puikoista, mutta palkinnot ovat silti tulossa. 🙂

Muutama kysely on tullut, toistuuko tämä ensi vuonna? En lupaa vielä, koska loppua kohden alkoi tuntumaan ehkä vähän isolta kakulta mutta jospa aika kuultaa muistot ja tämä toistuu! Toisaalta olen miettinyt sellaista viikottaista pähkinää, jolloin olisi 52 pähkinää vuodessa mutta ei tarttis joka ilta miettiä mikä on sopiva pähkinä huomiselle.

Iso kiitos myös Oskari Heikkiselle (https://twitter.com/oskarialex)! Oskari teki yhden pulman ja auttoi mielipiteellään monessa.

Lopuksi kiitos Lauralle! (https://www.linkedin.com/in/lauratikkanen/) Ei olisi onnistunut ilman vaimoa! Iskä miettii joka ilta seuraavan päivän pähkinää ja lapset saatiin silti nukkumaan ja kaikki perheen jutut tehtyä. Meillä on jo reilu 15-vuotta yhteistä matkaa takana (5585 päivää tarkalleen tätä kirjoittaessa) ja rouva on jaksanut näitä mun tempauksia koko ajan!

Joulupähkinä #24 – Paljonko on aikaa jouluun 2021?

Viimeinen joulupähkinä on täällä! Mietin että minkälainen on viineine joulupähkinä? Joku tosi vaikea, työläs vai mikä? Lopulta olen aika varma että käytännössä kaikki haluavat vain hiljentyä Joulun viettoon ja pähkinä on varmasti aika lailla listan pohjalla. Siksi niille muutamille, jotka tiedän että aikovat palauttaa myös viimeisen joulupähkinän ajattelin että sen on oltava jotenkin helppo, mukautuva ja eteenpäin katsova.

Pähkinä on siis: Tee kysely, koodi, skripti tai ohjelmanpätkä joka laskee aikaa jouluaaton alkuun 2021! Saat tehdä sen ihan just sillä helpoimmalla ja nopeimmalla kielellä. Jos siis luulet että onnistuu helpoiten DAX-suureella, tee se sillä, jos T-SQL selectillä, tee sillä! Jos Python tai c# on parasta, sillä tai ehkä PowerShellillä? Tai ihan millä tahansa muulla ohjelmointikielellä ja tuloksen muotoilunkin saat miettiä just itselle sopivaksi. Kysymys siis: Tee yksinkertainen toteutus joka suoritettaessa palauttaa ajan jouluun 2021 sopivassa muodossa.

Erittäin huippua, kun oikeasti tosi moni kävi joka päivä katsomassa pähkinää. Pähkinän sivulla oli aina n. 40-100 kävijää per päivä. Palautuksia tuli alkuun enemmän, isoimpana päivänä muistaakseni 25 kpl. Kun joulukuu eteni, palautusmäärät vähenivät ja pienimpinä päivinä oli 4 palautusta. Nämä ko. päivänä palauttaneet taisivat palauttaa melkein jokaisena päivänä, ainakin nimimerkit olivat kovin tuttuja.

Toivottavasti sinulla on huippu Joulu! Rauhoitu nyt, kun on 4 päivää enemmän ja vähemmän pyhiä putkeen. Jos olet työtehtävissä Joulun aikaan, toivottavasti pääset välipäivinä tai heti vuoden alussa vetämään happea!

Kiitos kaikille ja nähdään Microsoft Data juttujen parissa seuraavaksi ainakin kahvihetkien kautta! Pähkinän palkintoihin palaan joulun pyhinä tai välipäivinä. Lasken palautukset ja olen Jussi Roineeseen Microsoftille yhteydessä koska Jussi lupasi Microsoftin sponsoroivan community-paketit voittajille!

Jouluaaton palautuksen voit tehdä tuttuun tyyliin Microsoft Forms lomakkeella.

Ja jos missasit maanantain kahvihetken, kannattaa tsekata oheinen video! Aisla esittää matkustusraporttia ja Power BI:n uusinta ominaisuutta.

Pähkinän #23 vastaus

Kiitos Oskarille pähkinästä. Vastaus voi olla riippuvainen käytössäsi olevasta Azure tenantista, joten vastaukseksi hyväksytään kaikki perusteluineen annetut.

Vastaus löytyi ainakin https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade/newsupportrequest -sivulta aloittamalla tekemään uutta tukitikettiä. Kun valitsee seuraavasti:

Voi tämän jälkeen painaa Enter details nappia:

Ja kun on painanut, avautuu valikko josta nykyisen defaultin näkee:

Ja tuossa lukee 2 petatavua tällä hetkellä storage accountin kokorajoituksena.

Joulupähkinä #23 – Azure Storagen kapasiteetti

Toiseksi viimeisen pähkinän takana on Oskari Heikkinen (Twitter: @oskarialex). Kyse on Azure Storagesta ja siitä, paljonko sinne saa tavaraa sisään? Azure Storage accountin maksimikapasiteetti on 5PB (listattu täällä: https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/azure-subscription-service-limits#storage-limits). Oletusarvoisesti maksimikapasiteetti on kuitenkin vähemmän. Kuinka paljon dataa voit tallentaa Azure Storage accounttiisi West Europe regionassa oletusarvoisesti avaamatta tukitikettiä Microsoftin suuntaan?

Vastaus voi periaatteessa olla moniselitteinen ja toisaalta voi vaatia Azure AD loginin, joten nyt on tärkeää perustella vastaus.

Oskarilta voit kysyä lisätietoja Twitterissä: @oskarialex) / Twitter tai Linkedinissä: Oskari Heikkinen | LinkedIn

Enää yksi päivä aattoon! vielä jaksaa jaksaa pari pulmaa!

Microsoft Forms lomakkeella pystyt vastaamaan kyselyyn.

Pähkinän #22 vastaus

Vastaus pähkinään 21 ja 22 menee siis suurin piirtein samalla lailla. 22:ssa on vain * polussa! Vastauksia tuli 21 kysymykseen 8kpl ja 22 kysymykseen 6 kpl. Kiitos kaikille!

Joulupähkinä #22 – synapse on-demand SQL ja kansiorakenne

Tämän päivän pähkinä jatkaa siitä mihin eilinen jäi, eikä pitäisi olla kauhean monimutkainen! Sama kysymys, kuin eilen mutta ota kaikki lokakuut jokaiselta vuodelta! Tee laskenta yhdellä kyselyllä.

Aineisto on osoitteessa: https://qsynapse.dfs.core.windows.net/demodata/Microsoft/MicrosoftOpenData/parquet/taxi/year=2017/month=10/

Kansiossa on parquet formatoituja tiedostoja ja huomaa että tuossa esimerkkiosoitteessa on nyt vuosi 2017. Sun pitää kysellä kuitenkin yli kaikkien vuosien!

Käytössäsi on palvelin seuraavilla tiedoilla:

Palvelin: qdw-ondemand.sql.azuresynapse.net
käyttäjätunnus: joulu
salasana: kalenteri123!
tietokanta: joulu

Päivän #21 pähkinän tulos tulee vasta myöhemmin, koska tämä nojaa niin vahvasti siinä tehtyihin löydöksiin 🙂

Voit palauttaa tehtävän Microsoft Forms lomakkeella.

Joulupähkinä #21 – Synapse On-Demand SQL kyselyt

Tänään Synapsea! Tehtävänäsi on katsoa, montako matkaa, paljonko niistä on yhteensä veloitettu, sekä miten pitkä matka on kuljettu yhteensä aineistosta, jotka löytyvät datalakesta.

Aineisto on osoitteessa: https://qsynapse.dfs.core.windows.net/demodata/Microsoft/MicrosoftOpenData/parquet/taxi/year=2017/month=10/

Kansiossa on parquet formatoituja tiedostoja.

Käytössäsi on palvelin seuraavilla tiedoilla:

Palvelin: qdw-ondemand.sql.azuresynapse.net
käyttäjätunnus: joulu
salasana: kalenteri123!
tietokanta: joulu

Tuohon tietokantaan on liitetty credential automaattisesti, jota joulu-käyttäjällä on lupa käyttää. Luo siis kysely, joka kysyy tuosta kansiosta kaikkia tiedostoja. Sen jälkeen summaa sieltä löytyvät trip_distance ja total_amount ja lisäksi laske rivien lukumäärä. Palauta nämä tiedot vastauksessasi.

Vastauksen voit palauttaa Microsoft Forms -lomakkeella.

Pähkinän #20 vastaus

Pähkinä #20 oli vähän kompa. Se kuningasajatus on, että tuollainen exists-lause palauttaa aina true, jos kyseessä on aggregaatti… eli tämä palauttaa kaikki 8-riviä:

Ja jos otan tuon MIN() tuosta pois, palautuu vain 6-riviä:

Mutta mitään ei käytännössä tartte laskea, koska MIN-funktio palauttaa aina true.

Joulupähkinä #20 – SQL Serverin with-lauseet ja vertailut

Joulupähkinä #20 on SQL server with-lausepulma. Kysymys on, montako riviä kysely palauttaa?

Kyselyssä on 2 väliaikaistaulua ja ne palauttavat tietoja seuraavasti:

Ylempi kysely on siis productSales väliaikaistaulusta.

Seuraava kysely on CurrencySales-taulusta:

Ja kysymys kuuluu, montako riviä seuraava kysely palauttaa:

Vastaa rivien lukumääärä Microsoft Forms-lomakkeella.

Pähkinän #19 vastaus

Vastauksia tuli 4 kpl. Yhdessä vastauksessa kritisoitiin termistöä, joka oli itseasiassa ihan oikein! Juoksin tehtävän liian nopeasti, enkä käyttänyt oikeaa termiä “Tasaerä”.. Eli jokainen payment olisi saman kokoinen, sen takia vastauksia tuli pari erilaista, enkä voi sanoa kummankaan olevan väärin. Tavoitteenani oli käyttää termiä “tasaerä”, jolloin jokainen kk-maksu on aina yhtä iso. Ja oikeastaan tarkoituksena oli avata sitä että DAX:ssa on tosi paljon funktioita valmiina. Sellainen funktiolistan läpikäynti: DAX function reference – DAX | Microsoft Docs aina välillä olisi oikeasti ihan hyödyllistä ajankäyttöä!

Koodi, jolla tuohon datasettiin saa lyhennyksen näkyviin on: Lyhennys= PMT([Korko],[Laina-aika (vuotta)]*12,[Lainamäärä],0,0)

Joulupähkinä #19 – Matemaattiset laskennat DAX:lla

Päivän pähkinän ei pitäisi olla kovinkaan vaikea! Eli vähän laina-matematiikkaa. Tarkoitus olisi oheiseen tauluun lisätä sarake, joka laskee kk-maksun. Eli paljonko lainaa tulee maksaa kuukaudessa takaisin. Lainaa lyhennetään tasalyhennyksellä jokaisen kuukauden lopussa. Laina on nostettu kuukauden alussa.

Palauta siis kolumnin lisäyskoodi vastauksessasi.

Palautus onnistuu Microsoft Forms lomakkeella.

Pähkinän #18 vastaus

Pähkinässä yhdisteltiin MongoDB-tietokantaan. Yhdistin sinne itse Visual Studio Codella.

Siihen on saatavissa Azure Databases laajennus:

Connection stringin liittäminen onnistuu käyttöliittymästä

Ja sieltä voi ihan surffailla collectioneihin ja dokumentteihin. Sieltä se ainut dokumentti sitten löytyi:

Joulupähkinä #18 – MongoDB Azuressa!

Ensi viikolla on Joulu! Pähkinässä 18 otetaan yhteys MongoDB tietokantaan CosmosDB:n sisällä. Tehtävä on siis ottaa oheisella connection stringillä yhteys Cosmos DB:hen ja lukea sieltä collection: “joulu”. Siellä on yksi dokumentti, jossa on attribuutti “tehtava”. Palauta kyseinen kysymys ja vastaa siihen omin sanoin.

mongodb://qumio-mongodb:zTm7mNGvVGi9BRjgONCzg8vBKhuWTCcfDqML61wjkwa2yJwpRg4MxV7m4KMuDBGLW7oHsaNNf1FN82I5MPynAA==@qumio-mongodb.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@qumio-mongodb@

Halutessasi mukaan kisaan, jätä vastauksesi Microsoft Forms lomakkeella

Joulupähkinän #17 ratkaisu

Joulupähkinään 17 tuli ratkaisuja 8 kpl. Kaikki olivat oikein! Kiitos kun vielä moni jaksaa vastailla. Nyt alkaa kyllä ihan samat nimet toistua melkein jokoa päivä 🙂

Käytin yhteyden muodostamiseen PowerShelliä. Ratkaisu meni seuraavasti:

Joulupähkinä #17 – Azure Storage Table nosql

Joulupähkinä #17 vie meidät nosql maailmaan ja tarkemmin Azure Storagen Table-apiin. Tehtävänäsi on hakea taulun sisältö ja palauttaa siellä oleva viesti vastauksessasi. Tauluja on accountissa 1 ja siinä taulussa on 1 objekti, joten mitään kauhean vaikeaa etsimistä ei tarvitse tehdä.

Azure Storagen Table api on hyödyllinen myös dataihmisille, jos on tarve säilöä dokumenttipohjaista dataa. Tietenkin Cosmos DB on ykkösvaihtoehto, mutta ei se Storage Table tarpeeton ole. Tämä ominaisuus on kuitenkin monelle jäänyt vähän ohuelle, joten tutustutaan siihen!

Tarvitsemasi SAS-avain on: https://joulu.table.core.windows.net/?sv=2019-12-12&ss=t&srt=sco&sp=rl&se=2020-12-18T05:34:56Z&st=2020-12-16T21:34:56Z&spr=https&sig=zznKDqRiDsptWlZGjlVJbZPuDz7Iq1z7G2aTsKGVCrU%3D

Kuten sanottu, palauta vastauksessasi viesti jonka löydät tablesta.

Voit palauttaa tuttuun tyyliin Microsoft Forms – lomakkeella.

Joulupähkinän #16 ratkaisu – SQL rekursio

Common Table Expression… Yhtä vastausta mukaillen: “Rekursio sattuu aina päähän.” … Välttämätön paha kaikenlaisessa rakenteellisissa kyselyissä ja joka kerta joutuu kattoon sitä samaa Microsoftin esimerkkiä 🙂

Mutta hienoa, 6 vastausta, kaikki oikein! Tässä yhden palautuksen koodi esimerkkivastauksena:

WITH CTE AS ( SELECT EmployeeKey, ParentEmployeeKey, convert(varchar(max), FirstName + ‘ ‘ +LastName) as fullname FROM DBO.DimEmployee WHERE ParentEmployeeKey IS NULL UNION ALL SELECT t.EmployeeKey, t.ParentEmployeeKey, c.fullname + ‘/’ + convert(varchar(max), t.FirstName + ‘ ‘ + t.LastName) FROM DBO.DimEmployee t INNER JOIN CTE c on c.EmployeeKey = t.ParentEmployeeKey ) select e.*, c.fullname as organisaatio from DimEmployee e left join CTE c on e.EmployeeKey = c.EmployeeKey

Joulupähkinä #16 – Rekursio SQL:llä

Joulupähkinä #16 ponnistaa siitä mihin eilinen jäi! Eli kun katsoimme rekursiota DAX:lla, niin nyt sitten rekursiota SQL:llä. Kysymys on sama, eli Tee dbo.dimEmployee taulua vasten kysely, jossa muodostat alkuperäisen taulun+yhden uuden sarakkeen jossa on polku toimitusjohtajasta työntekijään.

Käytännössä siis SQL-selectin joukon tuloksen tulisi näyttää jotakuinkin tällaiselta sen uuden kolumnin osalta:

Ken on siis firman johtaja, jolla on Peter alaisena, jonka alaisena toimii Jo ja hänen alaisensa on Guy. Tämä sama päätelmä tulee laskea jokaiselle riville. Et saa lisätä selectiin kuin yhden kolumnin. Kaikki koodi on siis kirjoitettava yhteen lauseeseen, eikä tietokantaan saa luoda pysyväisobjekteja (#-tauluja tai normitauluja). Erotinmerkki on /-merkki.

Palauta select vastauksessasi.

Palvelin vanha tuttu:

Palvelin: qsql.database.windows.net
Käyttäjätunnus: joulu
Salasana: kalenteri123!
Tietokanta: AdventureWorksLT
Taulu: dbo.DimEmployee

EmployeeKey ja ParentEmployeeKey ovat ne kentät jotka muodostaa puun.

Palautat vastauksen tuttuun tyyliin Microsoft Forms-lomakkeella.

Pähkinän #15 ratkaisu – Rekursiivinen DAX

Tämä oli nyt selkeästi liian työläs… 6 vastausta, 2 tietyllä tavalla oikeaa, mutta ihan kauhean työlästä vastausta, jossa puurakenne oli purettu auki ja käsin haettiin jokainen taso eri muuttujaan jotka yhdistettiin. 4 hyvää yritystä.

Mallivastaus olisi

Organisaatio =
var pth = PATH(DimEmployee[EmployeeKey],[ParentEmployeeKey])
var tbl = ADDCOLUMNS( ADDCOLUMNS( ADDCOLUMNS( ADDCOLUMNS( GENERATESERIES(1,PATHLENGTH(pth)), “Manager”, PATHITEM(pth,[Value],INTEGER) ), “ManagerFirstName”,LOOKUPVALUE([FirstName],[EmployeeKey],[Manager]) ), “ManagerLastName”,LOOKUPVALUE([LastName],[EmployeeKey],[Manager]) ), “Manager FullName”,CONCATENATE([ManagerFirstName],CONCATENATE(” “,[ManagerLastName])))
var mngrpath = CONCATENATEX(tbl,[Manager FullName],”/”,[Value])
RETURN
mngrpath

Eli ensiksi rivillä 3 rakennetaan path-olio. Sitten luodaan aputaulu generateseries-funktion avulla (se tekee taulun, jossa on yksi kolumni, joka on Value ja sitten riveillä numerot 1,2,3…n, jossa n=pathlength.

Sitten siihen tauluun voidaan liittää managerin id tuolla pathitem funktiolla. Sen jälkeen parilla lookup-kierroksella voidaan hakea noi etunimi ja sukunimi arvot (yhdistän ne sen jälkeen fullnameksi). Ja sit lopulta contatenatex-funktiolla näppärästi yhdistetään kaikki rivit takaisin yhdeksi arvoksi, jolloin se voidaan palauttaa.