Joulupähkinä #14 – Isolle joukolle suureita toinen vaihtoehto

Joulupähkinä #14 on yksi oikea asiakascase, tosin tietty data on eri kun tässä mennään AdventureWorksilla. Kyseessä on malli, jossa on n. 50 erilaista mittaria (suuretta). Jokaisesta mittarista tulisi saada versio, jossa yksi koko-komponentti otetaan pois. Tämä sen takia, että tietyissä laskennoissa sillä on väliä, toisissa ei niin paljoa.

Oheinen kuva kuvastaa tilanteen. Mittari on Sum([SalesAmount]) ja siitä on toinen versio, jonka koodi on:

SalesWithout44 =
var size = VALUES(‘DimProduct'[Size])
RETURN
CALCULATE(SUM(‘FactInternetSales'[SalesAmount]),’DimProduct'[Size]<>”44″, ‘DimProduct'[Size] in size)

Nyt tuo sama Without44 – tyyppinen laskenta pitäisi saada kaikille 50 muulle mittarille. Tietty voisi tehdä toiset mittarit ja mallissa olisi sen jälkeen 100 mittaria, mutta ei olisi käytännöllistä, eikä asiakas ole valmis maksamaan tuollaisesta apinan hommasta ja siitä seuraavasta ylläpitovaivasta sen jälkeen. Miten siis saisimme jotenkin järkevästi molemmat mittarit käyttöön ilman että kaikkea tulee kopioida.

Erilaiset mittarit ovat siis:

  1. Ihan normaali, kuten nytkin.
  2. Muuten sama, mutta tulee ottaa pois DimProduct[Size]=44, eli tuota ei tule huomioida missään mittarissa.

Minun tapauksessani asiakkaalla oli Analysis Services 2017, joten lopputulos ei oo niin elegantti, kuin se voisi olla mutta sinä saat tehdä sen käyttäen kaikkia viimeisimpiä komponentteja.

Vastaa kuvauksella mitä tekisit, ei tartte pilkuntarkasti kuvata jokaisen mahdollisen koodin syntaksia, vaan ratkaisumalli.

Palauta tuttuun tapaan Microsoft Formsilla

Joulupähkinä #13 – vastaus

Ensiksi: Sain palautetta että pähkinä on myöhässä! Ihan huippua, sunnuntaina oltiin valmiina pähkinään ja minä nukuin myöhään… Pyydän anteeksi. Mutta samalla olen tosi otettu siitä että ratkaisette näitä pähkinöitä! Vastauksia tuli 6kpl vaikka en edes mainostanut tämän päivän pähkinää kun olin koko päivän lasten harrastuksissa.

Vastaus: 22 067 218 Oikean vastauksen sai 3 henkilöä, pitää lukea vähän tarkemmin mikä noissa muissa meni metsään, eli miten vastaaja on ymmärtänyt tuon väärin. Tärkeät jutut ovat kuitenkin:

  • VAR sumvalue – tämä evaluoidaan esittelyn yhteydessä. Tähän ei siis vaikuta myöhemmät filterit vaan sumvalue muuttujassa on ihan numero sisällä (ei siis koodia joka suoritettaisiin myöhemmin). Se saa siis arvon: 273 374.
  • VAR classvalues – tämä on taulukko, jossa on yksi kolumni (joku voisi sanoa lista arvoista), mutta tätä ei käytetä varsinaisessa suureessa, joten tästä ei tartte välittää.
  • CALCULATEN – Sum on siis ‘DimProduct’-taulusta kaikki muut, paitsi Class-filter. Se vie siis tavallaan lihavoidulle riville “H”, koska H oli class. Sitten ALL(DimDate) poistaa aika-filterin, jolloin mennään H-rivin loppuun Total-sarakkeelle. Saadaan arvo 22 340 592. Tämä tulee Sum-funktiosta, siitä sitten vähennetään tuo sumvalue-muuttujan arvo. Eli: 22340592-273374 = 22067218

Se, mitä halusin tässä tuoda esiin on tuo VAR-evaluoidaan aina silloin kun se esitellään. Sillä voi oikeasti tehdä aika jänniä juttuja kun antaa mahdollisuuden käsitellä lukuja ihan eri laskentacontexteista.