PowerBI DAX 引擎重大更新,你看懂了吗?

在2019年3月1日,在SqlBits大会上,微软宣布DAX引入一项重大更新:Calculation Group(暂且不做翻译)。这项更新将对PowerBI及SSAS均构成重要影响。为此,微软SSAS团队官方,SQLBI.com以及Chris Webb分别在各自博客记录这一内容。(后两者为SSAS领域国际顶级专家博客)

按照 SSAS 团队官方的话说,这是一项DAX本该具有却一致未有的能力。
按照 马克·啰嗦 大师的说法,之所以《DAX圣经 第二版》一直未出版,就是在等微软宣布这项DAX更新,这将写入最后一章。
按照 Chris Webb 的观点,这项更新是DAX历史上最重要的更新。

那么到底是什么功能(特性),另各位专家如此兴奋不已呢,本文将结合三方博客来介绍这一特性。

问题背景

简单直接地说,这个问题来自于 DAX度量值 的复用问题,举例如下:
现有度量值:订单销售额,订单利润,订单利润率等10个指标,它们的计算逻辑非常简单。不妨称之为基础度量值
当我们需要这些基础度量值与一些条件关联时,就会产生新的度量值,如和时间有关的组合,包括:
MTD,QTD,YTD,PY,MTD PY,QTD PY,YTD PY,PY FY,MTD YOY%,QTD YOY%,YTD YOY%等很容易就超过10个,因此,对于10个基础度量值,每个基础度量值都会与10个条件组合来派生度量值,迅速多达100个度量值。
而如果有50个度量值与20个条件来组合,就会达到1000个度量值,我们称之为无法复用导致的度量值爆炸式增长

在微软的产品中,其实有一条隐形的准则,那就是:如果用户在有规律地重复一项操作,那么有两个可能:要么有一个一键解决的方法,只是你不知道;要么就是微软缺乏了一项重要的特性。而99%的可能性是前者。 也就是用户不知道这个一键搞定的方法,例如:数据模型自动检测是对N次VLOOKUP的一键解决方案。

顺便提一句:VLOOKUP 在办公中将两个表合并为一个表,再透视基本是办公阶段Excel用法的铁律,而在BI中,直接建立数据模型的方法直接将办公的用法完全碾压,办公需要VLOOKUP,而BI却是一键解决的,因此花费大量精力去搞清楚VLOOKUP的十大技巧完全不必。

而在今天这里,却是后者,确实是微软缺失了一项在 DAX 中解决复用问题的特性。再重复一次:如何在DAX中复用复杂逻辑,不需要编写新的度量值,却可以从基本度量值派生新的度量值。

Calculation Group

为了解决类似上述的问题,现有的DAX是无法做到的(当然,现在可以了)。微软称这项特性叫:Calculation Group。这一个只含有一列的表,列中的每个值定义了可复用的计算逻辑,称这些值叫:calculation items

这里不做中文翻译,因为该特性尚在预览阶段,以未来微软提供的中文翻译名字为准。

calculation items 可以与度量值任意结合使用,达到改变度量值已有逻辑,更准确讲,是从已有逻辑派生新计算逻辑。

一个典型的案例就是将时间维度的逻辑进行复用,形如:

image

时间维度案例

表名称:Time Inteligence
列名称:Time Calculation
优先级:20

对其中 calculation item 的定义如下:

可以看到,这里用到了 SELECTEDMEASURE 函数,请仔细观察上述的效果示意图,可以看出:当 calculation item 与 度量值 在一起使用时,它可以动态的修改度量值。准确地猜测(微软尚未发布官方说明),calculation item 将动态地修改度量值进行计算的筛选上下文环境,而不去管这个度量值是什么。

从 CALCULATE 的技术细节来讲,应该是在 CALCULATE 计算的上下文堆栈中,压入新的筛选器,再计算 CALCULATE 的第一个参数。(详细原理已经在Excel120的《DAX基础》中给出,不再赘述。)这里很明显会涉及到三个问题:

如何选出当前的度量值:SELECTEDMEASURE。
当前度量值的名字:SELECTEDMEASURENAME。
是否是特定的度量值:ISSELECTEDMEASURE。

上述三个新增函数就可以来解决这个问题。

还有一个问题就是如果一个基础度量值与多个calculation item同时使用,到底哪个 calculation item 先算的问题,这个由上述的优先级定义给出。

相关信息

该DAX能力目前仅仅在预览阶段的 SQL Server 2019 CTP 2.3 中存在,而且尚无任何微软官方编辑器可以编辑操作该特性,也就是说,你无法在 DAX Studio,Power BI Desktop 或 SSAS 的 SSDT 中操作或设置该特性。

该特性已经在 引擎版本1470中存在。目前我们使用的 2019年2月 版的PowerBI 引擎版本为 1465。如下:

也就是说,本文所述的特性目前看不见,摸不着,但它的确存在于最新的DAX引擎中了。

这是一个使用起来很简单的特性,但SSAS团队需要在背后做很多事情,才能确保该特性与其他DAX特性完好共存,例如:Excel是可以作为客户端来使用的;RLS的兼容;动态格式字符串;AllSELECTED等函数;Detail Rows 表达式等。

动态格式字符串

你可以想象对于一个基础度量值(如:销售额)与N个 calculation item 的结合使用,会产生 去年销售额 以及 销售额增长率 这两个不同指标,而它们一个是数字格式,一个是百分比格式,但却只有一个基础度量值,这便构成了一个矛盾。

在 超级复杂中国式复杂报表 中,我们给出了现有 PowerBI DAX 下的解决方案,但那并非一种原生特性,而是需要利用多种技巧。很明显,动态格式字符串的发布将更好的解决这类问题,以及更容易地创建中国式复杂报表。

动态格式字符串 特性应该会在2019的迭代中发布,我们将持续关注。

提前尝鲜

如果特别希望提前体验 calculation group 特性,确实有一个方法,那就是使用:Tabular Editor。这是一个由社区开发的第三方工具。

给出尝试思路如下:

  1. 下载最新版 SQL Server 2019 CTP 2.3 并建立一个 SSAS Tabular 项目。正如上所述,目前微软尚未提供任何一种可以体验 calculation group 特性的编辑工具。
  2. 使用 Tabular Editor 来打开上述项目模型文件,通过 Tabular Editor 的能力来创建 calculation group。
  3. 部署发布项目。
  4. PowerBI Desktop live connenction 模式连接SSAS体验。

按照意大利大师的话来说,由于Calculation Group特性的到来,即将解锁一大波DAX的新能力,具体能做到哪些,现在不好说,微软还没有对外明确公布在 Power BI 中发布该特性的时间,大师们表示需要数月甚至整年时间来研究由此带来的新玩法。

而在微软的官方博客已经能预料到由于DAX引擎一波特性的发布,已经让SSAS团队处于很大负荷的状态。这些特性包括:管理聚合(多对多);PowerBI 增量刷新;开放 PowerBI 可作为 SSAS 连接,以及今天提及的Calculation Group。

总之,尽情享用吧。

参考资料

微软SSAS团队博客:
https://blogs.msdn.microsoft.com/analysisservices/2019/03/01/whats-new-for-sql-server-2019-analysis-services-ctp-2-3/

SQLBI博客:
https://www.sqlbi.com/blog/marco/2019/03/01/calculation-groups-in-dax-first-impressions/

Chris Webb博客:
https://blog.crossjoin.co.uk/2019/03/01/ssas-tabular-2019-calculation-groups-and-migration-from-ssas-multidimensional/

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

推荐阅读更多精彩内容