DAX基础入门 - 30分钟从SQL到DAX -- PowerBI 利器
看到漂漂亮亮的PowerBI报表,手痒痒怎么办?!
有没有面对着稀奇古怪的DAX而感到有点丈八金刚摸不着头脑或者干瞪眼?!
有没有想得到某个值想不出来DAX怎么写而直跳脚!?
看完这篇文章,你会恍然大悟,捂脸偷笑。呼呼呼~
前言:
这篇文章对于具有一点SQL查询基础人会十分容易理解,譬如:掌握SELECT,SUM,GROUP BY等。

注:此文不涉及到Filter Context(筛选上下文)的介绍。
正文:
对于对SQL有一定了解的人来说,咋看DAX,怎么都不习惯。 但是,如果理解以下几个后,DAX学起来就得心应手一些。
SUMMARIZE
FILTER
CALCULATE 与 CALTULATETABLE
注:这里不会对这些语法详细的讲解,而是从SQL的角度,看看那些DAX的等价相似语句。
欢迎转载,请保留原文链接和作者信息。O(∩_∩)O谢谢。 DAX基础 - 30分钟掌握从SQL到DAX 作者:马丁叔叔
链接:http://www.cnblogs.com/lizardbi/p/DAX-FOUNDATION-DAX-FOR-SQL-DEVELOPER-IN-30-MINUTES.html
先来看一个例子,
查询Products表里的所有行:
DAX |
SQL |
-- list all the Products |
show all the Products |
DAX Filter vs SQL Filter
| DAX | SQL |
EVALUATE |
SELECT * FROM Product P |
FILTER是一个MUST know的语句
从Transaction表中统计销售数目 - SUM-GRUOP BY:
| DAX | SQL |
-- 显示每个产品销售数目 |
-- 显示每个产品销售数目 SELECT ProductId, SUM(Quantity) AS 'Total Qty' |
SUMMERIZE
选择一个表中指定的列:
| DAX | SQL |
-- list selected columns |
-- show selected columns |
排序:
| DAX | SQL |
-- show products in name order |
-- show products by name |
选择前几行:
| DAX | SQL |
-- show 5 most expensive products |
SELECT TOP 5 |
SUMMERIZE vs Group BY
SUMMARIZE是一个比较重要语句:
记住:这个跟SQL极为相似,学习过程中只要想想SQL就容易理解很多了。
EVALUATE
SUMMARIZE(
源表名,
Group by 列 1,
...,
Group by 列 N,
汇总列名1,
汇总列名1所对应的表达式,
...,
汇总列名N,
汇总列名N所对应的表达式
)
再来一个例子:
对产品的分类,颜色,产品名字进行统计:交易单量,销售数目
MSDN的例子
| DAX |
SQL |
EVALUATE |
SELECT D.[Calendar Year], PC.[Product Category Name] |
| Date[Calendar Year] | Product Category[Product Category Name] | [Sales Amount] | [Discount Amount] |
|---|---|---|---|
| 2005 | Bikes | 6958251.043 | 4231.1621 |
| 2006 | Bikes | 18901351.08 | 178175.8399 |
| 2007 | Bikes | 24256817.5 | 276065.992 |
| 2008 | Components | 2008052.706 | 39.9266 |
| ... | ... | ... | ... |
等价的SQL如下,如果你只看浅蓝色的部分,是不是很好理解呢?
SUMMARIZE还有其他的Option,这里就不做详细介绍。
SUMMARIZE详情参考:https://msdn.microsoft.com/en-us/library/gg492171.aspx
CALCULATETABLE vs Sub Query
下面语句统计Bike这个类别的产品的销售数目。
| DAX | SQL |
EVALUATE |
SELECT |
上述的SQL语句有很多种写法。
高亮部分CalculateTable里面筛选了Bikes这个类别,正如SQL的sub Query一样。

DAX ADDCOLUMNS vs SQL Derived Column
注:ADDCOLUMNS跟Calculated Column类似:即给指定的表加入计算列。不一样的地方在于Addcolumn所加的只在它所在的语句有效。
| DAX | SQL |
EVALUATE |
SELECT [Product Category Name], count(t.Id) AS 'Number transactions' |

小结:
DAX语法十分灵活,有些看起来晦涩难懂,但是,如果能够以SQL为基础的角度去切入会事半功倍。
还有,此文没有介绍的上下文(Filter Context)是一个重要的概念,如果要真正掌握DAX和一些高级的用法,深刻理解上下文是必须的。
希望有时间好好讲讲这个。
欢迎交流与骚扰

