Udostępnij za pośrednictwem


OFFSET

Dotyczy:Kolumna obliczeniowaTabela obliczeniowaMiaraObliczenia wizualne

Zwraca pojedynczy wiersz umieszczony przed lub po bieżącym wierszu w tej samej tabeli według danego przesunięcia. Jeśli nie można wywołać bieżącego wiersza do jednego wiersza, może zostać zwróconych wiele wierszy.

Składnia

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

Parametry

Termin Definicja
delta Liczba wierszy przed (wartość ujemna) lub po (wartość dodatnia) bieżącego wiersza, z którego mają być uzyskiwane dane. Może to być dowolne wyrażenie DAX zwracające wartość skalarną.
relation (Opcjonalnie) Wyrażenie tabeli, z którego zwracany jest wiersz wyjściowy. Jeśli jest używany w obliczeniach wizualnych, ten parametr akceptuje oś w kształcie wizualizacji.
Jeśli określono, wszystkie kolumny w partitionBy muszą pochodzić z niej lub powiązanej tabeli.
Jeśli pominięto:
- orderBy należy jawnie określić.
— wszystkie wyrażenia orderBy i partitionBy muszą być w pełni kwalifikowane nazwy kolumn i pochodzą z jednej tabeli.
— domyślnie ALLSELECTED() wszystkich kolumn w orderBy i partitionBy.
orderBy (Opcjonalnie) Klauzula ORDERBY() zawierająca wyrażenia definiujące sposób sortowania poszczególnych partycji.
Jeśli pominięto:
- relation należy jawnie określić.
— domyślnie kolejność według każdej kolumny w relation, która nie jest jeszcze określona w partitionBy.
blanks (Opcjonalnie) Wyliczenie, które definiuje sposób obsługi pustych wartości podczas sortowania relation lub axis.
Obsługiwane wartości to:
  • DEFAULT (wartość domyślna), gdzie zachowanie wartości liczbowych jest wartościami pustymi, są uporządkowane między wartościami zerowym i ujemnym. Zachowanie ciągów jest puste wartości są uporządkowane przed wszystkimi ciągami, w tym pustymi ciągami.
  • FIRSTwartości puste są zawsze uporządkowane na początku, niezależnie od kolejności sortowania rosnącego lub malejącego.
  • LASTwartości puste są zawsze uporządkowane na końcu, niezależnie od kolejności sortowania rosnącego lub malejącego.

Należy pamiętać, że gdy blanks parametr i wartości puste w funkcji () dla poszczególnych wyrażeńORDERBY są określone, blanks wyrażenie orderBy ma priorytet dla odpowiedniego wyrażenia orderBy, a wyrażenia orderBy bez blanks określenia będą honorować blanks parametr w funkcji nadrzędnej.
partitionBy (Opcjonalnie) A PARTITIONBY() klauzula zawierająca kolumny definiujące sposób relation partycjonowania. Jeśli pominięto, relation jest traktowana jako pojedyncza partycja.
matchBy (Opcjonalnie) A MATCHBY() klauzula zawierająca kolumny definiujące sposób dopasowania danych i identyfikowania bieżącego wiersza.
reset (Opcjonalnie) Dostępne tylko w obliczeniach wizualnych. Wskazuje, czy obliczenia są resetowane i na jakim poziomie hierarchii kolumn kształtu wizualizacji. Akceptowane wartości to: odwołanie do pola do kolumny w bieżącym kształcie wizualizacji, NONE (ustawienie domyślne), LOWESTPARENT, HIGHESTPARENTlub liczba całkowita. Zachowanie zależy od znaku całkowitego:
— jeśli nie zostanie pominięte, obliczenie nie zostanie zresetowane. Odpowiednik NONE.
— jeśli jest dodatnia, liczba całkowita identyfikuje kolumnę rozpoczynającą się od najwyższego, niezależnego od ziarna. HIGHESTPARENT jest równoważne 1.
— jeśli jest ujemna, liczba całkowita identyfikuje kolumnę rozpoczynającą się od najniższego, względem bieżącego ziarna. LOWESTPARENT jest równoważne -1.

Wartość zwracana

Co najmniej jeden wiersz z relation.

Uwagi

