Κοινή χρήση μέσω


OFFSET

Ισχύει για:Υπολογιζόμενη στήληΥπολογιζόμενος πίνακαςΜέτρηση υπολογισμού απεικόνισης

Επιστρέφει μια μοναδική γραμμή που τοποθετείται είτε πριν είτε μετά την τρέχουσα γραμμή μέσα στον ίδιο πίνακα, από μια δεδομένη μετατόπιση. Εάν η τρέχουσα γραμμή δεν μπορεί να συνάγεται σε μία μόνο γραμμή, ενδέχεται να επιστραφούν πολλές γραμμές.

Σύνταξη

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

Παραμέτρους

Όρος Ορισμός
delta Ο αριθμός των γραμμών πριν από την (αρνητική τιμή) ή μετά (θετική τιμή) της τρέχουσας γραμμής από την οποία θα ληφθούν τα δεδομένα. Μπορεί να είναι οποιαδήποτε παράσταση DAX που επιστρέφει μια ανυσματική τιμή.
relation (Προαιρετικό) Μια παράσταση πίνακα από την οποία επιστρέφεται η γραμμή εξόδου.
Εάν καθοριστεί, όλες οι στήλες στο partitionBy πρέπει να προέρχονται από αυτή ή από έναν σχετικό πίνακα.
Εάν παραλειφθεί:
- orderBy πρέπει να καθοριστεί ρητά.
- Όλες οι orderBy και οι partitionBy παραστάσεις πρέπει να είναι πλήρως προσδιορισμένα ονόματα στηλών και να προέρχονται από έναν μόνο πίνακα.
- Η προεπιλεγμένη τιμή ALLSELECTED() όλων των στηλών στα orderBy και partitionBy.
axis (Προαιρετικό) Ένας άξονας στο σχήμα απεικόνισης. Διατίθεται μόνο σε υπολογισμούς απεικονίσεων και αντικαθιστά relation.
orderBy (Προαιρετικό) Ένας όρος ORDERBY() που περιέχει τις παραστάσεις που ορίζουν τον τρόπο ταξινόμησης κάθε διαμερίσματος.
Εάν παραλειφθεί:
- relation πρέπει να καθοριστεί ρητά.
- Ορίζει από προεπιλογή την ταξινόμηση βάσει κάθε στήλης σε relation που δεν έχει ήδη καθοριστεί στο partitionBy.
blanks (Προαιρετικό) Μια απαρίθμηση που ορίζει τον τρόπο χειρισμού κενών τιμών κατά την ταξινόμηση του relation ή του axis.
Οι υποστηριζόμενες τιμές είναι:
  • DEFAULT (η προεπιλεγμένη τιμή), όπου η συμπεριφορά για τις αριθμητικές τιμές είναι κενές τιμές, ταξινομούνται μεταξύ μηδέν και αρνητικών τιμών. Η συμπεριφορά για τις συμβολοσειρές είναι ότι οι κενές τιμές ταξινομούνται πριν από όλες τις συμβολοσειρές, συμπεριλαμβανομένων των κενών συμβολοσειρών.
  • FIRST, τα κενά ταξινομούνται πάντα στην αρχή, ανεξάρτητα από την αύξουσα ή φθίνουσα σειρά ταξινόμησης.
  • LAST, τα κενά ταξινομούνται πάντα στο τέλος, ανεξάρτητα από την αύξουσα ή φθίνουσα σειρά ταξινόμησης.

Σημείωση, όταν η παράμετρος blanks και τα κενά στην ORDERBY() συνάρτηση σε μεμονωμένες παραστάσεις καθορίζονται και τα δύο, blanks στη μεμονωμένη παράσταση orderBy έχει προτεραιότητα για τη σχετική παράσταση orderBy και οι παραστάσεις orderBy χωρίς να έχουν καθοριστεί blanks θα τηρηθεί η παράμετρος blanks στη γονική συνάρτηση.
partitionBy (Προαιρετικό) Ένας όρος () που περιέχει τις στήλες που καθορίζουν τον τρόπο διαμερισμού . Εάν παραλειφθεί, relation αντιμετωπίζεται ως ένα ενιαίο διαμέρισμα.
matchBy (Προαιρετικό) Ένας MATCHBY() όρος που περιέχει τις στήλες που ορίζουν τον τρόπο αντιστοίχισης δεδομένων και αναγνώρισης της τρέχουσας γραμμής.
reset (Προαιρετικό) Διατίθεται μόνο σε υπολογισμούς απεικονίσεων. Υποδεικνύει εάν γίνεται επαναφορά του υπολογισμού και σε ποιο επίπεδο της ιεραρχίας στηλών του σχήματος απεικόνισης. Οι αποδεκτές τιμές είναι: μια αναφορά πεδίου σε μια στήλη στο τρέχον σχήμα απεικόνισης, NONE (προεπιλογή), LOWESTPARENT, HIGHESTPARENTή ακέραιος. Η συμπεριφορά εξαρτάται από το σύμβολο ακέραιου:
- Εάν δεν είναι μηδέν ή παραλειφθεί, ο υπολογισμός δεν επαναφέρεται. Ισοδύναμο με NONE.
- Εάν είναι θετικό, ο ακέραιος αναγνωρίζει τη στήλη ξεκινώντας από την υψηλότερη, ανεξάρτητα από το επίπεδο λεπτομέρειας. HIGHESTPARENT ισοδυναμεί με 1.
- Εάν είναι αρνητικό, ο ακέραιος αναγνωρίζει τη στήλη ξεκινώντας από τη χαμηλότερη, σε σχέση με το τρέχον επίπεδο. LOWESTPARENT ισοδυναμεί με -1.

