I det här avsnittet beskrivs hur du skapar filter i DAX-formler (Data Analysis Expressions). Du kan skapa filter i formler för att begränsa värdena från källdata som används i beräkningar. Det gör du genom att ange en tabell som indata i formeln och sedan definiera ett filteruttryck. Filteruttrycket du anger används för att fråga data och returnera endast en delmängd av källdata. Filtret används dynamiskt varje gång du uppdaterar formelresultatet, beroende på aktuell kontext för dina data.
I den här artikeln
Skapa ett filter i en tabell som används i en formel
Du kan använda filter i formler som tar en tabell som indata. I stället för att ange ett tabellnamn använder du funktionen FILTER för att definiera en delmängd rader från den angivna tabellen. Den delmängden skickas sedan till en annan funktion, för åtgärder som anpassade aggregeringar.
Anta till exempel att du har en tabell med data som innehåller orderinformation om återförsäljare och vill beräkna hur mycket varje återförsäljare har sålt. Men du vill visa försäljningsbeloppet bara för de återförsäljare som sålde flera enheter av dina produkter med högre värde. Följande formel, baserad på DAX-exempelarbetsboken, visar ett exempel på hur du kan skapa den här beräkningen med hjälp av ett filter:
=SUMX(
FILTER ('ResellerSales_USD', 'ResellerSales_USD'[Antal] > 5 && 'ResellerSales_USD'[ProductStandardCost_USD] > 100), 'ResellerSales_USD'[SalesAmt] )-
Den första delen av formeln anger en av de Power Pivot aggregeringsfunktionerna, som använder en tabell som ett argument. SUMMAX beräknar en summa över en tabell.
-
Den andra delen av formeln FILTER(table, expression),talar om för SUMX vilka data som ska användas. SUMX kräver en tabell eller ett uttryck som resulterar i en tabell. I stället för att använda alla data i en tabell kan du använda funktionen FILTER för att ange vilka av raderna från tabellen som ska användas.
Filteruttrycket består av två delar: i den första delen namnges tabellen som filtret använder. Den andra delen definierar ett uttryck som ska användas som filtervillkor. I det här fallet filtrerar du på återförsäljare som har sålt fler än 5 enheter och produkter som kostar mer än 1 000 kr. Operatorn, &&, är en logisk OCH-operator, som anger att båda delarna av villkoret måste vara sanna för att raden ska tillhöra den filtrerade delmängden.
-
Den tredje delen av formeln anger för funktionen SUMX vilka värden som ska summeras. I det här fallet använder du bara försäljningsbeloppet.
Observera att funktioner som FILTER, som returnerar en tabell, aldrig returnerar tabellen eller raderna direkt, men alltid är inbäddade i en annan funktion. Mer information om FILTER och andra funktioner som används för filtrering, inklusive fler exempel, finns i Filtrera funktioner (DAX).
Obs!: Filteruttrycket påverkas av det sammanhang i vilket det används. Om du till exempel använder ett filter i ett mått och måttet används i en pivottabell eller ett pivotdiagram, kan delmängden av data som returneras påverkas av ytterligare filter eller utsnitt som användaren har tillämpat i pivottabellen. Mer information om kontext finns i Sammanhang i DAX-formler.
Filter som tar bort dubbletter
Förutom att filtrera efter specifika värden kan du returnera en unik uppsättning värden från en annan tabell eller kolumn. Det kan vara användbart när du vill räkna antalet unika värden i en kolumn eller om du vill använda en lista med unika värden för andra åtgärder. DAX innehåller två funktioner för att returnera distinkta värden: DISTINCT, funktion och FUNKTIONEN VÄRDEN.
-
Funktionen DISTINCT undersöker en enda kolumn som du anger som ett argument till funktionen och returnerar en ny kolumn som bara innehåller distinkta värden.
-
Funktionen VÄRDEN returnerar också en lista med unika värden, men returnerar också okänd medlem. Det här är användbart när du använder värden från två tabeller som kopplas av en relation, och ett värde saknas i den ena tabellen och finns i den andra. Mer information om den okända medlemmen finns i Sammanhang i DAX-formler.
Båda dessa funktioner returnerar en hel kolumn med värden. Därför använder du funktionerna för att få en lista med värden som sedan skickas till en annan funktion. Du kan till exempel använda följande formel för att få en lista över de distinkta produkter som säljs av en viss återförsäljare, med hjälp av den unika produktnyckeln, och sedan räkna produkterna i listan med hjälp av funktionen ANTALVÄRNINGAR:
=ANTALVAR(DISTINKT('ResellerSales_USD'[ProductKey]))
Hur kontext påverkar filter
När du lägger till en DAX-formel i en pivottabell eller ett pivotdiagram kan resultatet av formeln påverkas av sammanhanget. Om du arbetar i en Power Pivot tabell är kontexten den aktuella raden och dess värden. Om du arbetar i en pivottabell eller ett pivotdiagram innebär sammanhanget den uppsättning eller delmängd av data som definieras av åtgärder som att skära eller filtrera. Pivottabellens eller pivotdiagrammets utformning har också ett eget sammanhang. Om du till exempel skapar en pivottabell som grupperar försäljning efter region och år visas endast de data som gäller för de regionerna och åren i pivottabellen. Därför beräknas alla mått som du lägger till i pivottabellen i samband med kolumn- och radrubrikerna plus eventuella filter i måttformeln.
Mer information finns i Sammanhang i DAX-formler.
Ta bort filter
När du arbetar med komplexa formler kanske du vill veta exakt vad de aktuella filtren är, eller så kanske du vill ändra filterdelen av formeln. DAX innehåller flera funktioner som gör att du kan ta bort filter och styra vilka kolumner som ska behållas som en del av den aktuella filterkontexten. Det här avsnittet ger en översikt över hur dessa funktioner påverkar resultatet i en formel.
Åsidosätta alla filter med funktionen ALL
Du kan använda funktionen ALL för att åsidosätta eventuella filter som tidigare tillämpats och returnera alla rader i tabellen till den funktion som utför mängdåtgärden eller en annan åtgärd. Om du använder en eller flera kolumner, i stället för en tabell, som argument för att ALLreturnerar funktionen ALL alla rader och ignorerar eventuella kontextfilter.
Obs!: Om du är bekant med relationsdatabasterminologi kan du tänka dig ALL som att generera den naturliga vänstra yttre kopplingen av alla tabeller.
Anta till exempel att du har tabellerna Försäljning och Produkter och vill skapa en formel som beräknar försäljningssumman för den aktuella produkten dividerat med försäljningen för alla produkter. Om formeln används i ett mått måste du ta hänsyn till att pivottabellanvändaren kanske använder ett utsnitt för att filtrera efter en viss produkt, med produktnamnet på raderna. För att få fram det verkliga värdet för nämnaren oavsett filter eller utsnitt måste du därför lägga till funktionen ALL för att åsidosätta eventuella filter. Följande formel är ett exempel på hur du använder ALL för att åsidosätta effekterna av tidigare filter:
=SUMMA (Sales[Amount])/SUMX(Sales[Amount], FILTER(Sales, ALL(Products)))
-
Den första delen av formeln, SUMMA (Försäljning[Belopp]), beräknar täljaren.
-
Summan tar hänsyn till det aktuella sammanhanget, vilket innebär att om du lägger till formeln i en beräknad kolumn används radkontexten, och om du lägger till formeln i en pivottabell som ett mått tillämpas eventuella filter i pivottabellen (filterkontexten).
-
Den andra delen av formeln beräknar nämnaren. Funktionen ALL åsidosätter eventuella filter som kan användas i den Products tabellen.
Mer information, inklusive detaljerade exempel, finns i FUNKTIONEN ALLA.
Åsidosätta specifika filter med funktionen ALLEXCEPT
Funktionen ALLEXCEPT åsidosätter även befintliga filter, men du kan ange att vissa av de befintliga filtren ska bevaras. Kolumnerna som du namnger som argument till funktionen ALLEXCEPT anger vilka kolumner som ska fortsätta att filtreras. Om du vill åsidosätta filter från de flesta kolumner men inte alla är ALLEXCEPT mer praktiskt än ALLA. Funktionen ALLEXCEPT är särskilt användbar när du skapar pivottabeller som kan filtreras på många olika kolumner och du vill styra de värden som används i formeln. Mer information, inklusive ett detaljerat exempel på hur du använder ALLEXCEPT i en pivottabell, finns i Funktionen ALLEXCEPT.