DAX基础入门 - 30分钟从SQL到DAX -- PowerBI 利器的更多相关文章
- TTS-零基础入门-10分钟教你做一个语音功能
在本片博客正式開始之前,大家先跟我做一个简单的好玩的 小语音. 新建一个文本文档,然后再文档里输入这样 一句话 CreateObject("SAPI.SpVoice").Spea ...
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- Objective-C 30分钟入门教程
Objective-C 30分钟入门教程 我第一次看OC觉得这个语言的语法有些怪异,为什么充满了@符号,[]符号,函数调用没有()这个,但是面向对象的高级语言也不外乎类,接口,多态,封装,继承等概念. ...
- AngularJS 30分钟快速入门【译】
引用自:http://www.revillweb.com/tutorials/angularjs-in-30-minutes-angularjs-tutorial/,翻译如下: 简介 我三年前开始使用 ...
- 【转载】20分钟MySQL基础入门
原文:20分钟MySQL基础入门 这里持续更新修正 开始使用 MySQL 为关系型数据库(Relational Database Management System),一个关系型数据库由一个或数个表格 ...
- LaTeX新人教程,30分钟从完全陌生到基本入门
by Nan 对于真心渴望迅速上手LaTeX的人,前言部分可以跳过不看. 本教程面向对LaTeX完全无认知无基础的新人.旨在让新人能够用最简单快捷的方式,轻松入门,能够迅速使用LaTeX完成基本的文本 ...
- 正则表达式30分钟入门教程<转载>
来园子之前写的一篇正则表达式教程,部分翻译自codeproject的The 30 Minute Regex Tutorial. 由于评论里有过长的URL,所以本页排版比较混乱,推荐你到原处查看,看完了 ...
- LaTeX新人30分钟从完全陌生到基本入门
From:http://www.360doc.com/content/13/0117/11/2886802_260681908.shtml 对于真心渴望迅速上手LaTeX的人,前言部分可以跳过不看. ...
随机推荐
- W3Cschool学习笔记——CSS3教程
向 div 元素添加圆角: div { border:2px solid; border-radius:25px; -moz-border-radius:25px; /* Old Firefox */ ...
- Canvas + JavaScript 制作图片粒子效果
首先看一下源图和转换成粒子效果的对比图: 左侧图片为源图,右侧图片为粒子效果图.该效果是在Canvas画布上制作的.将图片制作成粒子效果相对而言是比较简单的.重点了解两个知识点即可 1:图 ...
- [原创.数据可视化系列之十二]使用 nodejs通过async await建立同步数据抓取
做数据分析和可视化工作,最重要的一点就是数据抓取工作,之前使用Java和python都做过简单的数据抓取,感觉用的很不顺手. 后来用nodejs发现非常不错,通过js就可以进行数据抓取工作,类似jqu ...
- 模仿jquery的fileupload插件
仅需要new一个对象,将上传后台的url和点击触发上传的元素id传给对象,就可以自从实现上传 暂不支持IE <html> <body> <a href="#&q ...
- HTML中的a标签实现点击下载
通常在咱们写项目的时候会遇到上传下载什么的,在上传完文件后会把文件的路径保存到数据库里以便下载,如果想不通过后台直接下载的话,可以把文件路径给a标签的属性href: <a href=" ...
- Visual Studio 2017 离线安装方式
Visual Studio, 特别是Visual Studio 2017 通常是一个在线安装程序,如果你在安装过程中失去连接,你可以遇到问题.但是,由于法律原因,微软没有提供完整的可下载的ISO镜像. ...
- 简单C程序,迷宫
#include<stdio.h> #include <stdlib.h> int visit(int, int); ][] = { {, , , , , , , , ,}, ...
- vue生命周期的介绍
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 从0移植uboot (二) _启动流程分析
经过了上一篇的配置,我们已经执行make就可以编译出一个uboot.bin,但这还不够,首先,此时的uboot并不符合三星芯片对bootloader的格式要求,其次,此时的uboot.bin也没有结合 ...
- 读书笔记 effective c++ Item 19 像设计类型(type)一样设计
1. 你需要重视类的设计 c++同其他面向对象编程语言一样,定义了一个新的类就相当于定义了一个新的类型(type),因此作为一个c++开发人员,大量时间会被花费在扩张你的类型系统上面.这意味着你不仅仅 ...