Forum Discussion

dimitrishuk's avatar
dimitrishuk
Icon for Helper I rankHelper I
8 years ago
Solved

How to improve a slow DAX query using ALL()

Hi,   I'm in the process of building a tabular data model for our accounts receivables that is up to date up to the last day. The table is around 1m rows and around 50MB.    A single DAX query wi...
  • dimitrishuk's avatar
    8 years ago

    Hey guys, I managed to solve my slow query time.

     

    What I did was define a MaxDate variable, with MaxDate being the date from my Date Table.

     

    Then I ran the date filter once on a calculated table using SUMMARIZECOLUMNS. I removed the relationship between the date table and accounts receivable ledger. See below:

     

    = VAR

         MaxDate= MAX('Date Dimension'[Date])

    RETURN

     

    SUMMARIZECOLUMNS('Accounts Receivable Ledger'[Company],'Accounts Receivable Ledger'[Business Unit],'Accounts Receivable Ledger'[Address Number],'Accounts Receivable Ledger'[Document Unique],'Accounts Receivable Ledger'[Invoice Due Date],'Accounts Receivable Ledger'[Draft- Due Date],FILTER('Accounts Receivable Ledger','Accounts Receivable Ledger'[Transaction Date]<=MaxDate),"Open Amount",SUM('Accounts Receivable Ledger'[Amount - Gross]))

     

    By filtering on SUMMARIZECOLUMNS and moving my measures to the new table I saved repeated IN comparisons in each measure and also evened out the spread between Formula and Storage Engines. 

     

    By grouping I also reduced the cardinality which helped alot.

     

    The big problem with SUMMARIZECOLUMNS is it doesnt work well with calculated columns so I also had to change my table views at the SQL level. Still, performance is much better now.