【DAX】一、DAX入门

测试工具:DAX Studio。

DAX有几个比较重要的函数:CALCULATE、CALTULATETABLESUMMARIZE、FILTER

SUMMARIZE是核心,语法如下:

EVALUATE 
SUMMARIZE( 
    源表名, 
    Group by 列 1, 
    Group by 列 N, 
    汇总列名1, 汇总列名1所对应的表达式, 
    汇总列名N, 汇总列名N所对应的表达式 
)

 

例1:查询表

EVALUATE
Product

 

例2:对表进行过滤

EVALUATE
FILTER (
    Product,
    RELATED(Category[Product Category Name]) = "Bike"
)

 

例3:分组计算

EVALUATE
SUMMARIZE (
    'Transaction',
    'Transaction'[ProductId],
    "Total qty", SUM('Transaction'[Quantity] 
)

再来一个:

EVALUATE
    SUMMARIZE(
        Product,
        Product[Name],
        Product[Size]
)    

 

例4:排序

EVALUATE
Product
ORDER BY Product[ProductName]

 

例5:TopN

EVALUATE
TOPN(
5,
Product,
Product[FullPrice]
)

 

例8:对产品的分类,颜色,产品名字进行统计:交易单量,销售数目

EVALUATE 
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])
)

注:ROLLUP与ROLLUPGROUP请看下面的语句和结果:

SUMMARIZE(
ResellerSales_USD,
ROLLUP(
ROLLUPGROUP(
DateTime[CalendarYear],
ProductCategory[ProductCategoryName]
)
),
"Sales Amount (USD)",
SUM(ResellerSales_USD[SalesAmount_USD]),
"Discount Amount (USD)",
SUM(ResellerSales_USD[DiscountAmount]) )

SUMMARIZE(
ResellerSales_USD,
ROLLUP(
ROLLUPGROUP(
DateTime[CalendarYear],
ProductCategory[ProductCategoryName]
)
),
"Sales Amount (USD)",
SUM(ResellerSales_USD[SalesAmount_USD]),
"Discount Amount (USD)",
SUM(ResellerSales_USD[DiscountAmount]) )

注:还有一个ISSUBTOTAL。如果行中包含作为参数提供的列的小计值,则返回 True 值,否则返回False

SUMMARIZE(
ResellerSales_USD,
ROLLUP(
DateTime[CalendarYear],
ProductCategory[ProductCategoryName]
),
"Sales Amount (USD)",
SUM(ResellerSales_USD[SalesAmount_USD]),
"Discount Amount (USD)",
SUM(ResellerSales_USD[DiscountAmount]),
"
Is Sub Total for DateTimeCalendarYear", ISSUBTOTAL(DateTime[CalendarYear]),
"
Is Sub Total for ProductCategoryName", ISSUBTOTAL(ProductCategory[ProductCategoryName]) )

 

例9:CALCULATETABLE vs Sub Query

下面语句统计Bike这个类别的产品的销售数目

SQL:

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]

DAX:

EVALUATE
SUMMARIZE (
    CALCULATETABLE (
        'Internet Sales',
        'Product Category'[Product Category Name] = "Bikes" 
), Product
[Product Name], "Quantity sold", SUM ('Internet Sales'[Order Quantity] )

 

例10:ADDCOLUMNS等同于衍生列

ADDCOLUMNS跟Calculated Column类似:即给指定的表加入计算列。不一样的地方在于Addcolumn所加的只在它所在的语句有效。

SQL:

SELECT 
    Product Category Name, 
    count(t.Id) AS 'Number transactions'
FROM Transaction F
JOIN Product Category C on F.Category_Key = C.Category_Key
GROUP BY C.Product Category Name

DAX:

EVALUATE
ADDCOLUMNS (
    'Product Category',
    "Number transactions", COUNTROWS(RELATEDTABLE('Internet Sales'))
)

 

posted on 2017-09-22 14:41  与数共舞  阅读(787)  评论(0编辑  收藏  举报

导航