Logische functies

Dit artikel introduceert logische functies en hun gebruik in Tableau. Het laat ook zien hoe u een logische berekening kunt maken aan de hand van een voorbeeld.

Waarom logische berekeningen gebruiken

Met logische berekeningen kunt u bepalen of een bepaalde voorwaarde waar of onwaar is (Booleaanse logica). U wilt bijvoorbeeld waarden indelen op basis van bepaalde grenswaarden.

Een logische berekening zou er ongeveer als volgt uitzien:

IF [Profit] > 0 
THEN 'Profitable'
ELSEIF [Profit] = 0 THEN 'Break even'
ELSE 'Loss'
END

Logische functies en operators beschikbaar in Tableau

AND

Syntaxis<expr1> AND <expr2>
DefinitieVoert een logische conjunctie uit op twee expressies. (Als beide zijden waar zijn, retourneert de logische test 'true'.)
UitvoerBooleaans (waar of onwaar)
Voorbeeld
IF [Season] = "Spring" AND "[Season] = "Fall" 
THEN "It's the apocalypse and footwear doesn't matter"
END

’Als zowel (Season = Spring) als (Season = Fall) tegelijkertijd waar zijn, retourneer dan It's the apocalypse and footwear doesn't matter'.

Opmerkingen

Vaak gebruikt met IF en IIF. Zie ook NOT en OR.

Als beide expressies TRUE zijn (dat wil zeggen, niet FALSE of NULL), dan is het resultaat TRUE. Als een van beide expressies NULL is, dan is het resultaat NULL. In alle andere gevallen is het resultaat FALSE.

Als u een berekening maakt waarin het resultaat van een AND-vergelijking wordt weergegeven op een werkblad, geeft Tableau TRUE en FALSE aan. Als u dit wilt wijzigen, gebruikt u het gedeelte Notatie in het dialoogvenster Notatie.

Opmerking: de operator AND gebruikt evaluatie van kortsluiting. Dit betekent dat als de eerste expressie wordt geëvalueerd als FALSE, dan wordt de tweede expressie helemaal niet geëvalueerd. Dit kan handig zijn als de tweede expressie resulteert in een fout terwijl de eerste expressie FALSE is, omdat de tweede expressie in dit geval nooit wordt geëvalueerd.

CASE

SyntaxisCASE <expression>
WHEN <value1> THEN <then1>
WHEN <value2> THEN <then2>
...
[ELSE <default>]
END
UitvoerHangt af van datatype van de <then>-waarden.
Definitie

Evalueert de expression en vergelijkt deze met de opgegeven opties (<value1>, <value2>, enz.). Wanneer een value wordt aangetroffen die overeenkomt met de expressie, retourneert CASE de overeenkomstige return. Als geen overeenkomst wordt gevonden, wordt de (optionele) standaardwaarde geretourneerd. Als er geen standaardwaarde is en er geen overeenkomende waarden zijn, wordt Null geretourneerd.

Voorbeeld
CASE [Season] 
WHEN 'Summer' THEN 'Sandals'
WHEN 'Winter' THEN 'Boots'
ELSE 'Sneakers'
END

'Kijk naar het veld Season. Als de waarde Summer is, retourneer dan Sandals. Als de waarde Winter is, retourneer dan Boots. Als geen van de opties in de berekening overeenkomt met wat er in het veld Season staat, retourneer dan Sneakers'.

Opmerkingen

Zie ook IF en IIF.

Gebruikt met WHEN, THEN, ELSE en END.

Tip: vaak kunt u een groep gebruiken om dezelfde resultaten te krijgen als een ingewikkelde CASE-functie, of CASE gebruiken om de oorspronkelijke functie Groepering te vervangen, zoals in het vorige voorbeeld. Misschien wilt u testen welke optie het beste presteert voor uw scenario.

ELSE

SyntaxisCASE <expression>
WHEN <value1> THEN <then1>
WHEN <value2> THEN <then2>
...
[ELSE <default>]
END
DefinitieEen optioneel onderdeel van een IF- of CASE-expressie die wordt gebruikt om een standaardwaarde op te geven die moet worden geretourneerd als geen van de geteste expressies waar is.
Voorbeeld
IF [Season] = "Summer" THEN 'Sandals' 
ELSEIF [Season] = "Winter" THEN 'Boots'
ELSE 'Sneakers' 
END
CASE [Season] 
WHEN 'Summer' THEN 'Sandals'
WHEN 'Winter' THEN 'Boots'
ELSE 'Sneakers'
END
Opmerkingen

