首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Excel中比较DAX中的一行

如何在Excel中比较DAX中的一行
EN

Stack Overflow用户
提问于 2015-12-08 10:51:54
回答 1查看 121关注 0票数 0

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

基本上,本表显示了哪些学生在哪个模块注册,哪个老师在哪个学期里运行。

我想提出以下问题:

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公式做到这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-08 12:48:35

代码语言:javascript
复制
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。

您还没有说明您的度量是否需要处理总计,或者您可能希望如何看到。如果你需要更多的帮助才能让它按照你喜欢的方式运作,请告诉我。

编辑,总计

有几种方法你可能想要处理总计。我可以假设你想要一个独特的学生数。

代码语言:javascript
复制
StudentsWithTwoOrMoreRegistrations:=
COUNTROWS(
    SUMMARIZE(
        FILTER(
            SUMMARIZE(
                ModuleRegistration
                ,ModuleRegistration[Tutor_ID]
                ,ModuleRegistration[Student_ID]
            )
            ,[RowCount] >= 2
        )
        ,ModuleRegistration[Student_ID]
    )
)

我们的措施发生了什么?

让我们来看看:

从最内部的汇总()开始。汇总()从(1)中的表向外导航关系,并按(2)-(N)中列出的列进行分组(这些不必来自(1)中的表,但必须通过导航关系才能到达)。

这相当于SQL中的以下内容:

代码语言:javascript
复制
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一次的适当行为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34153947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档