Freigeben über


OFFSET

Gilt für:Berechnete SpalteBerechnete TabelleMeasurevisuelle Berechnung

Gibt eine einzelne Zeile zurück, die vor oder nach dem aktuellen Zeile innerhalb derselben Tabelle durch einen bestimmten Offset positioniert wird. Wenn die aktuelle Zeile nicht zu einer einzelnen Zeile abgeleitet werden kann, werden möglicherweise mehrere Zeilen zurückgegeben.

Syntax

OFFSET ( <delta>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

Parameter

Ausdruck Definition
delta Die Anzahl der Zeilen vor (negativer Wert) oder nach (positivem Wert) der aktuellen Zeile, aus der die Daten abgerufen werden sollen. Dabei kann es sich um einen beliebigen DAX Ausdruck handeln, der einen skalaren Wert zurückgibt.
relation (Optional) Ein Tabellenausdruck, aus dem die Ausgabezeile zurückgegeben wird.
Wenn angegeben, müssen alle Spalten in partitionBy daraus oder einer verknüpften Tabelle stammen.
Wenn nicht angegeben:
- orderBy muss explizit angegeben werden.
– Alle orderBy- und partitionBy Ausdrücke müssen vollqualifizierte Spaltennamen sein und aus einer einzelnen Tabelle stammen.
– Standardmäßig werden alle Spalten in orderBy und partitionByALLSELECTED() angezeigt.
axis (Optional) Eine Achse in der visuellen Form. Nur in visuellen Berechnungen verfügbar und ersetzt relation.
orderBy (Optional) Eine ORDERBY() Klausel mit den Ausdrücken, die definieren, wie jede Partition sortiert wird.
Wenn nicht angegeben:
- relation muss explizit angegeben werden.
– Standardmäßig wird jede Spalte in relation sortiert, die nicht bereits in partitionByangegeben ist.
blanks (Optional) Eine Aufzählung, die definiert, wie leere Werte beim Sortieren der relation oder axisbehandelt werden.
Die unterstützten Werte sind:
  • DEFAULT (Standardwert), bei dem das Verhalten für numerische Werte leer ist, werden zwischen Null und negativen Werten sortiert. Das Verhalten für Zeichenfolgen ist leere Werte, bevor alle Zeichenfolgen sortiert werden, einschließlich leerer Zeichenfolgen.
  • FIRSTwerden Leerzeichen immer am Anfang sortiert, unabhängig von aufsteigender oder absteigender Sortierreihenfolge.
  • LASTwerden Leerzeichen immer am Ende sortiert, unabhängig von aufsteigender oder absteigender Sortierreihenfolge.

Note, when the blanks parameter and blanks in the ORDERBY() () function on individual expressions are both specified, blanks on individual orderBy expression takes priority for the relevant orderBy expression, and orderBy expressions without blanks being specified will honor the blanks parameter on the parent function.
partitionBy (Optional) Eine PARTITIONBY() Klausel, die die Spalten enthält, die definieren, wie relation partitioniert wird. Wenn sie weggelassen wird, wird relation als einzelne Partition behandelt.
matchBy (Optional) Eine MATCHBY() Klausel mit den Spalten, die definieren, wie Daten übereinstimmen und die aktuelle Zeile identifiziert werden.
reset (Optional) Nur in visuellen Berechnungen verfügbar. Gibt an, ob die Berechnung zurückgesetzt wird und auf welcher Ebene der Spaltenhierarchie des visuellen Shapes. Akzeptierte Werte sind: ein Feldverweis auf eine Spalte in der aktuellen visuellen Form, NONE (Standard), LOWESTPARENT, HIGHESTPARENToder eine ganze Zahl. Das Verhalten hängt vom ganzzahligen Vorzeichen ab:
– Wenn null oder ausgelassen wird, wird die Berechnung nicht zurückgesetzt. Entspricht NONE.
- Wenn die ganze Zahl positiv ist, identifiziert die ganze Zahl die Spalte beginnend mit der höchsten, unabhängig von Korn. HIGHESTPARENT entspricht 1.
- Wenn negativ, identifiziert die ganze Zahl die Spalte beginnend mit dem niedrigsten, relativ zum aktuellen Korn. LOWESTPARENT entspricht -1.

Rückgabewert

Mindestens eine Zeile aus relation.

Bemerkungen

Mit Ausnahme von Spalten, die von DAX Tabellenfunktionen hinzugefügt werden, muss jede Spalte in relation, wenn matchBy nicht vorhanden ist, oder jede Spalte in matchBy und partitionBy, wenn matchBy vorhanden ist, über einen entsprechenden äußeren Wert verfügen, um die aktuelle Zeile zu definieren, auf der ausgeführt werden soll, mit dem folgenden Verhalten:

  • Wenn genau eine entsprechende äußere Spalte vorhanden ist, wird der Wert verwendet.
  • Wenn keine entsprechende äußere Spalte vorhanden ist, dann:
    • OFFSET bestimmt zuerst alle Spalten, die keine entsprechende äußere Spalte aufweisen.
    • Für jede Kombination vorhandener Werte für diese Spalten im übergeordneten Kontext OFFSETwird OFFSET ausgewertet und eine Zeile zurückgegeben.
    • OFFSETendgültige Ausgabe ist eine Vereinigung dieser Zeilen.
  • Wenn mehr als eine entsprechende äußere Spalte vorhanden ist, wird ein Fehler zurückgegeben.

Wenn alle relationSpalten von DAX Tabellenfunktionen hinzugefügt wurden, wird ein Fehler zurückgegeben.

Wenn matchBy vorhanden ist, versucht OFFSET, matchBy und partitionBy Spalten zu verwenden, um die Zeile zu identifizieren. Wenn matchBy nicht vorhanden ist und die in orderBy angegebenen Spalten und partitionBy nicht jede Zeile in relationeindeutig identifizieren können, dann:

  • OFFSET versuchen, die geringste Anzahl zusätzlicher Spalten zu finden, die erforderlich sind, um jede Zeile eindeutig zu identifizieren.
  • Wenn solche Spalten gefunden werden können, fügt OFFSET diese neuen Spalten automatisch an orderByan, und jede Partition wird mithilfe dieser neuen Reihe von OrderBy-Spalten sortiert.
  • Wenn solche Spalten nicht gefunden werden können, wird ein Fehler zurückgegeben.

Eine leere Tabelle wird zurückgegeben, wenn:

  • Der entsprechende äußere Wert einer Spalte "OrderBy" oder "PartitionBy" ist in relationnicht vorhanden.
  • Der wert delta bewirkt eine Verschiebung zu einer Zeile, die nicht innerhalb der Partition vorhanden ist.

Wenn OFFSET in einer berechneten Spalte verwendet wird, die in derselben Tabelle wie relationdefiniert ist und orderBy weggelassen wird, wird ein Fehler zurückgegeben.

reset kann nur in visuellen Berechnungen verwendet werden und kann nicht in Kombination mit orderBy oder partitionByverwendet werden. Wenn reset vorhanden ist, können axis angegeben werden, aber relation nicht.

Beispiel 1 – berechnete Spalte

Die folgende DAX Abfrage:

DEFINE
VAR vRelation = SUMMARIZECOLUMNS ( 
                    DimProductCategory[EnglishProductCategoryName], 
                    DimDate[CalendarYear], 
                    "CurrentYearSales", SUM(FactInternetSales[SalesAmount]) 
                  )
EVALUATE
ADDCOLUMNS (
    vRelation, 
    "PreviousYearSales", 
    SELECTCOLUMNS(
        OFFSET ( 
                -1, 
                vRelation, 
                ORDERBY([CalendarYear]), 
                PARTITIONBY([EnglishProductCategoryName])
        ),
        [CurrentYearSales]
    )
)

Gibt eine Tabelle zurück, die den Gesamtumsatz für jede Produktkategorie und jedes Kalenderjahr sowie den Gesamtumsatz für diese Kategorie im Vorjahr zusammenfasst.

Beispiel 2 – Maß

Die folgende DAX Abfrage:

DEFINE
MEASURE DimProduct[CurrentYearSales] = SUM(FactInternetSales[SalesAmount])
MEASURE DimProduct[PreviousYearSales] = CALCULATE(SUM(FactInternetSales[SalesAmount]), OFFSET(-1, , ORDERBY(DimDate[CalendarYear])))
EVALUATE
SUMMARIZECOLUMNS (
    DimDate[CalendarYear],
    "CurrentYearSales", DimProduct[CurrentYearSales],
    "PreviousYearSales", DimProduct[PreviousYearSales]
)

Verwendet OFFSET() in einem Measure, um eine Tabelle zurückzugeben, die den Gesamtumsatz für jedes Kalenderjahr und den Gesamtumsatz für das Vorjahr zusammenfasst.

Beispiel 3 – berechnete Spalte

Die folgende DAX Abfrage:

EVALUATE
ADDCOLUMNS (
    FactInternetSales,
    "Previous Sales Amount",
        SELECTCOLUMNS (
            OFFSET (
                -1,
                FactInternetSales,
                ORDERBY ( FactInternetSales[SalesAmount], DESC ),
                PARTITIONBY ( FactInternetSales[ProductKey] ),
                MATCHBY( FactInternetSales[SalesOrderNumber], FactInternetSales[SalesOrderLineNumber] )
            ),
            FactInternetSales[SalesAmount]
        )
)

Gibt die Tabelle "FactInternetSales" zurück, in der eine Spalte hinzugefügt wird, die für jeden Verkauf den Betrag des vorherigen Verkaufs in absteigender Reihenfolge des Verkaufsbetrags angibt, wobei der aktuelle Verkauf durch "SalesOrderNumber" und "SalesOrderLineNumber" identifiziert wird. Ohne MATCHBYwürde die Abfrage einen Fehler zurückgeben, da in der Tabelle "FactInternetSales" keine Schlüsselspalten vorhanden sind.

Beispiel 4 – visuelle Berechnung

Die folgende visuelle Berechnung DAX Abfrage:

SalesRelativeToPreviousMonth = [SalesAmount] - CALCULATE(SUM([SalesAmount]), OFFSET(-1, ROWS, HIGHESTPARENT))

Gibt die Differenz zwischen jedem Monat und dem vorherigen Umsatz innerhalb desselben Jahres zurück.

Der folgende Screenshot zeigt die visuelle Matrix und den Ausdruck der visuellen Berechnung:

DAX visuelle Berechnung

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER