You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Power BI DAX实现带唯一值计数与占比的交叉透视表

Power BI 实现指定交叉透视表的DAX方案

需求说明

基于包含id、name、date字段的原始数据表,生成行/列均为name的交叉透视表,规则如下:

  • 对角线单元格:对应name的唯一id计数
  • 非对角线单元格:同时属于行name和列name的唯一id数量,占列name总唯一id数的比例(格式如1/2(50%))
  • 支持日期切片器的用户筛选

步骤1:创建独立Name维度表

由于交叉透视表的行和列都要使用name字段,为避免上下文筛选冲突,先创建包含唯一name值的维度表:

Name维度表 = DISTINCT('原始表'[name])

关系配置:将Name维度表与原始表的name字段建立无筛选方向的关系,确保行/列的name筛选互不干扰。

步骤2:编写核心DAX度量值

创建如下度量值,实现需求中的计算逻辑:

交叉透视计算 = 
VAR 当前行名称 = SELECTEDVALUE('Name维度表'[name])
VAR 当前列名称 = SELECTEDVALUE('Name维度表'[name])
-- 获取当前行名称对应的唯一ID集合(保留日期切片器筛选)
VAR 行唯一ID集合 = CALCULATETABLE(
    DISTINCT('原始表'[id]),
    '原始表'[name] = 当前行名称,
    ALLSELECTED('原始表'[date])
)
-- 获取当前列名称对应的唯一ID集合及总数
VAR 列唯一ID集合 = CALCULATETABLE(
    DISTINCT('原始表'[id]),
    '原始表'[name] = 当前列名称,
    ALLSELECTED('原始表'[date])
)
VAR 列ID总数 = COUNTROWS(列唯一ID集合)
-- 计算行与列ID集合的交集数量
VAR 交集ID数量 = COUNTROWS(INTERSECT(行唯一ID集合, 列唯一ID集合))
RETURN
IF(
    当前行名称 = 当前列名称,
    -- 对角线场景:返回当前名称的唯一ID计数
    COUNTROWS(行唯一ID集合),
    -- 非对角线场景:计算比例并格式化输出
    IF(
        列ID总数 = 0,
        BLANK(),
        交集ID数量 & "/" & 列ID总数 & "(" & FORMAT(交集ID数量/列ID总数, "0%") & ")"
    )
)

步骤3:配置交叉透视表

  1. 将Name维度表的name字段分别拖入交叉透视表的行和列区域
  2. 将交叉透视计算度量值拖入交叉透视表的值区域
  3. 添加日期切片器,选择原始表的date字段,即可实现日期筛选功能

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 08:54:55