间接相关的行数

问题描述 投票:0回答:2

我有一份 Powerbi 报告,使用有关我的组织中 Zoom 会议的数据。 我有一个包含所有员工的组织表,通过桥接表(电子邮件到 MMID 链接)和两个非活动关系链接到我的事实表(zoom 出勤)。 事实表针对每次会议的每位与会者都有一行,其中包含有关与会者和主持人的详细信息。 之所以这样设置,是因为一个员工可能有多个电子邮件地址,因此桥接表启用了多对多关系,这两个非活动关系是因为员工可能是会议主持人或会议参加者。 Zoom 会议表是我之前用来解决类似问题的折衷解决方案,它包含一些有关会议的聚合数据,并且每个会议实例 (uuid) 都有一行。

语义模型的相关部分

我使用计算组来允许报表用户动态选择是否要查看有关员工或部门主持的会议、出席的会议或他们参加的所有会议的指标。我还使用字段参数来呈现几个度量一张桌子。 我的设置对于会议计数和持续时间的其他度量效果很好,但我在解决与会者计数的逻辑问题时遇到了麻烦。

应用于表格的过滤器

基本上,问题是,如果为“选定的用户是”选择 Zoom 参加者值(使用员工和会议参加者字段之间的关系进行计算),则 Zoom 出勤表中的行数仅计算其自身并且不会计算参加同一会议的其他所有人。 我觉得有一个相当简单的解决方案可以得到我正在寻找的东西,但由于某种原因我的大脑就是不转动。

更多细节: 选择要使用的关系的计算项目的 DAX 代码:

Zoom Hosts = CALCULATE (
    SELECTEDMEASURE (),
    USERELATIONSHIP ( 'Zoom Attendance'[HostEmail], 'Email to MMID Link'[Primary Email] )
)
Zoom Attendees = CALCULATE (
    SELECTEDMEASURE (),
    USERELATIONSHIP ( 'Zoom Attendance'[AttendeeEmail], 'Email to MMID Link'[Primary Email] )
)
All Zoom Participation = VAR att =
    CALCULATE (
        SELECTEDMEASURE (),
        USERELATIONSHIP ( 'Zoom Attendance'[AttendeeEmail], 'Email to MMID Link'[Primary Email] )
    )
VAR host =
    CALCULATE (
        SELECTEDMEASURE (),
        USERELATIONSHIP ( 'Zoom Attendance'[HostEmail], 'Email to MMID Link'[Primary Email] )
    )
RETURN
    att + host

TLDR 我需要创建一个度量来计算 Zoom 出勤表中具有与所选员工匹配的 uuid 的所有行,但我无法指定要使用的关系或该员工列在哪一列、主持人或与会者中。 我尝试使用 Zoom 会议表创建 UUID 的过滤列表,然后从 Zoom 出勤表中过滤匹配的行,但我做错了。老实说,我希望把这个拼写出来能让我想到解决方案,但没有骰子。

TLDR 我需要创建一个度量来计算 Zoom 出勤表中具有与所选员工匹配的 uuid 的所有行,但我无法指定要使用的关系或列出该员工的哪一列(主持人或与会者)我尝试使用 Zoom 会议表创建 UUID 的过滤列表,然后从 Zoom 出勤表中过滤匹配的行,但我做错了。老实说,我希望把这个拼写出来能让我想到解决方案,但没有骰子。 我正在尝试这样的事情:

Attendees in Zoom Meetings = 
VAR uuids = ADDCOLUMNS('Zoom Meetings', "validuuid", 'Zoom Meetings'[UUID])
VAR filtered = FILTER('Zoom Attendance', 'Zoom Attendance'[UUID] IN uuids)
RETURN
COUNTROWS(filtered)
parameters dax
2个回答
0
投票

如果我理解正确的话,您需要做的是获取

UUID
的列表,然后根据该列表计算行数。

尝试以下方法:

  var uuidHost = 
    CALCULATETABLE(
      DISTINCT(Zoom Attendance'[UUID]),
      USERELATIONSHIP ( 'Zoom Attendance'[HostEmail], 'Email to MMID Link'[Primary Email] )
    )

  var uuidAttendee = 
    CALCULATETABLE(
      DISTINCT(Zoom Attendance'[UUID]),
      USERELATIONSHIP ( 'Zoom Attendance'[AttendeeEmail], 'Email to MMID Link'[Primary Email] )
    ) 

  var uuidBoth = DISTINCT( UNION(uuidHost, uuidAttendee) )

  var attendeesCount = 
    CALCULATE(
      COUNTROWS('Zoom Attendance'),
      Zoom Attendance'[UUID] IN uuidBoth 
    )

0
投票

同样的 Nseir 让我朝着正确的方向思考,我最终得到的是:

Attendees in Zoom Meetings = 
VAR user = SELECTEDVALUE( 'Email to MMID Link'[Primary Email] )
VAR attend =
    COUNTROWS(
        CALCULATETABLE(
            'Zoom Attendance',
            ALL( 'Zoom Attendance' ),
            CALCULATETABLE(
                DISTINCT( 'Zoom Attendance'[UUID] ),
                CONTAINSSTRING( 'Zoom Attendance'[AttendeeEmail], user ),
                'Zoom Attendance'[is_host] = 0
            ),
            'Zoom Attendance'[AttendeeEmail] <> user
        )
    )
VAR host =
    COUNTROWS(
        CALCULATETABLE(
            'Zoom Attendance',
            CALCULATETABLE(
                DISTINCT( 'Zoom Attendance'[UUID] ),
                CONTAINSSTRING( 'Zoom Attendance'[HostEmail], user )
            ),
            'Zoom Attendance'[is_host] = 0
        )
    )
VAR _select =
    SWITCH(
        SELECTEDVALUE( 'Use Relationship'[User Type] ),
        "Zoom Hosts", host,
        "Zoom Attendees", attend,
        "All Zoom Participants", host + attend,
        0
    )
RETURN
    _select

在查看单个员工时,这给出了正确的值,对于聚合,我想我只会接受稍微少一点的解决方案,并使用会议表为每次会议创建会议与会者计数,然后将其相加。

© www.soinside.com 2019 - 2024. All rights reserved.