溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

POWER BI之DAX與SQL區別

發布時間:2020-04-25 08:05:36 來源:網絡 閱讀:3790 作者:DBAspace 欄目:大數據


前言:

這篇文章對于具有一點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就容易理解很多了。

 

POWER BI之DAX與SQL區別

 SUMMARIZE( 
      源表名, 
      Group by 列 1, 
      ...,      Group by 列 N, 
      匯總列名1, 
      匯總列名1所對應的表達式, 
      ...,
      匯總列名N, 
      匯總列名N所對應的表達式 
)

POWER BI之DAX與SQL區別

 

 再來一個例子:

對產品的分類,顏色,產品名字進行統計:交易單量,銷售數目

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一樣。

 POWER BI之DAX與SQL區別

 小結:

DAX語法十分靈活,有些看起來晦澀難懂,但是,如果能夠以SQL為基礎的角度去切入會事半功倍。
還有,此文沒有介紹的上下文(Filter Context)是一個重要的概念,如果要真正掌握DAX和一些高級的用法,深刻理解上下文是必須的。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女