Excel中有个宏表函数EVALUATE在DAX中也有一个相同名称的函数EVALUATE,这个函数是DAX查询必须要用到的,其意义就是生成一个查询表格。
下面是如何建立查询:
DAX这个查询编写框很弱智,所以要认真才行,输错标点符号都不行。
我们开始编写
第一个查询:FILTER筛选查询产品1的销售记录
1、FILTER的第一参数是一个表,表的名称是"销售记录";
2、FILTER的第二个参数是一个表达式,销售记录表里产品列里产品名称等于"产品1"。
第二个查询:CALCULATETABLE多条件筛选查询
1、 CALCULATETABLE的第一参数与FILTER相同,也是"销售记录"表;
2、 CALCULATETABLE的第二、三参数是表达式,两个条件。
筛选姓名=姓名1并且销售大于等于90的销售记录
CALCULATETABLE与FILTER的区别就是可以输入多条件查询。
当然,FILTER也能实现多条查询,不过是要在第二参数中写复杂一点的表达式:
第三个查询:ADDCOLUMNS添加列查询
1、 ADDCOLUMNS第一参数仍然是"销售记录"表;
2、 ADDCOLUMNS第二参数是要添加的列的名称"记录";
3、 ADDCOLUMNS第三参数是新添加列的计算公式。
ADDCOLUMNS也可以创建多列像这样:
第四个查询:SUMMARIZE唯一值查询或笛卡尔集查询
看起来有点复杂,我来解释一下:
1、 SUMMARIZE的第一参数仍然是一张表,只不过这个表先被处理了一下,本来用"销售记录"表就可以查询,这里增加了一个要求用TOPN先查询了一下,排名前十的"销售记录"表,就变成了SUMMARIZE的第一参数
2、 SUMMARIZE的第二、三参数是两列,"姓名"和"产品",产生了一个笛卡尔集;
3、 后面的参数是成对出现的,有点像ADDCOLUMNS的二参和三参,即列名称和列表达式;
4、 最后ORDER BY排序 DESC:降序/ASC:升序。
第五个查询:CROSSJOIN笛卡尔集查询
功能和SUMMARIZE是一样的,这里的笛卡尔集使用CROSSJOIN来建立的。
第六个查询:GENERATE查询封装
1、 GENERATE的第一参数是日期唯一值表,VALUES会生成一个日期的唯一值表格;
2、 GENERATE的第二参数是TOPN产生的产品销售总量前三的一个表格。
GENERATE将这个查询表格封装在一起。
第七个查询:DEFINE MEASURE定义查询过程中的度量值
定义度量值"销售汇总",然后用这个度量值替换掉查询过程中的计算表达式。
这篇介绍了DAX查询的大部分内容,这个DAX查询可以直接生成报表,也可以作为中间数据再次被添加到数据模型当中作为数据源,最重要的是这个中间数据是可以随着原始数据变化自动变化的数据源。