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

求DAX表达式:统计版本数大于1的文档数量

统计多版本文档的DAX正确写法

现有三个表:Folders、Documents、Versions,表结构及数据如下:

Folders表

FolderIDFolder Name
1Folder 1
2Folder 2
3Folder 3

Documents表

DocIDDoc NameFolderID
1000Doc 11
1001Doc 21
1002Doc 32
1003Doc 42
1004Doc 53

Versions表

VersionIDDocID
11000
21001
31001
41002
51003
61003
71004

需求:统计版本数大于1的文档数量,按Folder维度统计,预期结果是Folder1和Folder2各有1个符合条件的文档,Folder3没有。

你尝试的DAX表达式存在逻辑问题:

Count Docs =
VAR VersionsMin = 2
RETURN
    CALCULATE (
        COUNT ( 'Documents'[DocID] ),
        FILTER ( 'Versions', COUNT ( 'Versions'[VersionID] ) >= VersionsMin )
    )

问题分析

原表达式里,FILTER('Versions', COUNT('Versions'[VersionID]) >= VersionsMin)是对整个Versions表的版本数进行计数,不是按每个DocID分组统计单文档的版本数,所以无法精准筛选出版本数≥2的文档,自然得不到正确结果。

正确DAX写法

以下几种写法都能实现需求:

写法一:先筛选符合条件的文档再计数

Count Docs =
VAR VersionsMin = 2
VAR DocsWithMultipleVersions =
    CALCULATETABLE (
        VALUES ( Documents[DocID] ),
        GROUPBY (
            Versions,
            Versions[DocID],
            "VersionCount", COUNTX ( CURRENTGROUP (), Versions[VersionID] )
        ),
        [VersionCount] >= VersionsMin
    )
RETURN
    COUNTROWS ( INTERSECT ( VALUES ( Documents[DocID] ), DocsWithMultipleVersions ) )

写法二:逐文档判断后汇总

Count Docs =
VAR VersionsMin = 2
RETURN
    SUMX (
        VALUES ( Documents[DocID] ),
        IF ( CALCULATE ( COUNT ( Versions[VersionID] ) ) >= VersionsMin, 1, 0 )
    )

写法三:直接筛选文档后统计行数

Count Docs =
VAR VersionsMin = 2
RETURN
    COUNTROWS (
        FILTER (
            VALUES ( Documents[DocID] ),
            CALCULATE ( COUNT ( Versions[VersionID] ) ) >= VersionsMin
        )
    )

逻辑说明

这几种写法的核心都是:先按单个DocID统计对应的版本数,筛选出版本数≥2的文档,再结合当前Folder的上下文,统计这些文档的数量,最终得到按文件夹维度的正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:05:47