PRZESUNIĘCIE

Dotyczy: Obliczanie kolumny obliczeniowejtabeliobliczeniowej Miarawizualizacji

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 języka DAX zwracające wartość skalarną.
Relacji (Opcjonalnie) Wyrażenie tabeli, z którego zwracany jest wiersz wyjściowy.
Jeśli zostanie określony, wszystkie kolumny w <partycjiBy> muszą pochodzić z niej lub powiązanej tabeli.
Jeśli pominięto:
- <orderBy> musi być jawnie określony.
— Wszystkie <wyrażenia orderBy> i <partitionBy> muszą być w pełni kwalifikowane nazwy kolumn i pochodzą z jednej tabeli.
- Domyślnie to ALLSELECTED() wszystkich kolumn w <kolejnościBy> i <partitionBy>.
(Opcjonalnie) Oś w kształcie wizualizacji. Dostępne tylko w obliczeniach wizualnych i zamienia relację<>.
Orderby (Opcjonalnie) Klauzula ORDERBY() zawierająca wyrażenia definiujące sposób sortowania poszczególnych partycji.
Jeśli pominięto:
- <należy jawnie określić relację> .
— Domyślnie kolejność według każdej kolumny w <relacji> , która nie jest jeszcze określona w <partycjiBy>.
Puste (Opcjonalnie) Wyliczenie, które definiuje sposób obsługi pustych wartości podczas sortowania.
Ten parametr jest zarezerwowany do użytku w przyszłości.
Obecnie jedyną obsługiwaną wartością jest DEFAULT, 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.
partitionBy (Opcjonalnie) Klauzula PARTITIONBY() zawierająca kolumny definiujące sposób <partycjonowania relacji> .
W przypadku pominięcia <relacja> jest traktowana jako pojedyncza partycja.
matchBy (Opcjonalnie) Klauzula MATCHBY() zawierająca kolumny definiujące sposób dopasowywania danych i identyfikowania bieżącego wiersza.
Resetowanie (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: NONE, LOWESTPARENT, HIGHESTPARENT lub integer. Zachowanie zależy od znaku całkowitego:
— jeśli nie zostanie pominięte, obliczenie nie zostanie zresetowane. Odpowiednik NONE.
- Jeśli dodatni, liczba całkowita identyfikuje kolumnę rozpoczynającą się od najwyższego, niezależnego od ziarna. ELEMENT HIGHESTPARENT jest odpowiednikiem wartości 1.
- Jeśli ujemna, liczba całkowita identyfikuje kolumnę rozpoczynającą się od najniższej, względem bieżącego ziarna. WARTOŚĆ LOWESTPARENT jest równoważna -1.

Wartość zwracana

Co najmniej jeden wiersz z <relacji>.

Uwagi

Z wyjątkiem kolumn dodanych przez funkcje tabeli języka DAX, każda kolumna w <relacji, gdy <funkcja matchBy nie istnieje, lub każda kolumna w <kolumnach matchBy>> i <partitionBy>, gdy <element matchBy> jest obecny, musi mieć odpowiednią wartość zewnętrzną, aby ułatwić zdefiniowanie bieżącego wiersza, na którym ma być wykonywane działanie, 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:
    • PRZESUNIĘCIE 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 funkcji OFFSET obliczana jest funkcja OFFSET i zwracany jest wiersz.
    • Końcowe dane wyjściowe funkcji OFFSET są połączeniem tych wierszy.
  • Jeśli istnieje więcej niż jedna odpowiadająca kolumna zewnętrzna, zwracany jest błąd.

Jeśli wszystkie <kolumny relacji> zostały dodane przez funkcje tabeli języka DAX, zwracany jest błąd.

Jeśli <element matchBy> jest obecny, funkcja OFFSET spróbuje użyć <kolumn matchBy> i <partitionBy> w celu zidentyfikowania wiersza.
Jeśli <element matchBy> nie jest obecny, a kolumny określone w kolumnach <orderBy> i <partitionBy> nie mogą jednoznacznie identyfikować każdego wiersza w <relacji>, wówczas:

  • FUNKCJA OFFSET spróbuje znaleźć najmniejszą liczbę dodatkowych kolumn wymaganych do unikatowego identyfikowania każdego wiersza.
  • Jeśli takie kolumny można znaleźć, funkcja OFFSET automatycznie dołączy te nowe kolumny do <kolumn 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 ramach <relacji>.
  • Wartość różnicowa <> powoduje przejście do wiersza, który nie istnieje w partycji.

Jeśli funkcja OFFSET jest używana w kolumnie obliczeniowej zdefiniowanej w tej samej tabeli co <relacja, a <element orderBy> zostanie pominięty, zwracany> jest błąd.

<resetowanie> można używać tylko w obliczeniach wizualnych i nie można ich używać w połączeniu z kolumnami <orderBy> lub <partitionBy>. Jeśli <resetowanie> jest obecne, oś> można określić, <ale <nie można relować>.

Przykład 1 — kolumna obliczeniowa

Następujące zapytanie języka 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 języka 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 funkcji OFFSET() w mierze, aby zwrócić tabelę, 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 języka 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 funkcji MATCHBY zapytanie zwróci błąd, ponieważ w tabeli FactInternetSales nie ma żadnych kluczowych kolumn.

Przykład 4 — obliczanie wizualizacji

Następujące zapytanie języka DAX do obliczeń wizualnych:

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:

Obliczanie wizualizacji języka DAX

INDEKS
ORDERBY
PARTYCJONOWANIE WG
MATCHBY
OKNO
RANK
ROWNUMBER