浅谈 PQ 里面 Record,List 与高级编辑器的执行顺序
以下内容均为个人理解,如有错误请在评论区指出,谢谢!
Record:
第一种情况:也是最常见的情况
一般是从左往右也可能是从右到左执行,而并不会同时执行,如图先执行A,等待A出现结果再执行B然后等待B出现结果再显示整个Record,也就是执行整个Record需要10秒
第二种情况:在Record里面引用别的字段值
这种情况下PQ会判断字段值引用了其他字段值,如图,A引用B,B又引用C这样PQ会优先执行C,再将值传递给B然后B传递给A
第三种情况:Record嵌套
字段A又是一个Record,这种情况下PQ不会执行字段A里面的值,而只会计算字段B,加载整个Record只需要5秒
只有在深化或预览字段A的时候才会执行里面的Record,不管嵌套List,Record还是Table都只执行最外层的结果
List:
第一种情况:也是最常见的情况
一般是从上到下也可能是从下到上执行,而并不会同时执行
第二种情况:List嵌套
这种情况下PQ与Record执行顺序一样,只执行外层List的值,只有在预览或深化才开始执行嵌套的List,加载整个List只需要5秒
高级编辑器:
默认从上到下执行M函数
但是有一种情况是如下:
高级编辑器里面B步骤不需要与每一个步骤参与任何计算,而PQ直接呈现D步骤也并不需要5秒时间,这是因为PQ会优先加载最终步骤需要的步骤(A和C),在呈现结果之前并不会加载B步骤,而是在加载出来最终步骤之后再加载B步骤(在最终步骤呈现出来后等待5秒点击B步骤会直接出结果)
我并不知道PQ如何判断B步骤是否与其他步骤有参与计算?可能是因为判断B步骤没有引用也没有被引用???有趣
OVA:
利用这一特性可以使用DateTime.LocalNow
和DateTime.FixedLocalNow()
函数实现之前的文章利用 Diagnostics.Trace 以及跟踪日志查看刷新时间同样的效果!!
此步需要将B步骤的引用放在Record第一个字段里面,不然会先计算相差秒数:
同时验证Record是从左往右逐一加载
END
???
Ntt.Docomo
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)