这篇文章对于具有一点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 (
Product,
RELATED ( Category[Product Category Name] ) = "Bike")
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
选择一个表中指定的列:
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
下面语句统计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和一些高级的用法,深刻理解上下文是必须的。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。