【发布时间】:2020-05-09 23:59:44
【问题描述】:
如何使用Daxstudio 检查两个 DAX 查询中哪一个的性能更好。在示例中,查询返回完全相同的结果。然而,统计数据不同,显示出不明确的提示。从两个查询的比较中我们可以掌握哪些有用的信息?
比较查询统计摘要:
+-------------------------+------------+---------+---------+
| | | 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 lookup first non blank value in unrelated table
您可以下载带有示例数据的 pbix 文件:
【问题讨论】:
标签: performance dax daxstudio