Gebruikt met CASE, WHEN, IF, ELSEIF, THEN en END

ELSE is optioneel met CASE en IF. In een berekening waarbij ELSE niet is gespecificeerd, zal de algehele berekening null retourneren indien geen van de <test>waar zijn.

ELSE vereist geen voorwaarde (zoals [Season] = "Winter") en kan worden beschouwd als een vorm van verwerking van de waarde Null.

ELSEIF

Syntaxis[ELSEIF <test2> THEN <then2>]
DefinitieEen optioneel onderdeel van een IF-expressie die wordt gebruikt om aanvullende voorwaarden te specificeren naast de initiële IF.
Voorbeeld
IF [Season] = "Summer" THEN 'Sandals' 
ELSEIF [Season] = "Winter" THEN 'Boots'
ELSEIF [Season] = "Spring" THEN 'Sneakers'
ELSEIF [Season] = "Autumn" THEN 'Sneakers'
ELSE 'Bare feet'
END
Opmerkingen

Gebruikt met IF, THEN, ELSE en END

ELSEIF kan worden beschouwd als een extra IF-clausule. ELSEIF is optioneel en kan meerdere keren herhaald worden.

Anders dan ELSE, vereist ELSEIF een voorwaarde (zoals [Season] = "Winter").

END

DefinitieWordt gebruikt om een IF- of CASE-expressie af te sluiten.
Voorbeeld
IF [Season] = "Summer" THEN 'Sandals' 
ELSEIF [Season] = "Winter" THEN 'Boots'
ELSE 'Sneakers' 
END

‘Als Season = Summer, retourneer dan Sandals. Zo niet, kijk dan naar de volgende expressie. Als Season = Winter, retourneer dan Boots. Als geen van beide expressies waar is, retourneer dan Sneakers'.

CASE [Season] 
WHEN 'Summer' THEN 'Sandals'
WHEN 'Winter' THEN 'Boots'
ELSE 'Sneakers'
END

'Kijk naar het veld Season. Als de waarde Summer is, retourneer dan Sandals. Als de waarde Winter is, retourneer dan Boots. Als geen van de opties in de berekening overeenkomt met wat er in het veld Season staat, retourneer dan Sneakers'.

Opmerkingen

Gebruikt met CASE, WHEN, IF, ELSEIF, THEN en ELSE.

IF

SyntaxisIF <test1> THEN <then1>
[ELSEIF <test2> THEN <then2>...]
[ELSE <default>]
END
UitvoerHangt af van datatype van de <then>-waarden.
Definitie

Test een reeks expressies en retourneert de waarde <then> voor de eerste ware <test>.

Voorbeeld
IF [Season] = "Summer" THEN 'Sandals' 
ELSEIF [Season] = "Winter" THEN 'Boots'
ELSE 'Sneakers' 
END

‘Als Season = Summer, retourneer dan Sandals. Zo niet, kijk dan naar de volgende expressie. Als Season = Winter, retourneer dan Boots. Als geen van beide expressies waar is, retourneer dan Sneakers'.

Opmerkingen

Zie ook IF en IIF.

Gebruikt met ELSEIF, THEN, ELSE en END

IFNULL

SyntaxisIFNULL(expr1, expr2)
UitvoerHangt af van het datatype van de <expr>-waarden.
Definitie

Retourneert <expr1> als dit niet ‘null’ is, anders wordt <expr2> geretourneerd.

Voorbeeld
IFNULL([Assigned Room], "TBD")

’Als het veld Assigned Room niet null is, wordt de waarde ervan geretourneerd. Als het veld Assigned Room null is, wordt in plaats daarvan TBD geretourneerd'.

Opmerkingen

Vergelijk met ISNULL. IFNULL retourneert altijd een waarde. ISNULL retourneert een Booleaanse waarde (true of false).

Zie ook ZN.

IIF

