Αποφύγετε τη χρήση του FILTER ως ορίσματος φίλτρου

Ως δημιουργός μοντέλων δεδομένων, είναι σύνηθες να γράφετε παραστάσεις DAX που πρέπει να αξιολογηθούν σε ένα τροποποιημένο περιβάλλον φίλτρου. Για παράδειγμα, μπορείτε να γράψετε έναν ορισμό μέτρησης για να υπολογίσετε τις πωλήσεις για "προϊόντα υψηλού περιθωρίου". Θα περιγράψουμε αυτόν τον υπολογισμό αργότερα σε αυτό το άρθρο.

Σημείωμα

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

Οι συναρτήσεις DAX CALCULATE και CALCULATETABLE είναι σημαντικές και χρήσιμες συναρτήσεις. Σας επιτρέπουν να γράφετε υπολογισμούς που καταργούν ή προσθέτουν φίλτρα, ή τροποποιούν διαδρομές σχέσεων. Πραγματοποιείται διαβιβάζοντας ορίσματα φίλτρου, τα οποία είναι δυαδικές παραστάσεις, παραστάσεις πίνακα ή ειδικές συναρτήσεις φίλτρου. Θα συζητήσουμε μόνο δυαδικές παραστάσεις και παραστάσεις πίνακα σε αυτό το άρθρο.

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

Red Sales =
CALCULATE(
    [Sales],
    FILTER('Product', 'Product'[Color] = "Red")
)

Η συνάρτηση CALCULATE αποδέχεται μια παράσταση πίνακα που επιστρέφεται από τη συνάρτηση DAX FILTER , η οποία αξιολογεί την παράσταση φίλτρου της για κάθε γραμμή του πίνακα Product . Επιτυγχάνει το σωστό αποτέλεσμα, το αποτέλεσμα πωλήσεων κόκκινων προϊόντων. Ωστόσο, μπορεί να επιτευχθεί πολύ πιο αποτελεσματικά χρησιμοποιώντας μια δυαδική παράσταση.

Ακολουθεί ένας βελτιωμένος ορισμός μέτρησης, ο οποίος χρησιμοποιεί μια δυαδική παράσταση αντί για την παράσταση πίνακα. Η συνάρτηση DAX KEEPFILTERS εξασφαλίζει ότι τυχόν υπάρχοντα φίλτρα που εφαρμόζονται στη στήλη Χρώμα διατηρούνται και δεν αντικαθίστανται.

Red Sales =
CALCULATE(
    [Sales],
    KEEPFILTERS('Product'[Color] = "Red")
)

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

Υπάρχουν, ωστόσο, περιορισμοί που ισχύουν για τις δυαδικές παραστάσεις όταν χρησιμοποιούνται ως ορίσματα φίλτρου. Τα εξής:

  • Δεν είναι δυνατή η αναφορά στηλών από πολλούς πίνακες
  • Αδυναμία αναφοράς μέτρησης
  • Δεν μπορεί να χρησιμοποιήσει ένθετες συναρτήσεις CALCULATE
  • Δεν μπορούν να χρησιμοποιήσουν συναρτήσεις που σαρώνουν ή επιστρέφουν έναν πίνακα

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

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

Sales for Profitable Months =
CALCULATE(
    [Sales],
    FILTER(
        VALUES('Date'[Month]),
        [Profit] > 0)
    )
)

Σε αυτό το παράδειγμα, πρέπει να χρησιμοποιηθεί η συνάρτηση FILTER. Αυτό συμβαίνει επειδή απαιτεί αξιολόγηση της μέτρησης Κέρδη για την εξάλειψη εκείνων των μηνών που δεν είχαν κέρδος. Δεν είναι δυνατή η χρήση μιας μέτρησης σε μια δυαδική παράσταση όταν χρησιμοποιείται ως όρισμα φίλτρου.

Προτάσεις

Για βέλτιστες επιδόσεις, συνιστάται να χρησιμοποιείτε δυαδικές παραστάσεις ως ορίσματα φίλτρου, όποτε αυτό είναι εφικτό.

Επομένως, η συνάρτηση FILTER θα πρέπει να χρησιμοποιείται μόνο όταν είναι απαραίτητο. Μπορείτε να το χρησιμοποιήσετε για να εκτελέσετε συγκρίσεις στηλών σύνθετου φίλτρου. Αυτές οι συγκρίσεις στηλών μπορεί να περιλαμβάνουν:

  • Μετρήσεις
  • Άλλες στήλες
  • Χρήση της συνάρτησης OR DAX ή του λογικού τελεστή OR (||)