设为首页 收藏本站
查看: 1302|回复: 0

[经验分享] POWER BI之DAX与SQL区别

[复制链接]

尚未签到

发表于 2018-10-17 06:09:13 | 显示全部楼层 |阅读模式
前言:
  这篇文章对于具有一点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,  
Size
  
FROM 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和一些高级的用法,深刻理解上下文是必须的。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-622438-1-1.html 上篇帖子: Open*** server端配置文件详解 下篇帖子: 项目中MySQL数据源转SQL server数据源Dual无效
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表