DAX查询入门:DAX Studio介绍

作者: PowerBI战友联盟 | 来源:发表于2017-06-04 23:13 被阅读7466次

    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查询的文章中会找到你要的答案。

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

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

    相关文章

      网友评论

        本文标题:DAX查询入门:DAX Studio介绍

        本文链接:https://www.haomeiwen.com/subject/oekbfxtx.html