J'ai ces deux requêtes:
EVALUATE
FILTER (
SUMMARIZE (
'Sales',
Products[ProductName],
'Calendar'[CalendarYear],
"Total Sales Amount", SUM ( Sales[SalesAmount] ),
"Total Cost", SUM ( 'Sales'[TotalProductCost] )
),
Products[ProductName] = "AWC Logo Cap"
)
ORDER BY
Products[ProductName],
'Calendar'[CalendarYear] ASC
et ça:
EVALUATE
SUMMARIZE (
FILTER ( 'Sales', RELATED ( Products[ProductName] ) = "AWC Logo Cap" ),
Products[ProductName],
'Calendar'[CalendarYear],
"Total Sales Amount", SUM ( Sales[SalesAmount] ),
"Total Cost", SUM ( 'Sales'[TotalProductCost] )
)
ORDER BY
Products[ProductName],
'Calendar'[CalendarYear] ASC
Les deux renvoient les éléments suivants:
La seule différence entre les deux requêtes est le positionnement de la fonction FILTER - quelle est la meilleure pratique et pourquoi?
remarque
Donc, en regardant les deux articles sqlbi référencés par Alex, nous pouvons faire l'une des choses suivantes pour potentiellement rendre les choses plus performantes, mais je ne sais toujours pas si la fonction FILTER doit se produire à l'intérieur ou à l'extérieur de l'autre syntaxe:
EVALUATE
FILTER (
ADDCOLUMNS (
SUMMARIZE ( 'Sales', Products[ProductName], 'Calendar'[CalendarYear] ),
"Total Sales Amount", CALCULATE ( SUM ( Sales[SalesAmount] ) ),
"Total Cost", CALCULATE ( SUM ( 'Sales'[TotalProductCost] ) )
),
Products[ProductName] = "AWC Logo Cap"
)
ORDER BY
Products[ProductName],
'Calendar'[CalendarYear] ASC
Et en utilisant la fonction 'SUMMARIZECOLUMNS':
EVALUATE
FILTER (
SUMMARIZECOLUMNS (
Products[ProductName],
'Calendar'[CalendarYear],
"Total Sales Amount", SUM ( Sales[SalesAmount] ),
"Total Cost", SUM ( 'Sales'[TotalProductCost] )
),
Products[ProductName] = "AWC Logo Cap"
)
ORDER BY
Products[ProductName],
'Calendar'[CalendarYear] ASC
note 2
On dirait que SUMMARIZECOLUMNS a un paramètre FILTER intégré, donc je suppose que c'est la meilleure façon de se prémunir contre les problèmes de performances:
EVALUATE
SUMMARIZECOLUMNS (
Products[ProductName],
'Calendar'[CalendarYear],
FILTER ( 'Products', Products[ProductName] = "AWC Logo Cap" ),
"Total Sales Amount", SUM ( Sales[SalesAmount] ),
"Total Cost", SUM ( 'Sales'[TotalProductCost] )
)
ORDER BY
Products[ProductName],
'Calendar'[CalendarYear] ASC
Parmi les deux options que vous avez proposées, je soupçonne que cette dernière peut être plus efficace sur le plan informatique. Cependant, ni l'un ni l'autre n'est probablement "la meilleure pratique".
Selon Meilleures pratiques utilisant SUMMARIZE et ADDCOLUMNS sur sqlbi.com ,
vous devriez toujours privilégier la version ADDCOLUMNS. La règle générale est que vous ne devez jamais ajouter de colonnes étendues à l'aide de SUMMARIZE, sauf si cela est nécessaire en raison d'au moins l'une des conditions suivantes:
Vous souhaitez utiliser ROLLUP sur une ou plusieurs colonnes de regroupement afin d'obtenir des sous-totaux
Vous utilisez des expressions de table non triviales dans la colonne étendue, comme vous le verrez dans la section "Contexte de filtrage dans SUMMARIZE et ADDCOLUMNS" plus loin dans cet article
Veuillez également consulter leur article sur RESUMEIZOLUMNS , qui recommande la fonction la plus récente dans la plupart des cas d'utilisation.