简化DAX语句:如何复用通用条件拆分Teams通话质量数据查询?
解决方案:提取通用筛选条件实现多时间段EVALUATE查询
可以通过DEFINE块定义变量提取通用筛选逻辑,让每个EVALUATE仅专注于不同的CQD[End Time]时间段,适配DAX Studio的单DEFINE多EVALUATE规则,同时规避10000行的结果限制。
实现思路
- 将除
End Time外的所有固定筛选条件打包到变量中,避免重复编写 - 每个EVALUATE语句仅指定目标时间段,结合通用变量过滤数据
- 拆分时间段时需保证单查询结果行数不超过10000
修改后的DAX代码示例
DEFINE VAR CommonFilters = FILTER( CQD, CQD[Stream Direction] = "First-to-Second" && CQD[CDR Response Reason] = "OK" && CQD[First UserType] = "Server" && CQD[Second Inside Corp] = "Inside" && CQD[Second Network Connection Detail] = "Wired" && CQD[Test Call Type] = "NonTest" && CQD[Session Type] = "Conf" && CQD[Is Server Pair] IN {"Client : Server", " : Client"} && CQD[Second UserType] IN {"User", "Anonymous"} && NOT (CQD[Packet Utilization] IN {"(Blank)", "062: [0 - 0]", "064: [1 - 2)"}) ) -- 第一个时间段:00:00-06:00 EVALUATE CALCULATETABLE( SUMMARIZECOLUMNS( CQD[Second Network Name], CQD[Second Subnet], CQD[Date], CQD[Day Of Week], CQD[Hour], CQD[Total Call Count], CQD[Avg Network Jitter Max], CQD[Audio Poor Percentage], CQD[Video Poor Percentage], CQD[Avg Round Trip Max] ), CommonFilters, CQD[End Time] >= dt"2024-07-17T00:00:00", CQD[End Time] < dt"2024-07-17T06:00:00" ) -- 第二个时间段:06:00-12:00 EVALUATE CALCULATETABLE( SUMMARIZECOLUMNS( CQD[Second Network Name], CQD[Second Subnet], CQD[Date], CQD[Day Of Week], CQD[Hour], CQD[Total Call Count], CQD[Avg Network Jitter Max], CQD[Audio Poor Percentage], CQD[Video Poor Percentage], CQD[Avg Round Trip Max] ), CommonFilters, CQD[End Time] >= dt"2024-07-17T06:00:00", CQD[End Time] < dt"2024-07-17T12:00:00" ) -- 第三个时间段:12:00-18:00 EVALUATE CALCULATETABLE( SUMMARIZECOLUMNS( CQD[Second Network Name], CQD[Second Subnet], CQD[Date], CQD[Day Of Week], CQD[Hour], CQD[Total Call Count], CQD[Avg Network Jitter Max], CQD[Audio Poor Percentage], CQD[Video Poor Percentage], CQD[Avg Round Trip Max] ), CommonFilters, CQD[End Time] >= dt"2024-07-17T12:00:00", CQD[End Time] < dt"2024-07-17T18:00:00" )
注意事项
CommonFilters中的筛选逻辑均为DirectQuery支持的基础条件,不会触发模式不兼容问题- 需根据实际数据量调整时间段区间长度,确保单EVALUATE结果不超限制行数
- 通用筛选条件需修改时,仅需在DEFINE块中调整一次即可同步到所有查询
内容的提问来源于stack exchange,提问作者Dr.YSG
相关产品推荐
相关产品推荐

