POWER BI之DAX与SQL区别
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,前言:这篇文章对于具有一点SQL查询基础人会十分容易理解,譬如:掌握SELECT,SUM,GROUP BY等。注:此文不涉及到Filter Context(筛选上下文)的介绍。正文:对于对SQL有一定
千家信息网最后更新 2025年12月02日POWER BI之DAX与SQL区别
前言:
这篇文章对于具有一点SQL查询基础人会十分容易理解,譬如:掌握SELECT,SUM,GROUP BY等。
注:此文不涉及到Filter Context(筛选上下文)的介绍。
正文:
对于对SQL有一定了解的人来说,咋看DAX,怎么都不习惯。 但是,如果理解以下几个后,DAX学起来就得心应手一些。
SUMMARIZE
FILTER
CALCULATE 与 CALTULATETABLE
注:这里不会对这些语法详细的讲解,而是从SQL的角度,看看那些DAX的等价相似语句。
先来看一个例子,
查询Products表里的所有行:
表 ='tblProduct'SELECT *FROM tblProduct [object Object]
DAX Filter vs SQL Filter
DAX:
FILTER ( Product, RELATED ( Category[Product Category Name] ) = "Bike")
SQL:
SELECT * FROM Product PJOIN Category c on P.[Category_KEY] = c.[Category_KEY]WHERE c.[Product Category Name] = 'Bikes'FILTER是一个MUST know的语句
从Transaction表中统计销售数目 - SUM-GRUOP BY:
DAX
-- 显示每个产品销售数目SUMMARIZE ('Transaction','Transaction'[ProductId],"Total qty", SUM ( 'Transaction'[Quantity] ))-- 显示每个产品销售数目
(Quantity) ProductId
SUMMERIZE
选择一个表中指定的列:
dax
SUMMARIZE(Product,Product[Name],Product[Size])
SELECT Name,SizeFROM tblProduct选择前几行:TOPN ( 5, Product, Product[FullPrice] )TOP3 = TOPN(3,SUMMARIZE('订单表','订单表'[create_time],"Sale Amount",sum('订单表'[amount])),[Sale Amount]) //返回表的值,需要添加表select * from Product LIMIT 5SUMMARIZE是一个比较重要语句:
记住:这个跟SQL极为相似,学习过程中只要想想SQL就容易理解很多了。
SUMMARIZE( 源表名, Group by 列 1, ..., Group by 列 N, 汇总列名1, 汇总列名1所对应的表达式, ..., 汇总列名N, 汇总列名N所对应的表达式 )
再来一个例子:
对产品的分类,颜色,产品名字进行统计:交易单量,销售数目
MSDN的例子
DAX:
SUMMARIZE('Internet Sales' , ROLLUP('Date'[Calendar Year], 'Product Category'[Product Category Name]) , "Sales Amount", SUM('Internet Sales'[Sales Amount]) , "Discount Amount", SUM('Internet Sales'[Discount Amount]) )SELECT D.[Calendar Year], PC.[Product Category Name] , SUM(F.[Sales Amount]) 'Sales Amount' , SUM(F.[Discount Amount]) 'Discount Amount'FROM [Internet Sales] FJOIN DATE D ON S.[DAY_KEY] = F.[DAY_KEY]JOIN [Product Category] PC ON PC.[Category_KEY] = F.[Category_KEY]GROUP BY D.[Calendar Year],PC.[Product Category Name]等价的SQL如下,如果你只看浅蓝色的部分,是不是很好理解呢?
SUMMARIZE还有其他的Option,这里就不做详细介绍。
SUMMARIZE详情参考:https://msdn.microsoft.com/en-us/library/gg492171.aspx
CALCULATETABLE vs Sub Query
下面语句统计Bike这个类别的产品的销售数目。
SUMMARIZE ( CALCULATETABLE ('Internet Sales', 'Product Category'[Product Category Name] = "Bikes" ), -- field to group by Product[Product Name],"Quantity sold",SUM( 'Internet Sales'[Order Quantity] ))SELECT P.[Product Name], SUM(Fact.[Quantity]) as 'Quantity sold'FROM (SELECT F.* FROM [Transaction] F JOIN Category c ON F.[Category_Key] = C.[Category_Key] WHERE C.[Product Category Name] = 'Bikes' ) Fact join Product P ON P.[Product_Key] = Fact.[Product_Key]GROUP BY P.[Product Name]上述的SQL语句有很多种写法。高亮部分CalculateTable里面筛选了Bikes这个类别,正如SQL的sub Query一样。
小结:
DAX语法十分灵活,有些看起来晦涩难懂,但是,如果能够以SQL为基础的角度去切入会事半功倍。
还有,此文没有介绍的上下文(Filter Context)是一个重要的概念,如果要真正掌握DAX和一些高级的用法,深刻理解上下文是必须的。
产品
数目
语句
F.
销售
P.
上下
上下文
例子
订单
相似
重要
产品销售
基础
等价
类别
表达式
角度
语法
部分
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
ssas源视图加数据库
山西进销存软件开发
机关网络安全工作要求
广州市软件开发学校报名
怎么样保存自己建的数据库
网络技术国家标准
信阳天气预报软件开发
如何登陆svn服务器
护苗网络安全课视频 优酷
直播服务器搭建
网络安全十个准则
网络安全培训方案设计
腾讯客服实名认证服务器怎么填
华为服务器管理口登录密码
沈阳奇搜网络技术怎么样
俄罗斯国家安全战略网络安全
英国大学邮箱的收发件服务器
摩尔庄园忘记服务器
剑灵服务器维护中207
病毒和软件开发有关系吗
搜狗号码通 本地数据库
江苏国产服务器哪个好
美国网络安全的特征体现在
如何浏览r中读取的数据库
h3c服务器关闭告警
吴江网络技术支持价格
数据库表的记录保存在
邯郸工业软件开发价钱
北京软件开发定制价格表
数据库范式应用题