Τιμή επιστροφής

Μία ή περισσότερες γραμμές από relation.

Παρατηρήσεις

Εκτός από τις στήλες που προστίθενται από DAX συναρτήσεις πίνακα, κάθε στήλη σε relation, όταν δεν υπάρχει matchBy ή κάθε στήλη σε matchBy και partitionBy, όταν υπάρχει matchBy, πρέπει να έχει μια αντίστοιχη εξωτερική τιμή για να σας βοηθήσει να ορίσετε την τρέχουσα γραμμή στην οποία θα λειτουργήσει, με την ακόλουθη συμπεριφορά:

  • Εάν υπάρχει ακριβώς μία αντίστοιχη εξωτερική στήλη, χρησιμοποιείται η τιμή της.
  • Εάν δεν υπάρχει αντίστοιχη εξωτερική στήλη, τότε:
    • OFFSET θα προσδιορίσει πρώτα όλες τις στήλες που δεν έχουν αντίστοιχη εξωτερική στήλη.
    • Για κάθε συνδυασμό υπαρχουσών τιμών για αυτές τις στήλες στο γονικό περιβάλλον OFFSET, αξιολογείται OFFSET και επιστρέφεται μια γραμμή.
    • Το τελικό αποτέλεσμα της OFFSETείναι μια ένωση αυτών των γραμμών.
  • Εάν υπάρχουν περισσότερες από μία αντίστοιχες εξωτερική στήλη, επιστρέφεται σφάλμα.

Εάν όλες οι στήλες του relationέχουν προστεθεί από DAX συναρτήσεις πίνακα, επιστρέφεται σφάλμα.

Εάν υπάρχει matchBy, OFFSET θα προσπαθήσει να χρησιμοποιήσει matchBy και partitionBy στήλες για να αναγνωρίσει τη γραμμή. Εάν δεν υπάρχει matchBy και οι στήλες που καθορίζονται εντός του orderBy και του partitionBy δεν μπορούν να αναγνωρίσουν μοναδικά κάθε γραμμή στο relation, τότε:

  • OFFSET θα προσπαθήσει να βρει τον ελάχιστο αριθμό πρόσθετων στηλών που απαιτούνται για τη μοναδική αναγνώριση κάθε γραμμής.
  • Εάν μπορούν να βρεθούν τέτοιες στήλες, OFFSET θα προσαρτήσει αυτόματα αυτές τις νέες στήλες στην orderByκαι κάθε διαμέρισμα ταξινομείται χρησιμοποιώντας αυτό το νέο σύνολο στηλών OrderBy.
  • Εάν δεν είναι δυνατή η εμφάνιση τέτοιων στηλών, επιστρέφεται σφάλμα.

Επιστρέφεται ένας κενός πίνακας εάν:

  • Η αντίστοιχη εξωτερική τιμή μιας στήλης OrderBy ή PartitionBy δεν υπάρχει εντός relation.
  • Η delta τιμή προκαλεί μετατόπιση σε μια γραμμή που δεν υπάρχει εντός του διαμερίσματος.

Εάν OFFSET χρησιμοποιείται μέσα σε μια υπολογιζόμενη στήλη που έχει οριστεί στον ίδιο πίνακα με relationκαι παραλείπεται orderBy, επιστρέφεται σφάλμα.

reset μπορούν να χρησιμοποιηθούν μόνο σε υπολογισμούς απεικονίσεων και δεν μπορούν να χρησιμοποιηθούν σε συνδυασμό με orderBy ή partitionBy. Εάν υπάρχει reset, μπορεί να καθοριστεί axis, αλλά δεν relation.

Παράδειγμα 1 - υπολογιζόμενη στήλη

Το παρακάτω 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]
    )
)

Επιστρέφει έναν πίνακα που συνοψίζει τις συνολικές πωλήσεις για κάθε κατηγορία προϊόντος και ημερολογιακό έτος, καθώς και τις συνολικές πωλήσεις για αυτήν την κατηγορία το προηγούμενο έτος.

Παράδειγμα 2 - μέτρηση

Το παρακάτω 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]
)

Χρησιμοποιεί OFFSET() σε μια μέτρηση για να επιστρέψει έναν πίνακα που συνοψίζει τις συνολικές πωλήσεις για κάθε ημερολογιακό έτος και τις συνολικές πωλήσεις για το προηγούμενο έτος.

Παράδειγμα 3 - υπολογιζόμενη στήλη

Το παρακάτω 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]
        )
)

Επιστρέφει τον πίνακα FactInternetSales με την προσθήκη μιας στήλης, η οποία υποδεικνύει, για κάθε πώληση, το ποσό της προηγούμενης πώλησής του, του ίδιου προϊόντος, σε φθίνουσα σειρά του ποσού πωλήσεων, με την τρέχουσα πώληση να αναγνωρίζεται από τις ΠωλήσειςOrderNumber και SalesOrderLineNumber. Χωρίς MATCHBY, το ερώτημα θα επιστρέψει ένα σφάλμα, καθώς δεν υπάρχουν στήλες κλειδιών στον πίνακα FactInternetSales.

Παράδειγμα 4 - υπολογισμός απεικόνισης

Ο παρακάτω υπολογισμός απεικόνισης DAX ερώτημα:

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

Επιστρέφει τη διαφορά στις συνολικές πωλήσεις μεταξύ κάθε μήνα και του προηγούμενου εντός του ίδιου έτους.

Το παρακάτω στιγμιότυπο οθόνης εμφανίζει τη μήτρα απεικόνισης και την παράσταση υπολογισμού απεικόνισης:

υπολογισμού απεικόνισης

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER