Wat is zelf in Python: voorbeelden uit de echte wereld
Wat is zelf in Python: voorbeelden uit de echte wereld
In deze zelfstudie leert u hoe u een meting optimaliseert in LuckyTemplates. Het optimaliseren van maatregelen in uw rapport verbetert de prestaties van uw codes bij het produceren van waardevolle inzichten en gegevens. U leert ook over de verschillende evaluatiemethoden en hoe u deze kunt toepassen om uw rapport te optimaliseren. Je kunt de volledige video van deze tutorial onderaan deze blog bekijken.
Inhoudsopgave
1. Analyseer de prestaties van de code
In dit voorbeeld moet u dit rapport optimaliseren:
Dit is het gegevensmodel dat u gaat gebruiken:
De tabel Taken bevat alle informatie over elke taak die in een bepaalde periode is uitgevoerd.
Deze tabel is de basis van alle metingen die u gaat optimaliseren:
Eerst moet u de prestaties van het rapport testen.
Ga naar het tabblad Weergave en kies Performance Analyzer . Klik vervolgens op Start Recording and Refresh Visuals . Wacht tot de analysator de visual weergeeft.
Zodra dit is gebeurd, gaat u naar beneden in de lijst Incentive Breakdown en klikt u op Copy Query .
Selecteer vervolgens Externe tools om naar DAX Studio te gaan en de code te bekijken die LuckyTemplates heeft gegenereerd.
Plak vervolgens de gekopieerde query in de werkruimte.
Variabelen in de maat
De eerste variabele is DateClosed , de slicer op het dashboard. Het gebruikt een kolom uit de feitentabel om de waarden van bepaalde perioden in de slicer te krijgen.
De volgende variabele is JobLost , die controleert op False of Blank van de Job Lost-gegevens.
De laatste variabele is MatrixVisual . Dit is het hart van de code. Het toont de samengevatte kolom die door LuckyTemplates is gegenereerd om matrixvisuals te vullen. Het groepeert het type baanverlies in deze matrix en injecteert de filters die uit de slicers komen. Vervolgens voegt het uitgebreide kolommen toe.
Zodra de samenvattingskolom de uitvoering heeft voltooid, ziet u de resultaten in het deelvenster onder de code.
LuckyTemplates gebruikt het resultaat om matrixvisuals te vullen.
Koude cache voor DAX Studio
Vervolgens moet u controleren hoeveel tijd het kost om de hele code uit te voeren. Om dat te doen, schakelt u de Server Timings in en kiest u Cache wissen en vervolgens uitvoeren .
Wanneer u een meting in LuckyTemplates probeert te optimaliseren met DAX Studio , is het beter om te werken volgens het cold cache-scenario, zodat de tijd die u krijgt correct is. Druk daarna op F5 en wacht tot de bewerking is voltooid op het tabblad Server Timings .
Als het eenmaal is voltooid, kunt u zien dat de totale uitvoeringstijd 3,6 seconden is. Het bracht de meeste tijd door in de formule-engine en bracht 57 milliseconden door in de opslag-engine
U kunt ook zien dat er 383 query's voor de opslagengine zijn gevonden. Van al die vragen zijn er 327 die in het geheugen worden gegoten, zodat ze opnieuw kunnen worden gebruikt.
2. Analyseer een meting in LuckyTemplates
Vervolgens moet u deze 3 identieke maatregelen optimaliseren.
U moet deze metingen in een ander bestand extraheren en verbinden met het gegevensmodel dat u gebruikt.
Start daarna de Server Timings om de tijd te zien die nodig is voor de 3 metingen bij het vullen van visuals.
Uit de resultaten van de run blijkt dat de maatregelen 1,85 seconden nodig hebben om een resultaat op te halen.
Het resultaat toont een tabel bestaande uit 10 rijen en 3 uitgebreide kolommen die thuishoren in de samengevatte kolommen.
De kolom Verliestype bevat 10 unieke waarden die de code berekent om de stimuleringspercentages te krijgen.
De tijd die de code in beslag neemt, is exponentieel hoog. Dit is waar en wanneer u ze moet optimaliseren.
De RB Incentive%-maatstaf in LuckyTemplates
Dit is een RB Incentive%-maatstaf in LuckyTemplates. Het is een van de 3 belangrijkste maatregelen die in dit voorbeeld worden gebruikt.
U kunt zien dat het probeert het stimuleringspercentage te berekenen.
Het heeft een variabele, JobType, die de waarde Lost Type ophaalt in de huidige filtercontext. Het controleert ook of er slechts één enkele waarde zichtbaar is in de huidige filtercontext. functie gebruiken , zodat elke keer dat aan een voorwaarde wordt voldaan, het overeenkomstige resultaat wordt gegeven.
Deze meetcode genereert veel opslagmotorvet, waardoor de totale duur van de code toeneemt.
Ga nu terug naar DAX Studio om te controleren hoeveel query's voor de storage-engine de meting genereert.
U kunt zien dat het 600 milliseconden duurde om uit te voeren en 43 storage engine-query's om eenvoudig gegevens voor de 10 rijen op te halen.
Controleer nu de gegevens die worden opgevraagd bij de opslagengine. In de eerste query is er een Jobs Loss Type en DCOUNT van het Jobs Loss Type.
De volgende query heeft Jobs Datum Gesloten die afkomstig is uit de slicer in het rapport.
In de derde code ziet u een ander type banenverlies met de callback-gegevens-ID.
Op een andere regel ziet u de belangrijkste coderegels.
Het eerste dat u ziet, is de van de ontvangen opdrachtbetalingen, gefactureerde en werkelijke uitgaven.
Vervolgens is de WHERE- functie die een voorwaarde en het bijbehorende resultaat vermeldt. Het resultaat zal variëren op basis van de slicer-selectie en de switch-instructie in de RB Incentive%-meting.
U zult ook merken dat de code op regel 12 en 14 hetzelfde is.
Als u naar rechts scrolt, ziet u dat er regels zijn met dezelfde vragen. De vragen op de regels worden gestuurd door de switch-instructie in de RB Incentive%-maatstaf.
Als u teruggaat naar de meting RB Incentive% in LuckyTemplates, kunt u zien hoe vaak een query wordt herhaald en hoe dit wordt weerspiegeld in de query's van de opslagengine.
De logica achter IF en Switch
en SWITCH -functies begrijpen .
U moet ze afzonderlijk uitvoeren op een queryplan. Maar voordat u dat doet, moet u ervoor zorgen dat u verbinding maakt met de database en het queryplan inschakelt.
Voer de SWITCH- instructie uit in het queryplan. Markeer vervolgens de verklaring en druk vervolgens op Enter.
Dit genereert een logisch queryplan met verschillende bewerkingen.
Voer vervolgens de IF- instructie uit door de instructie te markeren en op enter te drukken.
U kunt zien dat het hetzelfde logische queryplan genereert.
Dit komt omdat wanneer u een SWITCH-functie gebruikt , de engine die functie intern converteert naar een IF- instructie. Maar een SWITCH- statement wordt aanbevolen omdat het de leesbaarheid van uw code vergroot.
Daarna moet u begrijpen hoe een code wordt uitgevoerd binnen de IF- of SWITCH -functie.
Dit is een voorbeeldcode met daarin een SWITCH- instructie.
Het heeft metingen voor brutowinst, totale schatting en totaal gefactureerd, die allemaal de SOM van verschillende kolommen zijn. Het heeft ook een functie over de van het type banenverlies en een SWITCH- en TRUE- verklaring.
Wanneer u deze code uitvoert, ziet u de logica achter de functies.
De eerste query haalt het verschillende type banenverlies op uit de tabel Taken.
Afgezien van het type banenverlies, krijgt het ook de som van de geschatte banen.
Binnen de WHERE- voorwaarde kunt u ook de waarden zien die bestaan in de kolom Type banenverlies.
3. Gebruik code-evaluatiemethoden
In DAX zijn er 3 methoden voor het evalueren van codes:
Deze methoden helpen u bij het optimaliseren van een code of meting in LuckyTemplates.
1e methode: strikte evaluatie
In het onderstaande voorbeeld wordt de strikte evaluatiemethode gebruikt.
De logica erachter is dat als de context van het type banenverlies gelijk is aan A, dit de brutowinst oplevert. Anders geeft het de totale schatting. De code doet dit voor elke rij in het type banenverlies.
Dit is een andere voorbeeldmaatregel in LuckyTemplates die Strikte Evaluatie gebruikt.
Wanneer u deze code uitvoert, genereert deze 5 opslagengine-query's.
Bij strikte evaluatie levert de code de totale schatting als de brutowinst vermenigvuldigd met 1,4 groter is dan de gemiddelde schatting. Anders geeft het de brutowinst.
Het gebruik van Strikte Evaluatie produceert meer query's voor de opslagengine omdat de IF- instructie de concurrentie van de brutowinst meerdere keren controleert en uiteindelijk de prestaties van de hele operatie zal belemmeren.
2e methode: enthousiaste evaluatie
Dit is dezelfde code als het vorige voorbeeld.
Maar in plaats van de maten binnen de IF- instructie te berekenen, berekende het alles in de vóór RETURN .
Dit betekent dat het, voordat het de verklaringen controleert, alle waarden van de brutowinst en de totale schatting voor alle soorten banenverlies krijgt.
Wanneer u deze code uitvoert, wordt het aantal storage-engines teruggebracht tot 3.
Het verbetert de prestaties van de hele operatie.
In de eerste bewerkingsquery krijgt het het type banenverlies en de som van de geschatte banen en de brutowinst.
De volgende query haalt de som op van de Jobs Estimate van de Jobs Stable. Dit wordt gebruikt bij het berekenen van de gemiddelde schatting.
De laatste query geeft het afzonderlijke Jobs Loss Type voor de waarden die in de ADDCOLUMNS zijn geschreven .
Het gebruik van de Eager Evaluation krijgt alles in één enkele datacache. De gegevens worden ook geëvalueerd en herhaald op de formule-engine. De IF- instructie retourneert de totale schatting of de brutowinst, afhankelijk van de juiste of onwaar-evaluatie.
Eager Evaluation is niet altijd de beste methode om uw codes te optimaliseren. Strikte evaluatie zal resulteren in betere prestaties als u complexe codes heeft. Het hangt allemaal af van de functies die u gebruikt in de DAX-code.
De keerzijde van Eager Evaluation is dat als u kostbaarheden creëert vóór een IF- of SWITCH- instructie en die variabelen in de instructie gebruikt die nooit zouden moeten worden uitgevoerd, de engine die variabelen nog steeds zal berekenen.
Hier is een voorbeeld van de keerzijde:
Idealiter, als het type banenverlies gelijk is aan A, zou het brutowinst moeten krijgen. Anders krijgt het Total Estimate.
Aangezien er geen waarde in de kolom Type baanverlies is die gelijk is aan A, moet deze altijd Total Estimate krijgen. Het biedt echter nog steeds de brutowinst in de datacache.
Als u naar de eerste query kijkt, krijgt deze het type banenverlies en de som van de brutowinst en schatting van de baan.
In de volgende query krijgt het een afzonderlijk type banenverlies uit de tabel Taken.
3e methode: IF.EAGER-evaluatie
De volgende methode is de IF.EAGER- functie-evaluatie die het gedrag van de Eager-evaluatie repliceert.
Hiermee kunt u een code schrijven die de Strict Evaluation vertegenwoordigt en deze uitvoeren met Eager Evaluation.
Als u naar deze voorbeeldcode kijkt, is deze precies hetzelfde als de strikte evaluatiecode. Het enige verschil is dat dit de functie IF.EAGER gebruikt in plaats van IF .
Voordat u de code uitvoert, moet u verbinding maken met het LuckyTemplates-model en de servertiming inschakelen. Als u klaar bent, drukt u op F5.
U kunt zien dat het 3 query's voor de opslagengine heeft gegenereerd.
De eerste query haalt het type banenverlies op en de som van de geschatte banen en de brutowinst.
De tweede query haalt de som op van de Jobs Estimate.
De laatste query haalt het verschillende type banenverlies op uit de tabel Taken.
U zult merken dat het hetzelfde gedrag heeft uitgevoerd als de Eager Evaluation.
Samenvatting evaluatiemethoden
Om de prestaties van uw berekeningen te verbeteren, moet u het volgende onthouden:
Houd er echter rekening mee dat u deze drie methoden moet testen om erachter te komen wat u echt het beste kunt gebruiken in uw rapport.
4. Optimaliseer een maatregel in LuckyTemplates
De belangrijkste les in deze zelfstudie is het optimaliseren van uw codes.
Ga terug en kijk naar de RB Incentive% -maatstaf die wordt uitgevoerd met Strict Evaluation. Probeer het vervolgens te evalueren met behulp van Eager Evaluation.
Begin met het maken van variabelen en het invoeren van de RETURN- functie.
Wijzig de maatreferenties met de variabelen.
Bevestig daarna de maatregel en ga naar de DAX Studio om te zien of het de prestaties heeft verbeterd.
Het laat zien dat de totale tijd 642 milliseconden is en dat het totale aantal query's voor de storage-engine is teruggebracht tot 39.
Maak nu de variabelen voor alle gegevens en wijzig alle maatreferenties in hun overeenkomstige variabelen.
Bevestig vervolgens de meting en voer de code uit in de DAX-studio.
De totale uitvoeringstijd en het totale aantal query's voor de storage-engine zijn teruggebracht van respectievelijk 600 milliseconden naar 170 milliseconden en 43 query's naar 15 query's.
Je kunt ook zien dat er geen duplicaten zijn. Het hebben van variabelen in uw code verbetert hun leesbaarheid en prestaties.
Geavanceerde optimalisatie voor een maatregel in LuckyTemplates
Vervolgens moet u uw DAX-codes verder optimaliseren.
Gebruik in plaats van .
HASONEVALUE telt het aantal beschikbare waarden in de filtercontext, wat een zeer intensieve operatie is. Ondertussen controleert ISINSCOPE of de kolom die wordt geleverd wordt gebruikt voor groepering of niet.
Bevestig na het wijzigen van de functies de meting en voer deze uit in DAX Studio.
Je ziet dat het aantal storage engine queries nu 12 is. De totale uitvoeringstijd is ook 105 milliseconden geworden.
In de 2e query ziet u een Callback-gegevens-ID.
Dit gebeurt soms wanneer u SELECTEDVALUE gebruikt met het tekstveld. Wanneer u Callback-gegevens ziet, roept de opslagengine de formule-engine aan om de complexiteit van de code op te lossen. Dit vertraagt de prestaties van uw meting.
U moet de callback-gegevens verwijderen om betere prestaties in uw rapport te krijgen. Om dat te doen, moet u een configuratietabel maken in het datamodel.
Ga naar de optie Gegevens invoeren en plak de gegevens. Noem de tabel LossTypeConfigTable .
Klik vervolgens op Bewerken om het gegevenstype te wijzigen van de kolom die u gaat importeren.
Het gegevenstype van de Loss Type ID moet een leraarwaarde zijn, zodat deze kan worden gebruikt binnen de functie SELECTEDVALUE .
Nadat het in het model is geladen, maakt u een relatie tussen de tabel Jobs en de tabel LossTypeConfigTable op basis van het type verlies.
Ga na het maken van een relatie naar de tabel Taken en voeg een nieuwe kolom toe. Noem het Loss ID en voer vervolgens de formule in.
Gebruik de functie voor de configuratietabel en extraheer vervolgens de Loss Type ID.
Ga vervolgens terug naar de RB Incentive%-meting en verwijs naar het numerieke veld in plaats van het tekstveld. Binnen SELECTEDVALUE vervangt u Loss Type door Loss ID.
Wijzig vervolgens alle maatregelen in de code. Gebruik een geheel getal in plaats van tekstwaarden bij het controleren op het taaktype.
Nadat u de code heeft gewijzigd, bevestigt u de meting en voert u deze uit in DAX Studio.
De callback-gegevens-ID wordt geëlimineerd in de query en de uitvoeringstijd van de code wordt teruggebracht tot 93 milliseconden.
De RB Incentive%-maatstaf is nu volledig geoptimaliseerd.
5. Optimaliseer andere maatregelen in LuckyTemplates
U moet ook de maatregelen WR Incentive% en QB Incentive% optimaliseren.
Kopieer en plak de exacte code die wordt gebruikt in de RB Incentive%-meting. Voer vervolgens de 3 maten samen uit.
De totale uitvoeringstijd is geoptimaliseerd en teruggebracht van 1855 milliseconden naar 213 milliseconden. Er zijn ook slechts 12 query's voor de opslagengine.
De eerste twee query's creëren de filtercontext en de rest vertegenwoordigt het exacte aantal waarden in de kolom Type banenverlies.
Aangezien alle metingen zijn geoptimaliseerd, voert u de originele code uit en ziet u hoe de prestaties zijn veranderd. Uit de gegevens blijkt dat het nu in 1,9 seconden wordt berekend.
De prestaties van de hele code zijn nu geoptimaliseerd, waardoor uw rapport sneller en beter wordt.
Optimaliseer DAX-functies met deze nieuwe cursus
Eenvoudige LuckyTemplates-transformaties voor meer geoptimaliseerde gegevens
LuckyTemplates-formules optimaliseren met geavanceerde DAX
Conclusie
In LuckyTemplates-rapporten moeten maatregelen worden geoptimaliseerd om ervoor te zorgen dat uw DAX-codes soepel verlopen. Dit verbetert ook de algehele prestaties van uw rapport.
Je hebt de verschillende methoden geleerd om je meting in LuckyTemplates te optimaliseren en je hebt geleerd hoe je kunt beoordelen welke je moet gebruiken, afhankelijk van de context van je rapport.
Wat is zelf in Python: voorbeelden uit de echte wereld
Je leert hoe je objecten uit een .rds-bestand in R opslaat en laadt. In deze blog wordt ook besproken hoe je objecten uit R naar LuckyTemplates importeert.
In deze tutorial over DAX-coderingstaal leert u hoe u de functie GENERATE gebruikt en hoe u de titel van een maat dynamisch wijzigt.
Deze zelfstudie behandelt hoe u de Multi Threaded Dynamic Visuals-techniek kunt gebruiken om inzichten te creëren op basis van dynamische gegevensvisualisaties in uw rapporten.
In dit artikel zal ik de filtercontext doornemen. Filtercontext is een van de belangrijkste onderwerpen waarover elke LuckyTemplates-gebruiker in eerste instantie zou moeten leren.
Ik wil laten zien hoe de online service LuckyTemplates Apps kan helpen bij het beheren van verschillende rapporten en inzichten die uit verschillende bronnen zijn gegenereerd.
Leer hoe u wijzigingen in uw winstmarge kunt berekenen met behulp van technieken zoals vertakking van metingen en het combineren van DAX-formules in LuckyTemplates.
Deze tutorial bespreekt de ideeën van materialisatie van datacaches en hoe deze de prestaties van DAX beïnvloeden bij het leveren van resultaten.
Als u tot nu toe nog steeds Excel gebruikt, is dit het beste moment om LuckyTemplates te gaan gebruiken voor uw zakelijke rapportagebehoeften.
Wat is LuckyTemplates Gateway? Alles wat u moet weten