SyntaxisIIF(<test>, <then>, <else>, [<unknown>])
UitvoerHangt af van het datatype van de waarden in de expressie.
DefinitieControleert of aan een voorwaarde is voldaan (<test>), en retourneert <then>als de test waar is, <else> als de test niet waar is, en een optionele waarde voor <unknown> als de test null is. Als de optionele onbekende niet is opgegeven, retourneert IIF null.
Voorbeeld
IIF([Season] = 'Summer', 'Sandals', 'Other footwear')

‘Als Season = Summer, retourneer dan Sandals. Zo niet, retourneer dan Other footwear’

IIF([Season] = 'Summer', 'Sandals', 
IIF('Season' = 'Winter', 'Boots', 'Other footwear')
)

‘Als Season = Summer, retourneer dan Sandals. Zo niet, kijk dan naar de volgende expressie. Als Season = Winter, retourneer dan Boots. Als geen van beide waar is, retourneer dan Sneakers’.

IIF('Season' = 'Summer', 'Sandals', 
IIF('Season' = 'Winter', 'Boots',
IIF('Season' = 'Spring', 'Sneakers', 'Other footwear')
)
)

‘Als Season = Summer, retourneer dan Sandals. Zo niet, kijk dan naar de volgende expressie. Als Season = Winter, retourneer dan Boots. Als geen van de expressies waar is, retourneer dan Sneakers’.

Opmerkingen

Zie ook IF enCASE.

IIF heeft geen equivalent voor ELSEIF (zoals IF) of herhaalde WHEN-clausules (zoals CASE). In plaats daarvan kunnen meerdere tests sequentieel worden geëvalueerd door IIF-transacties te nesten als het <unknown> element. De eerste (buitenste) true wordt geretourneerd.

Dat wil zeggen dat in de onderstaande berekening het resultaat Rood zal zijn en niet Oranje, omdat de expressie niet meer wordt geëvalueerd zodra A=A als ‘waar’ wordt geëvalueerd:

IIF('A' = 'A', 'Red', IIF('B' = 'B', 'Orange', IIF('C' = 'D', 'Yellow', 'Green')))

IN

Syntaxis<expr1> IN <expr2>
UitvoerBooleaans (waar of onwaar)
DefinitieRetourneert TRUE als enige waarde in <expr1> overeenkomt met enige waarde in <expr2>.
Voorbeeld
SUM([Cost]) IN (1000, 15, 200)

‘Is de waarde van het veld Cost 1.000, 15, or 200?’

[Field] IN [Set]

‘Is de waarde van het veld aanwezig in de set?’

Opmerkingen

De waarden in <expr2> kan een set, een lijst met letterlijke waarden of een gecombineerd veld zijn.

Zie ook WHEN.

ISDATE

SyntaxisISDATE(string)
UitvoerBooleaans (waar of onwaar)
DefinitieRetourneert waar als een <string> een geldige datum is. De invoerexpressie moet een tekenreeks (tekst-)veld zijn.
Voorbeeld
ISDATE("2018-09-22")

’Is de tekenreeks 2018-09-22 een correct ingedeelde datum?’

Opmerkingen

Wat als geldige datum wordt beschouwd, hangt af van de landinstelling(Link wordt in een nieuw venster geopend) van het systeem dat de berekening evalueert. Bijvoorbeeld:

In de VS:

  • ISDATE("2018-09-22") = TRUE
  • ISDATE("2018-22-09") = FALSE

In het VK:

  • ISDATE("2018-09-22") = FALSE
  • ISDATE("2018-22-09") = TRUE

ISNULL

SyntaxisISNULL(expression)
UitvoerBooleaans (waar of onwaar)
Definitie

Retourneert waar als de <expression> NULL is (bevat geen geldige data).

Voorbeeld
ISNULL([Assigned Room])

’Is het veld Assigned Room null?’

Opmerkingen

Vergelijk met IFNULL. IFNULL retourneert altijd een waarde. ISNULL retourneert een Booleaanse waarde.

Zie ook ZN.

MAX

SyntaxisMAX(expression) of MAX(expr1, expr2)
UitvoerHetzelfde datatype als het argument, of NULL als een deel van het argument nul is.
Definitie

Retourneert het maximum van de twee argumenten. Deze moeten van hetzelfde datatype zijn.

MAX kan ook worden toegepast op een enkel veld als aggregatie.

