INDEX

Gibt eine Zeile an einer absoluten Position (angegeben durch den Positionsparameter) innerhalb der angegebenen Partition zurück, sortiert nach der angegebenen Reihenfolge. Falls die aktuelle Partition nicht zu einer einzigen Partition deduziert werden kann, werden möglicherweise mehrere Zeilen zurückgegeben.

Syntax

INDEX(<position>[, <relation>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>])

Parameter

Begriff Definition
position Die absolute Position (mit Basis 1), von der aus die Daten bezogen werden sollen:
– <position> ist positiv: 1 ist die erste Zeile, 2 ist die zweite Zeile usw.
– <position> ist negativ: -1 ist die letzte Zeile, -2 ist die vorletzte Zeile usw.
Wenn <position> außerhalb der Begrenzung liegt oder 0 oder BLANK() entspricht, gibt INDEX eine leere Tabelle zurück. Hierbei kann es sich um einen beliebigen DAX-Ausdruck handeln, der einen Skalarwert zurückgibt.
relation (Optional) Ein Tabellenausdruck, über den die Ausgabe zurückgegeben wird.
Wenn angegeben, müssen alle Spalten in <partitionBy> von dort oder aus einer zugehörigen Tabelle stammen.
Bei Auslassung:
– <orderBy> muss explizit angegeben werden.
– Alle <orderBy>- und <partitionBy>-Ausdrücke müssen vollqualifizierte Spaltennamen sein und aus einer einzigen Tabelle stammen.
– Für alle Spalten in <orderBy> und <partitionBy> wird standardmäßig ALLSELECTED() verwendet.
orderBy (Optional) Eine ORDERBY()-Klausel mit den Ausdrücken, die definieren, wie jede Partition sortiert wird.
Bei Auslassung:
– <relation> muss explizit angegeben werden.
– Standardmäßig erfolgt die Sortierung nach jeder Spalte in <relation>, die nicht bereits in <partitionBy> angegeben ist.
Leerzeichen (Optional) Eine Enumeration, die definiert, wie leere Werte beim Sortieren behandelt werden.
Dieser Parameter ist für die zukünftige Verwendung reserviert.
Derzeit ist der einzige unterstützte Wert DEFAULT, wobei das Verhalten für numerische Werte darin besteht, dass leere Werte zwischen 0 und negativen Werten angeordnet werden. Bei Zeichenfolgen werden leere Werte vor allen anderen Zeichenfolgen angeordnet, einschließlich leerer Zeichenfolgen.
partitionBy (Optional) Eine PARTITIONBY()-Klausel mit Spalten, die definieren, wie <relation> partitioniert wird.
Bei Auslassung wird <relation> als eine einzelne Partition behandelt.
matchBy (Optional) Eine MATCHBY()-Klausel, die die Spalten enthält, die definieren, wie Daten abgeglichen werden und die aktuelle Zeile identifiziert wird.

Rückgabewert

Eine Zeile an einer absoluten Position.

Bemerkungen

Jede <partitionBy> und <matchBy>-Spalte muss einen entsprechenden äußeren Wert aufweisen, um die aktuelle Partition zu definieren, die verarbeitet werden soll. Dies geschieht durch das folgende Verhalten:

  • Wenn es genau eine entsprechende äußere Spalte gibt, wird deren Wert verwendet.
  • Wenn keine entsprechende äußere Spalte vorhanden ist, lautet das Vorgehen wie folgt:
    • INDEX ermittelt zunächst alle <partitionBy>- und <matchBy>Spalten, die nicht über eine entsprechende äußere Spalte verfügen.
    • Für jede Kombination vorhandener Werte für diese Spalten im übergeordneten Kontext von INDEX wird INDEX ausgewertet, und es wird eine Zeile zurückgegeben.
    • Die endgültige Ausgabe von INDEX ist eine Vereinigung dieser Zeilen.
  • Wenn es mehr als eine entsprechende äußere Spalte gibt, wird ein Fehler zurückgegeben.

Wenn <matchBy> vorhanden ist, versucht INDEX, die Spalten <matchBy> und <partitionBy> zu verwenden, um die Zeile zu identifizieren.
Wenn <matchBy> nicht vorhanden ist, und die in <orderBy> und <partitionBy> angegebenen Spalten nicht jede Zeile in <relation> eindeutig identifizieren können, gilt Folgendes:

  • INDEX versucht, die kleinstmögliche Anzahl zusätzlicher Spalten zu finden, die zur eindeutigen Identifizierung jeder Zeile erforderlich sind.
  • Wenn solche Spalten gefunden werden, fügt INDEX diese neuen Spalten automatisch an <orderBy> an, und jede Partition wird anhand dieses neuen Satzes von orderBy-Spalten sortiert.
  • Wenn keine solchen Spalten gefunden werden, wird ein Fehler zurückgegeben.

In den folgenden Fällen wird eine leere Tabelle zurückgegeben:

  • In <relation> ist kein entsprechender äußerer Wert einer PartitionBy-Spalte vorhanden.
  • Der <position>-Wert bezieht sich auf eine Position, die innerhalb der Partition nicht vorhanden ist.

Wenn INDEX innerhalb einer berechneten Spalte verwendet wird, die in derselben Tabelle wie <relation> definiert ist, und <orderBy> nicht angegeben ist, wird ein Fehler zurückgegeben.

Beispiel 1

Die folgende DAX-Abfrage:

EVALUATE INDEX(1, ALL(DimDate[CalendarYear]))

Gibt die folgende Tabelle zurück:

DimDate[CalendarYear]
2005

Beispiel 2

Die folgende DAX-Abfrage:

EVALUATE
SUMMARIZECOLUMNS (
    FactInternetSales[ProductKey],
    DimDate[MonthNumberOfYear],
    FILTER (
            VALUES(FactInternetSales[ProductKey]),
            [ProductKey] < 222
    ),
    "CurrentSales", SUM(FactInternetSales[SalesAmount]),
    "LastMonthSales",
    CALCULATE (
        SUM(FactInternetSales[SalesAmount]),
        INDEX(-1, ORDERBY(DimDate[MonthNumberOfYear]))
    )
)
ORDER BY [ProductKey], [MonthNumberOfYear]

Gibt die folgende Tabelle zurück:

FactInternetSales[ProductKey] DimDate[MonthNumberOfYear] [CurrentSales] [LastMonthSales]
214 1 5423.45 8047.7
214 2 4968.58 8047.7
214 3 5598.4 8047.7
214 4 5073.55 8047.7
214 5 5248.5 8047.7
214 6 7487.86 8047.7
214 7 7382.89 8047.7
214 8 6543.13 8047.7
214 9 6788.06 8047.7
214 10 6858.04 8047.7
214 11 8607.54 8047.7
214 12 8047.7 8047.7
217 1 5353.47 7767.78
217 2 4268.78 7767.78
217 3 5773.35 7767.78
217 4 5738.36 7767.78
217 5 6158.24 7767.78
217 6 6998 7767.78
217 7 5563.41 7767.78
217 8 5913.31 7767.78
217 9 5913.31 7767.78
217 10 6823.05 7767.78
217 11 6683.09 7767.78
217 12 7767.78 7767.78

Siehe auch

OFFSET
ORDERBY
PARTITIONBY
WINDOW
RANK
ROWNUMBER