暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PowerBI-DAX-Generate

BISeven 2021-07-02
626

Generate函数返回的是一张笛卡尔积表,其语法如下:


Generate(table1, table2)

Generate函数迭代table1表格,在table2表格中寻找与之对应的记录并生成笛卡尔积。

 

这里有2张很简单的表,之间并没有建立任何关系:



T = GENERATE('YiLuXiangBei Stu Course', 'YiLuXiangBei Stu Student')

该函数生成了一张笛卡尔积表,对于Course表中的每一行都乘上了Stu表中的所有行,如下图

当我们在Stu表中加入一列,使这两张表建立连接:

使同样的代码,生成的结果,保持不变,如下:

 

T = GENERATE('YiLuXiangBei Stu Course', 'YiLuXiangBei Stu Student')

但是,我们对上述代码稍作改动,结果大不相同:

T2 = GENERATE('YiLuXiangBei Stu Course', CALCULATETABLE('YiLuXiangBei Stu Student'))

 

此时,对于每个科目都返回了与之对应的学生信息,张三同学学习了科目2数学,Generate函数在Course表生成了行上下文,而CalCulateTable函数将行上下文转换成筛选上下文,Course表中的每一行都不再和Stu的所有行进行相乘,而仅仅与对应行进行相乘了。

 

注:

1. Generate函数中的两张表中不能有相同的列名,不然的话会产生错误

2. 当在Generate函数中发生上下文转换时,当Table1中某些记录在table2中找不到时,会省略记录,如最后一个例子,科目表有化学的信息,但是没有学生学习,所以在结果中不存在化学的信息


参考:

1. https://docs.microsoft.com/en-us/dax/generate-function-dax

2. https://www.powerbigeek.com/understanding-generate-and-generateall/

文章转载自BISeven,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论