Voorbeeld
MAX(4,7) = 7
MAX(#3/25/1986#, #2/20/2021#) = #2/20/2021#
MAX([Name]) = "Zander"
Opmerkingen

Voor tekenreeksen

MAX is meestal de waarde die als laatste in alfabetische volgorde staat.

Bij databasedatabronnen is de tekenreekswaarde MAX de hoogste in de sorteervolgorde die door de database voor die kolom is gedefinieerd.

Voor datums

Voor datums is MAX de meest recente datum. Als MAX een aggregatie is, zal het resultaat geen datumhiërarchie hebben. Als MAX een vergelijking is, behoudt het resultaat de datumhiërarchie.

Als een aggregatie

MAX(expression) is een geaggregeerde functie en retourneert één geaggregeerd resultaat. Dit wordt weergegeven als AGG(expression) in de visualisatie.

Ter vergelijking

MAX(expr1, expr2) vergelijkt de twee waarden en retourneert een waarde op rijniveau.

Zie ook MIN.

MIN

SyntaxisMIN(expression) of MIN(expr1, expr2)
UitvoerHetzelfde datatype als het argument, of NULL als een deel van het argument nul is.
Definitie

Retourneert het minimum van de twee argumenten, die van hetzelfde datatype moeten zijn.

MIN kan ook worden toegepast op een enkel veld als aggregatie.

Voorbeeld
MIN(4,7) = 4
MIN(#3/25/1986#, #2/20/2021#) = #3/25/1986#
MIN([Name]) = "Abebi"
Opmerkingen

Voor tekenreeksen

MIN is meestal de waarde die in alfabetische volgorde als eerste voorkomt.

Bij databasedatabronnen is de tekenreekswaarde MIN de laagste in de sorteervolgorde die door de database voor die kolom is gedefinieerd.

Voor datums

Voor datums is MIN de vroegste datum. Als MIN een aggregatie is, zal het resultaat geen datumhiërarchie hebben. Als MIN een vergelijking is, behoudt het resultaat de datumhiërarchie.

Als een aggregatie

MIN(expression) is een geaggregeerde functie en retourneert één geaggregeerd resultaat. Dit wordt weergegeven als AGG(expression) in de visualisatie.

Ter vergelijking

MIN(expr1, expr2) vergelijkt de twee waarden en retourneert een waarde op rijniveau.

Zie ook MAX.

NOT

SyntaxisNOT <expression>
UitvoerBooleaans (waar of onwaar)
DefinitieVoert een logische ontkenning uit op een expressie.
Voorbeeld
IF NOT [Season] = "Summer" 
THEN 'Don't wear sandals'
ELSE 'Wear sandals' 
END

‘Als het seizoen niet gelijk is aan Summer, retourneer dan Don't wear sandals. Zo niet, retourneer dan Wear sandals.’

Opmerkingen

Vaak gebruikt met IF en IIF. Zie ook AND en OR.

OR

Syntaxis<expr1> OR <expr2>
UitvoerBooleaans (waar of onwaar)
DefinitieVoert een logische ontkoppeling uit op twee expressies.
Voorbeeld
IF [Season] = "Spring" OR [Season] = "Fall" 
THEN "Sneakers"
END

‘Als (Season = Spring) of (Season = Fall) waar is, retourneer dan Sneakers.’

Opmerkingen

Vaak gebruikt met IF en IIF. Zie ook AND en NOT.

Als een van beide expressies TRUE is, dan is het resultaat TRUE. Als beide expressies FALSE zijn, dan is het resultaat FALSE. Als beide expressies NULL zijn, dan is het resultaat NULL.

Als u een berekening maakt die het resultaat van een OR-vergelijking maakt op een werkblad, geeft Tableau WAAR en ONWAAR weer. Als u dit wilt wijzigen, gebruikt u het gedeelte Notatie in het dialoogvenster Notatie.

Opmerking: de operator OR gebruikt evaluatie van kortsluiting. Dit betekent dat als de eerste expressie wordt geëvalueerd als TRUE, dan wordt de tweede expressie helemaal niet geëvalueerd. Dit kan handig zijn als de tweede expressie resulteert in een fout terwijl de eerste expressie TRUE is, omdat de tweede expressie in dit geval nooit wordt geëvalueerd.

THEN

SyntaxisIF <test1> THEN <then1>
[ELSEIF <test2> THEN <then2>...]
[ELSE <default>]
END
DefinitieEen vereist onderdeel van een IF-, ELSEIF- of CASE-expressie, die wordt gebruikt om te definiëren welk resultaat moet worden geretourneerd als een specifieke waarde of test waar is.
Voorbeeld
IF [Season] = "Summer" THEN 'Sandals' 
ELSEIF [Season] = "Winter" THEN 'Boots'
ELSE 'Sneakers' 
END

‘Als Season = Summer, retourneer dan Sandals. Zo niet, kijk dan naar de volgende expressie. Als Season = Winter, retourneer dan Boots. Als geen van beide expressies waar is, retourneer dan Sneakers'.

CASE [Season] 
WHEN 'Summer' THEN 'Sandals'
WHEN 'Winter' THEN 'Boots'
ELSE 'Sneakers'
END

'Kijk naar het veld Season. Als de waarde Summer is, retourneer dan Sandals. Als de waarde Winter is, retourneer dan Boots. Als geen van de opties in de berekening overeenkomt met wat er in het veld Season staat, retourneer dan Sneakers'.

Opmerkingen

Gebruikt met CASE, WHEN, IF, ELSEIF, THEN, ELSE en END

WHEN

SyntaxisCASE <expression>
WHEN <value1> THEN <then1>
WHEN <value2> THEN <then2>
...
[ELSE <default>]
END
DefinitieEen vereist onderdeel van een CASE-expressie. Vindt de eerste <value> die overeenkomt met <expression> en retourneert de overeenkomende <then>.
Voorbeeld
CASE [Season] 
WHEN 'Summer' THEN 'Sandals'
WHEN 'Winter' THEN 'Boots'
ELSE 'Sneakers'
END

'Kijk naar het veld Season. Als de waarde Summer is, retourneer dan Sandals. Als de waarde Winter is, retourneer dan Boots. Als geen van de opties in de berekening overeenkomt met wat er in het veld Season staat, retourneer dan Sneakers'.

Opmerkingen

Gebruikt met CASE, THEN, ELSE en END.

CASE ondersteunt ook de constructie WHEN IN, zoals:

CASE <expression> 
WHEN IN <set1> THEN <then1>
WHEN IN <combinedfield> THEN <then2>
...
ELSE <default>
END

De waarden die WHEN IN vergelijken moet een set, lijst met letterlijke waarden of gecombineerd veld zijn. Zie ook IN.

ZN

SyntaxisZN(expression)
UitvoerHangt af van het datatype van de <expression> of 0.
DefinitieRetourneert <expression> als deze niet null is, anders wordt nul geretourneerd.
Voorbeeld
ZN([Test Grade])

‘Als het toetscijfer niet null is, retourneer dan de waarde ervan. Als het toetscijfer nul is, retourneer dan 0.’

Opmerkingen

ZN is een gespecialiseerd geval van IFNULL waarbij het alternatief, als de expressie nul is, altijd 0 is en niet wordt gespecificeerd in de berekening.

ZN is vooral handig wanneer u aanvullende berekeningen uitvoert en een nullwaarde de gehele berekening null (nietig) zou maken. Wees echter voorzichtig bij het interpreteren van deze resultaten, want null is niet altijd synoniem met 0 en kan duiden op ontbrekende data.

Zie ook ISNULL.


Opmerking: sommige hiervan zijn in feite logische operators en worden in het zwart weergegeven, niet in het blauw. Zie Syntaxis van operators voor meer informatie.

Opmerking over CASE, IF en IIF

CASE is vaak gemakkelijker te gebruiken dan IF of IIF. In veel gevallen kunnen IF, IIF en CASE door elkaar worden gebruikt. Een CASE-instructie kan altijd worden herschreven als een IF-instructie, hoewel de CASE-functie over het algemeen beknopter en gemakkelijker te begrijpen zal zijn. Niet alle IF-instructies kunnen echter als CASE-instructies worden geschreven, omdat elke ELSEIF naar een ander veld kan verwijzen.

Tip: laten we een voorbeeld vergelijken waarbij dezelfde logica voor deze drie functies wordt gebruikt:

CASEIFIIF
CASE [Region]
WHEN 'West' THEN 1
WHEN 'East' THEN 2
WHEN 'South' THEN 3
WHEN 'North' Then 4
ELSE 5
END
IF [Region] = 'West' THEN 1
ELSEIF [Region] = 'East' THEN 2
ELSEIF [Region] = 'South' THEN 3
ELSEIF [Region] = 'North' THEN 4
ELSE 5
END
IIF([Region] = 'West', 1,
IIF([Region] = 'East', 2,
IIF([Region] = 'South', 3,
IIF([Region] = 'North', 4,
5, 0)
)
)
)

De CASE-structuur is heel eenvoudig en gemakkelijk te schrijven en te begrijpen. De expressie (hier: [Region]) kan echter geen logische bewerking zijn, in tegenstelling tot IF of IIF.

Null-waarden worden voor CASE op dezelfde manier verwerkt als voor IF.

De IF THEN-structuur staat meerdere ELSEIF-clausules toe, waardoor meerdere evaluaties veel eenvoudiger zijn dan bij IIF.

Verwerking van null-waarden: alle onbekende (nietige) resultaten worden door dezelfde ELSE-clausule behandeld als ‘false’ resultaten. Hier wordt aan elk gebied anders dan de vier opgegeven gebieden (inclusief ‘null’) de waarde 5 toegekend.

De IIF-structuur verwerkt onbekende resultaten anders dan valse resultaten en heeft een andere syntaxis dan IF. Het nadeel van specifieke null-verwerking is dat het nesten, zoals hierboven beschreven, lastig kan zijn om te schrijven en te begrijpen.

Verwerking van nullwaarden: aan alle niet-null-gebieden, behalve de vier opgegeven gebieden, wordt de waarde 5 toegekend, maar aan een null-waarde wordt een 0 toegekend.

Opmerking: vaak kunt u een groep gebruiken om dezelfde resultaten te krijgen als een ingewikkelde CASE-functie. Testen om te zien of de ene optie beter presteert dan de andere.

Voorbeelden

CASE-functies kunnen nuttig zijn voor scenario's zoals het realiseren van:

CASE LEFT(DATENAME('weekday',[Order Date]),3)
WHEN 'Sun' THEN 0
WHEN 'Mon' THEN 1
WHEN 'Tue' THEN 2
WHEN 'Wed' THEN 3
WHEN 'Thu' THEN 4
WHEN 'Fri' THEN 5
WHEN 'Sat' THEN 6
END

of de eindgebruiker de mogelijkheid geven om te selecteren welke meetwaarde deze in een grafiek wil bekijken bij gebruik met een parameter(Link wordt in een nieuw venster geopend):

CASE [Choose a Measure]
WHEN "Sales" THEN SUM([Sales])
WHEN "Profit" THEN AVG([Profit])
WHEN "Quantity" THEN COUNT([Quantity])
WHEN "Shipping Cost" THEN MEDIAN([Shipping Cost])
END

Een logische berekening maken

Volg de onderstaande stappen om te leren hoe u een logische berekening maakt.

  1. Maak in Tableau Desktop verbinding met de opgeslagen databron Voorbeeld - Superstore, die bij Tableau wordt geleverd.
  2. Navigeer naar een werkblad.
  3. Sleep State vanuit het deelvenster Data naar de container Rijen.
  4. Sleep Categorie vanuit het deelvenster Data naar de container Rijen en plaats het rechts van State.
  5. Sleep Sales vanuit het deelvenster Data naar de container Kolommen.
  6. Selecteer Analyse > Berekend veld maken.
  7. Doe het volgende in de berekeningseditor die wordt geopend:
    • Geef het berekende veld de naam KPI.
    • Voer de volgende formule in:
      SUM([Profit]) > 0

      Met deze berekening kunt u snel controleren of een lid groter is dan nul. Als dat zo is, wordt true geretourneerd. Als dat niet zo is, wordt false geretourneerd.

    • Klik op OK als u klaar bent.
  8. Het nieuwe berekende veld wordt getoond onder Meetwaarden in het deelvenster Data. Net als uw andere velden kunt u dit veld in een of meer visualisaties gebruiken.

  9. Sleep in het deelvenster Data KPI naar Kleur op de kaart Markeringen.

    U kunt nu zien welke categorieën in elke staat verliesgevend zijn.

Zie ook

Belangrijke voortgangsindicatoren visualiseren

Functies in Tableau

Tableau-functies (op categorie)

Tableau-functies (alfabetische lijst)

Bedankt voor uw feedback.De feedback is verzonden. Dank u wel.