DAX连接表系列(四) ⅤAR変量(2)

(一) VAR案例

        继续第一部分 (依据官方资料简体笔记)

     使用变量优化 IF 条件

       一个非常常见的使用变量来优化 DAX 中条件表达式 的优化模式。
       在前面的文章中,已经显示了使用变量在 DAX 表达式中替换同一度量值的多个实例。其中还有一个非常常见的用例是 IF 函数模式。本节重点关注的是公式引擎而不是存储引擎的成本花费。

        请考虑以下度量:
         Margin := IF ( [Sales Amount] > 0
         && [Total Cost] > 0,[Sales Amount] - [Total Cost] )

       其基本思路是:如果两个度量指标都大于零(满足两个IF条件),则执行[Sales Amount] - [Total Cost]求差值计算。本例中,DAX引擎会生成一个查询计划,对每个度量值进行两次评估。这在为以下类似查询生成的存储引擎请求中可见。

        EVALUATE
        SUMMARIZECOLUMNS ( 'Date'[Year],
       "Margin", [Margin] ) 

       但是,值得考虑的是,物理查询计划有216行,这是在跟踪相同度量值变化时要考虑的一个参考。

       如果不涉及前一篇文章已经解释的细节,值得进一步提示的是,对同一度量值的多次引用都需要进行单独的计算,即便是结果相同。在相同的当前筛选中,DAX 不太擅长保存在同一筛选器环境中计算的公共子集(子表达式)的值。这一点在Margin(边际)计算的以下变化中显而易见。IF函数的两个分支相同,但查询计划为存储引擎和公式引擎添加了其他计算:

          Margin 2 := IF (   [Sales Amount] > 0 && [Total Cost] > 0,
          [Sales Amount] - [Total Cost],  [Sales Amount] - [Total Cost]) 

       本例中,存在一个额外的存储引擎查询,物理查询计划中的行数现在为 342,这在以前的工作负载中添加了超过50% 的行。

        此度量值的优化版本,是考虑将两个度量分别存储为两个变量,以便在 IF 函数中将两个变量引用在一起,从而减少公式引擎请求计算的次数(仅计算一次)。

        Margin Optimized :=
        VAR SalesAmount = [Sales Amount]
        VAR TotalCost = [Total Cost]
        RETURN  
        IF ( SalesAmount > 0 && TotalCost > 0,  SalesAmount – TotalCost)

       这在存储引擎请求中是可见的:

       如果与第一个分支相同的 IF 函数的版本比较,该版本将生成相同的存储引擎查询。但物理查询计划将行数从216减少到126。

       这是一个重要的结果。因为 DAX 缓存只在存储引擎级别中运行,因此,当在公式引擎中请求对多个具有高成本的度量值的引用时,此优化技术尤其有用。

     结论

       在当前同一筛选器对同一度量值的多个引用,可以生成相同的 DAX 表达式的多次执行,从而产生相同的结果。在变量中保存度量结果会生成更好的查询计划,从而提高了 DAX 代码的性能。但同时还是前文所建议的注意:避免度量与原列表“存储”的重复,并根据数据模型大小等来判断你关注的是公式引擎还是存储引擎的成本花费。

       未完待续

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容