我有一张桌子,它有其他几个键的外键:

基本上,本表显示了哪些学生在哪个模块注册,哪个老师在哪个学期里运行。
我想提出以下问题:
How many students have registered for more than one module run by a given tutor?
看起来会是这样的:

例如,运行两个模块: FunPro和NO。如果一名学生同时为他们两人登记,他就被算作一名学生。
面向sql的思想告诉我:计算student_id和tutor_id相同的所有行。例如,在一行中,student_id为5,tutor_id为10,第三行也是如此。然后,我把它算成一个。
我怎样才能用DAX公式做到这一点呢?
发布于 2015-12-08 12:48:35
RowCount:=
COUNTROWS( ModuleRegistration )
StudentsWithTwoOrMoreRegistrations:=
COUNTROWS(
FILTER(
VALUES( ModuleRegistration[Student_ID] )
,[RowCount] >= 2
)
)我指的是位置上的参数,因此函数的第一个参数是(1),第二个参数(2),等等。
因此,RowCount是微不足道的。
StudentsWithTwoOrMoreRegistrations涉及的更多一些。DAX是一种函数式语言,最好从内到外来理解.
FILTER()接受(1)中的表表达式,并计算(1)中每一行的布尔谓词(2)。它返回(1)中(2)计算为true的所有行。
我们的filter ( )的(1)是值( ModuleRegistrationStudent_ID )。VALUES()基于当前过滤器上下文从字段中返回唯一的行(它尊重Student_IDs表中的切片器和过滤器)。因此,我们将返回Student_IDs唯一列表的一些子集。
我们的filter ()s ( 2 )是RowCount >= 2。对于(1)中的每个Student_ID,我们将对RowCount进行评估,检查学生在ModuleRegistration中出现的次数。RowCount的计算方法是结合枢轴表中的过滤器上下文(您的示例枢轴中的“教师名称”字段提供过滤器上下文)和filter ()s (1)中的行上下文。因此,它计算了学生在ModuleRegistration中出现在枢轴表行上的学系名称的次数。
我们检查RowCount是>= 2。
您还没有说明您的度量是否需要处理总计,或者您可能希望如何看到。如果你需要更多的帮助才能让它按照你喜欢的方式运作,请告诉我。
编辑,总计
有几种方法你可能想要处理总计。我可以假设你想要一个独特的学生数。
StudentsWithTwoOrMoreRegistrations:=
COUNTROWS(
SUMMARIZE(
FILTER(
SUMMARIZE(
ModuleRegistration
,ModuleRegistration[Tutor_ID]
,ModuleRegistration[Student_ID]
)
,[RowCount] >= 2
)
,ModuleRegistration[Student_ID]
)
)我们的措施发生了什么?
让我们来看看:
从最内部的汇总()开始。汇总()从(1)中的表向外导航关系,并按(2)-(N)中列出的列进行分组(这些不必来自(1)中的表,但必须通过导航关系才能到达)。
这相当于SQL中的以下内容:
SELECT
mr.Tutor_ID
,mr.Student_ID
FROM ModuleRegistration mr和前面一样,我们在这个表上使用FILTER()。RowCount是在由上面的汇总()定义的数据透视表和表中的行的过滤器上下文组合中计算的。
现在,我们的行上下文不再只是一个学生,而是一对学生导师。当学生从导师那里学到一个以上的模块时,这对学生将拥有一个RowCount >= 2。
我们的FILTER()返回具有RowCount >= 2的对。这个输出表有两个字段,Tutor_ID和Student_ID,但是我们希望从中计数不同的Student_IDs。
因此,我们在外部汇总()中使用from ()表作为我们的(1)。我们只根据Student_ID的值进行分组,然后计算这个表的行数。
当只有一个Faculty_Name在上下文中时,例如在枢轴表行上,那么我们的内部汇总()就是按照Tutor_ID的单个值以及与它相关的任何Student_IDs进行分组。这与我们先前的措施是完全相同的。
当我们在上下文中有许多Tutor_IDs时,例如在总计中,我们将看到只计算每个Student_ID一次的适当行为。
https://stackoverflow.com/questions/34153947
复制相似问题