Как проверить, какой из двух запросов DAX имеет лучшую производительность, используя Daxstudio . В примере запросы возвращают точно такие же результаты. Однако статистика различается, показывая неясные намеки. Какую полезную информацию мы можем получить asp из сравнения двух запросов?
Сводная статистика статистики запросов:
+-------------------------+------------+---------+---------+
| | | Query 1 | Query 2 |
+-------------------------+------------+---------+---------+
| Server timings | Total | 7 | 5 |
| | SE CPU | 0 | 0 |
| | FE | 6 | 4 |
| | SE | 1 | 1 |
| | SE Queries | 3 | 2 |
| | SE Cashe | 0 | 0 |
+-------------------------+------------+---------+---------+
| Query plan, no of lines | physical | 7 | 28 |
| | logical | 13 | 9 |
+-------------------------+------------+---------+---------+
- Второй запрос быстрее, но имеет густой и длинный план. 2 сканирования.
- Первый запрос имеет более длительную синхронизацию с сервером, но более чистый и короткий план запроса. 3 скана.
Таким образом, время сервера поддерживает второй запрос, но его сложный план запроса вызывает обеспокоенность. Зная статистику и планы запросов, что мы можем ожидать, если в SearchTable будет миллион строк? Разве нам не нравятся более простые планы запросов, поскольку оптимизация DAX в будущем может измениться в их пользу?
Образцы данных. У нас есть две таблицы SearchTable и ThisTable:
SearchTable =
DATATABLE (
"Category", STRING,
"Product", STRING,
"Amount", INTEGER,
{
{ BLANK () , "apple" , 1 },
{ "Fruits" , "apple" , 1 }, -- watch out for multiple apples!
{ "Yummy Fruits", "apple" , 2 },
{ "Fruits" , "banana" , 4 },
{ "Fruits" , "wolfberry" , 5 },
{ "Fruits" , "cherry" , 3 },
{ "Vegetables" , "carrot" , 3 },
{ "Vegetables" , "potato" , 1 },
{ "Vegetables" , "onion" , 7 },
{ "Fruits" , "cherry" , 3 }
}
)
---
ThisTable =
DATATABLE (
"Product", STRING,
{
{ "apple" },
{ "banana" },
{ "blackberry" },
{ "carrot" },
{ "cherry" },
{ "onion " },
{ "potato" },
{ "watermelon" },
{ "wolfberry" }
}
)
Запрос № 1.
EVALUATE
ADDCOLUMNS (
VALUES ( ThisTable[Product] ),
"FilterLookup",
VAR LookupKey = ThisTable[Product]
RETURN
CALCULATE ( MAX ( SearchTable[Category] ), SearchTable[Product] = LookupKey )
)
Запрос имеет следующую статистику:
И план запроса:
Запрос № 2.
EVALUATE
ADDCOLUMNS (
VALUES ( ThisTable[Product] ),
"FilterLookup", MAXX (
FILTER ( SearchTable, SearchTable[Product] = ThisTable[Product] ),
SearchTable[Category]
)
)
Статистика:
План запроса:
Вопрос относится к:
DAX-поиск первого непустого значения в несвязанной таблице
Вы можете загрузить файл pbix с примерами данных:
DAX-просмотр top 1 value.pbix