Laat u niet afschrikken door berekeningen in relaties
Berekeningen kunnen intimiderend zijn. Berekeningen in een databron die gebruikmaakt van relaties, kunnen nog intimiderender lijken. Maar u hoeft zich niet te laten afschrikken door berekeningen in relaties.
Opmerking: als u nog niet vertrouwd bent met de principes achter databronnen die gebruikmaken van relaties, is het misschien nuttig eerst te kijken naar Laat u niet afschrikken door relaties voordat u zich in dit onderwerp verdiept.
Berekeningstypen
Een berekening op rijniveau wordt uitgevoerd voor elke record in de data. Elke verkooptransactie heeft bijvoorbeeld een verkoopbedrag, de prijs, eventueel aangepast met het kortingspercentage: Price * (1- ZN([Discount]))
. Dit wordt voor elke transactie rij voor rij berekend. De resultaten kunnen worden gezien als het toevoegen van een nieuwe kolom aan de databron voor Verkoopbedrag.
Er zijn ook geaggregeerde berekeningen. Geaggregeerde berekeningen worden berekend op het detailniveau van de visualisatie en de waarde hangt af van de structuur van de weergave. Aantallen zijn een voorbeeld van een geaggregeerde berekening. De waarde van Count([Title])
hangt ervan af of we naar het aantal kijken per formaat, auteur of verkoopdag.
Zie onze blog(Link wordt in een nieuw venster geopend) voor meer informatie over soorten berekeningen.
Detailniveau van tabel
Omdat elke tabel in de Tableau-databron zijn eigen detailniveau kan hebben, heeft de tabel waaraan een berekening is gekoppeld, een grote impact. Historisch gezien was het in Tableau (vóór 2020.2, vóór relaties) bijvoorbeeld mogelijk om het aantal records in de databron te tellen door een berekening te maken met de constante waarde 1
en het optellen ervan. 1
werd toegewezen aan elke rij in de databron, zodat de som gelijk was aan het aantal rijen.
Nu zou die berekening echter de waarde 1
hebben. Er is geen globaal detailniveau voor de gehele databron, en een constante berekening bevindt zich in het niet-toegewezen gebied onder aan het deelvenster Data. Dit heeft een eigen detailniveau. 1
optellen is eenvoudig 1
.
Zoals eerder vermeld horen berekeningen die hetzelfde detailniveau hebben als een tabel (meestal omdat ze een veld uit de tabel bevatten), in die tabel in het deelvenster Data. Zo wordt bijvoorbeeld de aaneenschakeling van voornaam en achternaam voor de volledige naam van elke auteur (dus: [First Name] + " " + [Last Name]
) in de tabel Auteur geplaatst.
Als we echter velden uit meerdere tabellen in één berekening zouden gebruiken, zou de berekening naar het niet-toegewezen gebied onder aan het deelvenster Data gaan. Dit wordt een berekening op rijniveau over meerdere tabellen genoemd; het vereist een join op rijniveau van de betrokken tabellen, wat invloed kan hebben op de prestaties. (Zorg ervoor dat in de Prestatieopties van de relatie de juiste kardinaliteit is ingesteld).
Detailniveau toewijzen
Omdat het detailniveau van een tabel bepaalt waar de resultaten van een berekening voor staan, is het belangrijk dat berekeningen in de juiste tabellen staan. U kunt een FIXED LOD-expressie gebruiken om een berekening naar een specifieke tabel te halen. Het veld waaraan de expressie is gekoppeld (de dimensiedeclaratie(Link wordt in een nieuw venster geopend)), bepaalt het detailniveau van de resultaten.
Voorbeeld: Boektournees voor auteurs
V: Aan hoeveel boektourneegebeurtenissen neemt elke auteur deel?
A: Dit getal moet aan elke auteur zijn gekoppeld, dus het moet in de auteurstabel staan.
- Boektourneegebeurtenissen voor auteurs =
{FIXED [Author Name] : SUM([Book Tour Events])}
- (Dit kan in gewone taal worden opgevat als "tel voor elke auteur het aantal boektourneegebeurtenissen bij elkaar op")
V: Hoeveel auteurs doen geen boektournees?
A: Het is verleidelijk om een berekening uit te proberen zoals deze:
COUNTD(IF ISNULL([Book Tour Events]) THEN ([Author Name]) END)
.- (Dit kan in gewone taal worden opgevat als "als Boektourneegebeurtenissen null is, retourneer dan de naam van de auteur. Tel elke unieke auteursnaam")
Dit is echter een berekening op rijniveau over meerdere tabellen, omdat Boektourneegebeurtenissen afkomstig is uit de tabel In serie en Auteursnaam uit de tabel Auteur. En dergelijke berekeningen over meerdere tabellen maken gebruik van inner joins, wat betekent dat wanneer er geen corresponderende waarde uit beide tabellen is, de rij uit de joinresultaten wordt verwijderd. Wat weer betekent dat we Tableau vragen om iets te tellen dat niet bestaat. Als de twee velden zich in dezelfde tabel zouden bevinden, zou dit echter een prima manier zijn om dit te doen. Er is niets mis met de berekening zoals deze er nu uitziet, behalve dat hij niet goed aansluit bij de structuur van de databron.
In plaats daarvan moeten we voor elke auteur de aan- of afwezigheid van boektourneegebeurtenissen aangeven en deze resultaten in de tabel Auteurs bewaren. Zodra elke auteur is gemarkeerd als wel of niet 'deelnemend aan een boektournee', kunnen we tellen hoeveel auteurs geen boektournee doen.
- Deelnemer aan boektournee? =
IF {FIXED [Author Name]: COUNT([Book Tour Events])} = 0 THEN "No" ELSE "Yes" END
- (Dit kan in gewone taal worden opgevat als "Tel voor elke auteur het aantal boektourneegebeurtenissen. Als dat aantal nul is, label de auteur dan met Nee, en anders met Ja. Door het veld de naam Deelnemer aan boektournee? te geven, krijgen we een rij ja's en nee's.)
Nu kunnen we het aantal nee's tellen en de oorspronkelijke vraag beantwoorden.
Als onze berekening Auteurs zonder boektournees = IF [Book tour participant?]= "No" THEN ([Author Name]) END
, krijgen we een lijst met auteurs die geen boektournees doen. (Dit kan worden gezien als "voor elke auteur waar Deelnemer aan boektournee? nee is, wordt de naam van de auteur vermeld.")
Als onze berekening COUNTD(IF [Book tour participant?]= "No" THEN ([Author Name]) END)
, krijgen we een numeriek antwoord dat zich in het niet-toegewezen gebied onder aan het deelvenster Data bevindt. Waarom? Omdat deze berekening geaggregeerd is.
Bonusvraag:
Kunnen we de structuur van de berekening voor Deelnemer aan boektournee? ook rechtstreeks gebruiken om de lijst met auteursnamen te retourneren? IF {FIXED [Author Name]: COUNT([Book Tour Events])} = 0 THEN ([Author Name]) END
. Waar zou deze berekening in het deelvenster Data naartoe gaan? Waarom? Probeer het uit in uw eigen exemplaar van Tableau Desktop, of download deze werkmap om het te zien. (Vereist Tableau Desktop 2020.2 of hoger. Eenmaal in de werkmappen klikt u met de rechtermuisknop op de berekening in het deelvenster Data en selecteert u Bewerken om de berekeningseditor te openen en een uitleg te zien in de opmerkingen bij de berekening.)
Gerelateerde bronnen
Voelt u zich enigszins overweldigd en wilt u een stap terug doen? Probeer Laat u niet afschrikken door relaties.
Klaar om nog verder te ontdekken hoe u met relaties complexe analyses kunt uitvoeren? Bekijk Laat u niet afschrikken door diepere relaties.
Bekijk voor meer informatie over de technische onderbouwing van relaties, rechtstreeks afkomstig van het Product Management-team, de serie over relaties in de Tableau-blog.
- Relaties, deel 1: Introductie van nieuwe datamodellering in Tableau (in het Engels)(Link wordt in een nieuw venster geopend)
- Relaties, deel 2: Tips en trucs (in het Engels)(Link wordt in een nieuw venster geopend)
- Relaties, deel 3: Vragen stellen over meerdere gerelateerde tabellen (in het Engels)(Link wordt in een nieuw venster geopend)
Zie ook videopodcasts over relaties van Actieanalyses(Link wordt in een nieuw venster geopend), zoals Waarom heeft Tableau relaties uitgevonden?(Link wordt in een nieuw venster geopend) Klik op 'Videopodcast’ in de Bibliotheek(Link wordt in een nieuw venster geopend) om meer te zien.