POWER BI之DAX与SQL区别
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,前言:这篇文章对于具有一点SQL查询基础人会十分容易理解,譬如:掌握SELECT,SUM,GROUP BY等。注:此文不涉及到Filter Context(筛选上下文)的介绍。正文:对于对SQL有一定
千家信息网最后更新 2025年01月23日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 5
SUMMARIZE是一个比较重要语句:
记住:这个跟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安全错误
数据库的锁怎样保障安全
上万人同时上线用什么数据库
广东选调生有服务器吗
达内网络安全教育
任务驱动法网络技术
app软件开发模板下载
营销数据库与营销数据仓库
java软件开发职业规划
坪山区生产服务器机柜厂家
霍格沃尔服务器
南京秦淮路王希贤软件开发
ftp从服务器断开
网吧服务器需要公网ip吗
网络安全可以做些什么工作
delphine数据库建设
jeos 数据库
广西米付网络技术公司
计算机网络技术能学吗
合肥丹明网络技术有限公司
对于网络安全内审的理解
审计局做好网络安全工作
开福区软件开发专业
软件开发者系统详细设计书
图书购买数据库
福建行业专业软件开发
云服务器 没有公网ip
数据库异地多活方案
数据库访问技术是
东土科技宜昌工业互联网招工
软件开发行业的风险
国产数据库市场占有率2022