Z wyjątkiem kolumn dodanych przez funkcje tabeli DAX każda kolumna w relation, gdy matchBy nie jest obecna, lub każda kolumna w matchBy i partitionBy, gdy matchBy jest obecna, musi mieć odpowiednią wartość zewnętrzną, aby ułatwić zdefiniowanie bieżącego wiersza, na którym ma działać, z następującym zachowaniem:

  • Jeśli jest dokładnie jedna odpowiadająca kolumnie zewnętrznej, zostanie użyta jej wartość.
  • Jeśli nie ma odpowiedniej kolumny zewnętrznej, wówczas:
    • OFFSET najpierw określi wszystkie kolumny, które nie mają odpowiedniej kolumny zewnętrznej.
    • Dla każdej kombinacji istniejących wartości dla tych kolumn w kontekście nadrzędnym OFFSETjest obliczana OFFSET i zwracany jest wiersz.
    • OFFSETkońcowe dane wyjściowe to połączenie tych wierszy.
  • Jeśli istnieje więcej niż jedna odpowiadająca kolumna zewnętrzna, zwracany jest błąd.

Jeśli wszystkie kolumny relationzostały dodane przez funkcje tabeli DAX, zwracany jest błąd.

Jeśli matchBy jest obecny, OFFSET spróbuje użyć kolumn matchBy i partitionBy w celu zidentyfikowania wiersza. Jeśli matchBy nie istnieje, a kolumny określone w orderBy i partitionBy nie mogą jednoznacznie zidentyfikować każdego wiersza w relation, wówczas:

  • OFFSET spróbuje znaleźć najmniejszą liczbę dodatkowych kolumn wymaganych do unikatowego zidentyfikowania każdego wiersza.
  • Jeśli takie kolumny zostaną znalezione, OFFSET automatycznie dołączy te nowe kolumny do orderBy, a każda partycja zostanie posortowana przy użyciu tego nowego zestawu kolumn OrderBy.
  • Jeśli nie można odnaleźć takich kolumn, zostanie zwrócony błąd.

Pusta tabela jest zwracana, jeśli:

  • Odpowiadająca zewnętrzna wartość kolumny OrderBy lub PartitionBy nie istnieje w relation.
  • Wartość delta powoduje przejście do wiersza, który nie istnieje w partycji.

Jeśli OFFSET jest używana w kolumnie obliczeniowej zdefiniowanej w tej samej tabeli co relation, a orderBy zostanie pominięta, zwracany jest błąd.

reset można używać tylko w obliczeniach wizualnych i nie można ich używać w połączeniu z orderBy lub partitionBy. Jeśli reset jest obecny, axis można określić, ale nie można relation.

Jeśli wartość reset jest bezwzględna (tj. dodatnia liczba całkowita HIGHESTPARENT lub odwołanie do pola), a obliczenie jest obliczane na poziomie docelowym lub wyższym w hierarchii, obliczenia są resetowane dla każdego pojedynczego elementu. Oznacza to, że funkcja jest obliczana w ramach partycji zawierającej tylko ten konkretny element.

Przykład 1 — kolumna obliczeniowa

Następujące zapytanie DAX:

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]
    )
)

Zwraca tabelę podsumowującą łączną sprzedaż dla każdej kategorii produktów i roku kalendarzowego, a także łączną sprzedaż dla tej kategorii w poprzednim roku.

Przykład 2 — miara

Następujące zapytanie DAX:

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]
)

Używa OFFSET() w mierze w celu zwrócenia tabeli, która podsumowuje łączną sprzedaż dla każdego roku kalendarzowego i łączną sprzedaż w poprzednim roku.

Przykład 3 — kolumna obliczeniowa

Następujące zapytanie DAX:

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

Zwraca tabelę FactInternetSales z dodaniem kolumny, która wskazuje, że dla każdej sprzedaży kwota poprzedniej sprzedaży, tego samego produktu, w kolejności malejącej kwoty sprzedaży, z bieżącą sprzedażą identyfikowaną przez kolumnę SalesOrderNumber i SalesOrderLineNumber. Bez MATCHBYzapytanie zwróci błąd, ponieważ w tabeli FactInternetSales nie ma żadnych kluczowych kolumn.

Przykład 4 — obliczanie wizualizacji

Następujące obliczenie wizualizacji DAX zapytanie:

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

Zwraca różnicę w łącznej sprzedaży między każdym miesiącem a poprzednim w ciągu tego samego roku.

Poniższy zrzut ekranu przedstawia macierz wizualizacji i wyrażenie obliczania wizualizacji:

obliczania wizualizacji

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER