PRZESUNIĘCIE
Dotyczy: Obliczanie kolumny obliczeniowej tabeli Obliczeniowej Obliczenie wizualizacji
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ą. |
relacja | (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>. |
oś | (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:
Powiązana zawartość
INDEKS
ORDERBY
PARTYCJONOWANIE WG
MATCHBY
OKNO
RANGA
ROWNUMBER