DAX查询入门:DAX Studio介绍

DAX除了进行计算外,更可以直接作为一门查询语言,如果说SQL是IT的数据库查询语言,那么DAX就可以认为是分析师的查询语言。理解了DAX查询,意味着开始真正驾驭DAX。

你知道透视表就是等效的DAX查询吗

DAX在使用上,分成两大类,一类以DAX计算为核心,另一类以DAX查询为核心。本文是专对后者进行介绍的。
在之前的篇章,我们提到过:DAX计算就是在建立了关系的多个表构成的数据模型上,DAX通过筛选,找到需要进行计算的一个数据模型的子集,然后进行迭代处理后,完成聚合型计算。所以,一般而言,分析师用DAX计算关注某个值(度量值),而分析师常常可能需要的不仅仅是一个值,而是一个结果表。例如:不同类别及子类别下的销售额。

当然这个需求,可以用透视表实现,那相当于借助了Excel界面的拖拽来生成一个表,在具体的值位置,使用了DAX的度量值,这让我们得到了透视表结果。

如下所示:

这是Excel透视表默认的视图,它很简洁,稍加变化该透视表等效于:

可以使用如下的DAX查询实现等效的结果:

EVALUATE
FILTER (
    ADDCOLUMNS (
        SELECTCOLUMNS (
            GENERATE ( DimProductCategory, RELATEDTABLE ( DimProductSubcategory ) ),
            "Category", [ProductCategoryName],
            "SubCategory", [ProductSubCategoryName]
        ),
        "销售额", [销售额]
    ),
    [销售额] <> BLANK ()
)

结果如下:

可以看到这与透视表的结果是完全等效一致的。

注:在Excel中使用透视表对数据模型进行操作时,实际使用的是MDX查询。但由于 MDX查询 和 DAX查询 具有等效性,相当于 透视表操作 等效于 MDX查询 等效于 DAX查询。关于MDX查询不在这里讨论的范围。

不难发现:

  • 透视表可以实现的数据视图,使用DAX查询都可以做到。
  • 一些更复杂的数据视图,很难用透视表实现,而DAX查询也可以做到。
  • 就使用难度而言,透视表是拖拽式的,而DAX查询则要学习DAX语言。
  • 透视表面向普通办公场景,而DAX查询则是分析师专属。

作为数据分析师,我们必然是要掌握DAX查询的,以便获得DAX的全部能力,当然,这不是拖拖拽拽就能实现的,让我们一起开始学习吧。

进入DAX查询前的准备

要学习DAX查询,首先应该做好如下准备:

  • 了解并能初步使用Power Pivot。
  • 了解并能初步使用Power BI Desktop。
  • 大致了解Power Pivot与Power BI Desktop在DAX方面的共性。

更准确地说,需要理解DAX计算并至少在Excel Power Pivot或Power BI Desktop中实践过至少以下一种:

  • 自行创建度量值,并在Excel Power Pivot中借助透视表工具和度量值进行结合实践。
  • 自行创建度量值,并在Power BI Desktop中借助可视化化工具和度量值进行结合实践。

理解DAX查询的对象

所谓查询,那么一定具体指的是用户从A处按照某需求查询出结果B的过程。例如,我们熟知的SQL查询是用户从数据库(兼容SQL查询标准)按照业务需求(如:select * from user t where t.age > 20)查询出结果(大于20岁的用户)。
DAX查询从这个意义上讲,是完全一致的。DAX查询,是分析师从数据模型(内置DAX引擎)按照业务需求查询出结果的过程。

具备内置DAX引擎的数据模型目前有:

  • Excel 数据模型(归并在Power Pivot主题下)
  • Power BI / Power BI Desktop 数据模型
  • SSAS服务

关于SSAS服务的内容超过自助商务智能的范畴,不在讨论范围之内。

下面分别说明如何在Excel及Power BI Desktop下展开DAX查询。

DAX Studio:DAX查询的专属工具

DAX Studio是一个专门编写DAX查询的免费工具。可以在这里获取:http://daxstudio.codeplex.com/
下载安装启动后,可以看到:


这里提示要连接到的数据模型,有三种选择,这与之前介绍的内置DAX引擎的三种数据模型相一致。

需要注意的是:

  • DAX Studio与Excel 数据模型的连接需要从Excel里启动DAX Studio,第一项可用。
  • 如果当前本地打开了Power BI Destop,则第二项可用。

连接后DAX Studio显示主界面如下:

各主要板块大致如下:

借助DAX Studio,我们可以完成:

  • DAX查询编写
  • DAX查询/DAX代码格式化
  • 数据模型元数据查看
  • 当前DAX引擎支持函数查看
  • 当前DAX引擎DMV
  • DAX查询结果查看
  • DAX查询结果数据导出
  • DAX引擎运行监控(为代码优化做准备)
  • DAX引擎时间跟踪
  • DAX代码性能优化

也就是说,编写DAX查询仅仅是DAX Studio支持的基础功能,这也是本文要介绍的主题,由于DAX Studio的深度使用,将在后续的文章中单独说明。

在Excel中使用DAX查询

在Excel中使用DAX查询必须满足一个前提,那就是:Excel已经使用了数据模型

安装DAX Stuido以后,Excel会出现一个新的选项卡,如下:

必须在这里点击DAX Studio才能打开DAX Studio与Excel数据模型的连接。

注:DAX引擎内置在Excel进程里,所以必须从Excel中打开DAX Studio以匹配该进程。

