Forum Discussion

sbuster's avatar
sbuster
Helper I
3 years ago
Solved

Query optimization assistance

Hello,
I am trying to see if there is a way to optimize the measure in the sample attachment.  The model details an asset (automobile) with events (EventFacts) on a given date.  Each automobile may or may not be associated with a configuration (AssetEventMapping). 

What I would like is a distinct count of assets by day (see DateTable) only if the asset has a configuration associate in the AssetEventMapping table.

 

The model details below show example tables & records with the desired result.  As can be seen, assets 6 and 7 do not show up in daily count because they do not contain a record in the mapping table (filtered out via the "in distinct" portion of hte measure).

 

This measure works fine with small dataset, but my real dataset contains millions of records and this query is taking ~5 seconds.

 

Thanks

 

Tables:

 

Measure:

Count of Assets Reporting =
    calculate(
        DISTINCTCOUNT(EventFacts[AssetId]),
        FILTER(
            EventFacts,
            EventFacts[AssetID] in (distinct(AssetEventMapping[AssetID]))
        )
    )
  • Hi sbuster 

    Please try

    Count of Assets Reporting =
    COUNTROWS (
    DISTINCT (
    SELECTCOLUMNS (
    FILTER (
    EventFacts,
    EventFacts[AssetID] IN ( DISTINCT ( AssetEventMapping[AssetID] ) )
    ),
    "@AssetID", EventFacts[AssetId]
    )
    )
    )

2 Replies

  • tamerj1's avatar
    tamerj1
    Community Champion

    Hi sbuster 

    Please try

    Count of Assets Reporting =
    COUNTROWS (
    DISTINCT (
    SELECTCOLUMNS (
    FILTER (
    EventFacts,
    EventFacts[AssetID] IN ( DISTINCT ( AssetEventMapping[AssetID] ) )
    ),
    "@AssetID", EventFacts[AssetId]
    )
    )
    )

    • sbuster's avatar
      sbuster
      Helper I

      Thanks for you response, that improved performance significantly!