DAX针对SQL开发者
如果你熟悉SQL,那么你应该已经通过不同列之间建立关系,来处理问题很了解了。从这点来看,对于新的DAX环境,你不会感到很陌生,因为计算DAX也是在多个表之间建立关系,从而来建立查询获取汇总值。
介绍关系的处理
SQL和DAX的第一个区别是模型中关系的工作方式。在SQL中,你可以通过声明外键来表之间的关系,但是数据引擎不会使用这些外键来进行计算,除非你特别的写出来。例如,你有个Customer 表和Sales表,CustomerKey是customer表的主键,也是sales表的外键,可以按如下的方式写一个查询。
SELECT
Customers.CustomerName,
SUM ( Sales.SalesAmount ) AS SumOfSales
FROM
Sales
INNER JOIN Customers
ON Sales.CustomerKey = Customers.CustomerKey
GROUP BY
Customers.CustomerName
即使在数据模型中申明了对应的外键,在查询的时候,依然需要特别的重新写一次关联条件。虽然这样使查询显得啰嗦,但是这个又挺有帮助,使你可以灵活的使用关联条件进行查询,自由度得到很好的拓展。
在DAX中,关系是是数据模型的组成部分,它们全部相当于是left outer关联。一旦在模型中定义了数据模型,就不必再查询中再次特别关联类型,DAX自动设置为左关联,因此,之前的sql语句可以等价于如下的写法:
EVALUATE
SUMMARIZE (
Sales,
Customers[CustomerName],
"SumOfSales", SUM ( Sales[SalesAmount] )
)
因为DAX知道sales和customers间的关系,它会自动按照模型建立关系。最终,summarize按照Customers[CustomerName]进行了聚合,不需要其他的关键字来说明聚合的条件。
网友评论