如下所示:

可以看到,连接的Excel数据模型显示为:Microsoft_SQLServer_AnalysisService,这进一步说明Excel内置了SSAS引擎。

DAX查询的语法是以 EVALUATE 开头的返回表的DAX表达式。那最简单的可以直接用一个已有的表,如下:

为了把这个结果返回到Excel,可以设置DAX查询的输出位置,如下:

这个加载到Excel中的表与其他表的不同在于,它是DAX查询返回的表,如下:

可以看到这个表格带有【编辑DAX】的菜单,如下:

看到这里,你应该意识到,这基本上属于开启了Excel的一个隐藏功能,而且是一个威力非常巨大的隐藏功能,你可以在这里编写任意的DAX查询以驾驭Excel数据模型。而编写DAX的任务可以完全在DAX Studio中完成,只需要把结果链接输出到这里或者把测试满足预期的DAX查询代码粘贴至此即可。

作为Excel透视表用户,也应该能意识到此时你将摆脱以前Excel数据透视表给你带来的任何限制,你可以实现任何你想象到的任务只有你具有这方面的数据即可。

我们完成本文开头的代码,填入:

这就得到了本文一开始等效于透视表的结果。

这里我们并不用特别在意该段DAX代码的,这需要知道DAX查询可以实现的效果。关于DAX查询如何逐步编写属于另外的独立话题。

如果没有安装DAX Studio,在Excel中其实还有一种打开DAX查询这项隐藏技术的门,操作步骤如下:
【步骤一】从外部获取数据,一般是Power Query获取数据并加载到数据模型。(如:表DimProductCategory)。
【步骤二】从【现有连接】打开表,如下:


下一步:

点击【打开】:

选择数据在工作簿的显示方式为【表】以及数据放置位置为【新工作表】,如下:

这种表就是使用DAX查询得到的表,如下:

此时便可以自由地编写DAX查询了。

注意:尽量用刚才的方式加载一个小表作为占位符表,然后再修改DAX查询。如果选择了一个FactSales这样几百万行的表,Excel是无法加载进工作表的,当然大表也会占据更多时间。

至此,已经借助DAX Studio或从Excel原生开启了DAX查询的序幕。接下来就完全是DAX查询的阶段了。

在Power BI Desktop中使用DAX查询

在Power BI Desktop中使用DAX查询相比在Excel使用DAX查询更加简单,因为首先你看到的一切在Power BI Desktop拖拽生成的图形元素背后,都是DAX查询的结果,类似于本文开篇透视表的结果。

也就是说,不管是饼图,条形图或是地图等,背后用到的数据都是DAX查询的结果,当然Power BI Desktop做了数据量级的限制以确保图形的合理显示。

Power BI Desktop图形元素自动生成DAX查询不在本文讨论范围之内,后续再说明。

首先Power BI Desktop直接给出了可以返回表的机会,也就是直接可以编写DAX查询如下:

当然,Power BI Desktop也可以与DAX Studio相连接,如下:

只要Power BI Desktop是打开的,随后再打开DAX Studio就可以选择Power BI Desktop进行连接。连接后如下所示:

略加观察不难发现,这里的连接是具体的Power BI Desktop文件名称。回忆前述的DAX Studio连接Excel的方式是不显示具体文件名称的。因为,Power BI Desktop会开启独立的SSAS进程。

强调这两点是在引导一种对于分析师更强大的组合使用模式,那就是:分析师可以直接使用Power BI Desktop作为本机的分析服务器。而DAX查询将最大化地发挥分析师的能力。

分析师可以在DAX Studio中完成DAX 查询的调试后,放入Power BI Desktop构建独立的表。

开始在DAX Studio中编写DAX查询

在DAX Studio中编写DAX查询是以EVALUATE开始的,可以在DAX Studio中实现对任意DAX表达式的测试,这不仅有利于完全理解DAX表达式的运行以深入学习DAX,也可以完成非常复杂的表达式的编写和调试工作。

测试返回表的表达式:

DAX查询可以测试返回表的DAX表达式

EVALUATE
ADDCOLUMNS ( 'Product Category', "Total", [Sales Amount] )

返回:

只是希望返回类别和销售额?如何进一步特定化DAX查询,将在后续进一步说明。

测试返回值的表达式:

EVALUATE
ROW( "Total", [Sales Amount] )

返回:

由于DAX查询必须返回表,可以用ROW来构建一个表,但实质是为了测试一个值。

总结

通过本文的介绍,我们可以知道:

  • Excel透视表可以用等效的DAX查询表示
  • DAX查询可以表示出任意复杂的查询结果,这种能力远远超过Excel透视表本身
  • DAX Studio是编写DAX查询的强大武器
  • DAX Studio除了编写DAX查询外,还具备其他更多特性
  • 理解如何借助DAX Studio完成DAX查询与Excel的连接
  • 理解如何直接在原生Excel中实现DAX查询
  • 理解如何在Power BI Desktop中进行DAX查询
  • 理解如何借助DAX Studio测试DAX查询(返回表或返回值)

现在,赶快下载DAX Studio开启DAX查询的无限可能吧。
在你完成一定探索后,会发现一些问题,相信在后续关于DAX Studio及DAX查询的文章中会找到你要的答案。

如果你喜欢本文,欢迎在朋友圈进行分享。

留言后下载本文使用示例数据文件。

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

推荐阅读更多精彩内容