You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Excel 2016 Power Pivot:跨多事实表计算员工姓名唯一计数

嘿,我来帮你搞定这个Power Pivot里的唯一员工计数需求,其实步骤很清晰,核心是用好DAX函数和表间关系,具体操作如下:

第一步:先确认表间关系配置正确

这是基础,不然后续DAX计算会出问题:

  • 打开Power Pivot窗口,切换到关系图视图
  • 分别把ForecastActualInvoice三个事实表中的Employee Name字段,拖到维度表RosterEmployee Names字段上,建立一对多的关系(Roster是“一”端,事实表是“多”端)
  • 确保这些关系都是活跃状态(默认就是活跃的,除非你手动修改过)

第二步:创建DAX度量值

根据你的需求,分两种场景来写度量:

场景1:分别统计单个事实表的唯一员工数

如果需要单独看每个事实表里,当前维度(比如Project/Company)筛选下的唯一员工数量,创建这三个度量:

Forecast 唯一员工数 = DISTINCTCOUNT(Forecast[Employee Name])
Actual 唯一员工数 = DISTINCTCOUNT(Actual[Employee Name])
Invoice 唯一员工数 = DISTINCTCOUNT(Invoice[Employee Name])

小提示:如果担心事实表里有不在Roster中的无效员工名,可以用CALCULATE(DISTINCTCOUNT(Forecast[Employee Name]), RELATEDTABLE(Roster)),这样只会统计维度表里存在的员工。

场景2:统计三个表合并后的去重员工数

如果需要统计至少出现在任意一个事实表中的唯一员工总数(同一个员工在多个表出现只算一次),用这个度量:

总唯一员工数 = 
VAR 预测员工 = VALUES(Forecast[Employee Name])
VAR 实际员工 = VALUES(Actual[Employee Name])
VAR 发票员工 = VALUES(Invoice[Employee Name])
VAR 所有员工 = UNION(预测员工, 实际员工, 发票员工)
RETURN COUNTROWS(所有员工)

如果要严格限定只统计Roster里的员工(过滤掉事实表的脏数据),可以用这个版本:

总唯一员工数(仅Roster内) = 
CALCULATE(
    COUNTROWS(Roster),
    FILTER(
        Roster,
        EXISTS(Forecast, Forecast[Employee Name] = Roster[Employee Names])
        || EXISTS(Actual, Actual[Employee Name] = Roster[Employee Names])
        || EXISTS(Invoice, Invoice[Employee Name] = Roster[Employee Names])
    )
)

第三步:在数据透视表中应用

  • 回到Excel界面,插入新的数据透视表,选择使用此工作簿的数据模型作为数据源
  • 把你需要的维度字段(比如ProjectCompany)拖到透视表的行/列区域
  • 最后把刚才创建的度量值拖到值区域,就能看到每个维度分组下的唯一员工计数了

额外注意点

  • 先检查事实表的Employee Name有没有拼写不一致的情况(比如大小写、多余空格),建议用Power Query提前清洗数据,否则DISTINCTCOUNT会把它们当成不同的员工
  • 如果维度字段(比如Project)不在事实表中,而是在其他维度表里,记得也要建立对应的表间关系,确保筛选能正确传递

内容的提问来源于stack exchange,提问作者Brian

火山引擎 最新活动