Formula DAX公式以显示不重复的值并对其进行计数

Formula DAX公式以显示不重复的值并对其进行计数,formula,dax,powerquery,Formula,Dax,Powerquery,我有一个表,其中列代码的值如下: FTRA2 BRB92 RBRB4 XYZ SXM4 RBRB4 NLDR XYZ FTRA2 POEU FTRA2 [ Unique values 6 ] FTRA2, BRB92, RBRB4, SXM4, NLDR, POEU [2 XYZ values] = VAR ExcludeValue = "XYZ" RETURN CALCULATE( "[ Unique values " & DISTINCTCOUNT(My

我有一个表,其中列代码的值如下:

FTRA2
BRB92
RBRB4
XYZ
SXM4
RBRB4
NLDR
XYZ
FTRA2
POEU
FTRA2
[ Unique values 6 ]
FTRA2, BRB92, RBRB4, SXM4, NLDR, POEU

[2 XYZ values]
= VAR ExcludeValue = "XYZ"
RETURN
    CALCULATE(
        "[ Unique values " & DISTINCTCOUNT(MyTable[Code]) & " ]"
        " & CONCATENATEX(DISTINCT(MyTable[Code]), [Code], ", ")
        , MyTable[Code] <> ExcludeValue
    )
我现在有这个公式

="[ Unique values " & DISTINCTCOUNT(MyTable[CODE]) & "] 
" & CONCATENATEX(DISTINCT(MyTable[CODE]), MyTable[CODE] ,", ")
其结果如下:

[ Unique values 7 ]
FTRA2, BRB92, RBRB4, XYZ, SXM4, NLDR, POEU
我想显示所有唯一值及其计数,除了带有字符串XYZ的值,下面显示XYZ值的数量,如下所示:

FTRA2
BRB92
RBRB4
XYZ
SXM4
RBRB4
NLDR
XYZ
FTRA2
POEU
FTRA2
[ Unique values 6 ]
FTRA2, BRB92, RBRB4, SXM4, NLDR, POEU

[2 XYZ values]
= VAR ExcludeValue = "XYZ"
RETURN
    CALCULATE(
        "[ Unique values " & DISTINCTCOUNT(MyTable[Code]) & " ]"
        " & CONCATENATEX(DISTINCT(MyTable[Code]), [Code], ", ")
        , MyTable[Code] <> ExcludeValue
    )
在这种情况下,有2个XYZ值,但也可以是零XYZ值

我正在使用Excel 2016

我该怎么做?提前谢谢

更新1

我在尝试乔的解决方案时发现了这个错误。

更新2

乔,我可以让你的第一部分修改如下:

FTRA2
BRB92
RBRB4
XYZ
SXM4
RBRB4
NLDR
XYZ
FTRA2
POEU
FTRA2
[ Unique values 6 ]
FTRA2, BRB92, RBRB4, SXM4, NLDR, POEU

[2 XYZ values]
= VAR ExcludeValue = "XYZ"
RETURN
    CALCULATE(
        "[ Unique values " & DISTINCTCOUNT(MyTable[Code]) & " ]"
        " & CONCATENATEX(DISTINCT(MyTable[Code]), [Code], ", ")
        , MyTable[Code] <> ExcludeValue
    )
我还删除了UNICHAR,因为它不适用于Excel

更新3

Joe的解决方案在我将COUNTMyTable[代码]修改为COUNTROWSMyTable后,它可以正常工作

最终的解决方案是这样的

=VAR ExcludeValue = "XYZ"
RETURN
    CALCULATE(
        "
        [ Unique values " & DISTINCTCOUNT(MyTable[Code]) & " ]
        " & CONCATENATEX(DISTINCT(MyTable[Code]), [Code], ", ")
        , MyTable[Code] <> ExcludeValue
    )  & "

" & CALCULATE(
        "[" & COUNTROWS(MyTable) & " " & ExcludeValue & " values]"
        , MyTable[Code] = ExcludeValue
    ) & "
"   
更新4

当没有XYZ值时,不打印任何内容可用于IF加法。我试着按照你的逻辑,在根本没有价值观的情况下也这样做。我加了一个 如果要计算MyTable[Code]ExcludeValue是否大于0,如果为true,则执行原始计算,如果不是空白但不起作用

CountLabel = 
VAR ExcludeValue = "XYZ"
RETURN
IF(
    CALCULATE(COUNTROWS(MyTable), MyTable[Code] <> ExcludeValue) > 0, 
    CALCULATE(
        "[ Unique values " & DISTINCTCOUNT(MyTable[Code]) & " ]"
        & UNICHAR(10) & 
        CONCATENATEX(DISTINCT(MyTable[Code]), [Code], ", ")
        , MyTable[Code] <> ExcludeValue
    ),
    BLANK()
    )
    & IF(
        CALCULATE(COUNTROWS(MyTable), MyTable[Code] = ExcludeValue) > 0,
        UNICHAR(10) & " " & UNICHAR(10) & 
        CALCULATE(
            "[" & COUNTROWS(MyTable) & " " & ExcludeValue & " values]"
            , MyTable[Code] = ExcludeValue
        ),
        BLANK()
    )
最后更新

这是最终的公式,正如预期的那样。多亏乔在这件事上的帮助

=VAR ExcludeValue = "XYZ"
RETURN
    IF(
        CALCULATE(DISTINCTCOUNT(MyTable[Code]), MyTable[Code] <> ExcludeValue) > 0 && 
        MyTable[Count of Code]>0,
        CALCULATE(
            "
            [ Unique values " & DISTINCTCOUNT(MyTable[Code]) & " ]
            " & CONCATENATEX(DISTINCT(MyTable[Code]), [Code], ", ")
            , MyTable[Code] <> ExcludeValue
        ),
        BLANK()
    )
    &
    IF(
        CALCULATE(DISTINCTCOUNT(MyTable[Code]), MyTable[Code] <> ExcludeValue) > 0 &&
            CALCULATE(COUNTROWS(MyTable), MyTable[Code] = ExcludeValue) > 0,
        " 

        " &
        BLANK()
    )
    & IF(
        CALCULATE(COUNTROWS(MyTable), MyTable[Code] = ExcludeValue) > 0,
        CALCULATE(
            "[" & COUNTROWS(MyTable) & " " & ExcludeValue & " values]"
            , MyTable[Code] = ExcludeValue
        ),
        BLANK()
    ) & "
"
更新:-根据OP的反馈将我的公式从使用COUNT改为COUNTROWS

更新2:-将IF语句添加到公式中,以排除0时排除的计数

更新3:-将IF语句添加到公式中,以排除0时的不同计数

我要说的是,我在Power BI中创建了此解决方案,但Excel 2016在DAX方面应该具有相同的功能,只需稍加调整

我用您的公式创建了一个度量值,并简单地将每一部分都包装为不同的计数,并使用一条语句将重复计数与MyTable过滤到您关心的代码

我使用了一个变量作为XYZ值,以防需要更改。现在,您只需在公式开头的一个位置对其进行更改,公式的其余部分将反映该更改

我还使用UNICHAR10添加换行符,而不是计算公式中的新行

使用IF语句

第一个将检查不等于指定值的项目的不同计数是否大于零。如果没有,它不会显示任何内容。 第二个将检查指定值的不同计数和行计数是否都大于零。如果是,则会添加换行符。 第三个将检查等于指定值的项目行计数是否大于零。如果没有,它不会显示任何内容。 最后的公式是:

CountLabel = 
VAR ExcludeValue = "XYZ"
RETURN
    IF(
        CALCULATE(DISTINCTCOUNT(MyTable[Code]), MyTable[Code] <> ExcludeValue) > 0,
        CALCULATE(
            "[ Unique values " & DISTINCTCOUNT(MyTable[Code]) & " ]"
            & UNICHAR(10) & 
            CONCATENATEX(DISTINCT(MyTable[Code]), [Code], ", ")
            , MyTable[Code] <> ExcludeValue
        ),
        BLANK()
    )
    &
    IF(
        CALCULATE(DISTINCTCOUNT(MyTable[Code]), MyTable[Code] <> ExcludeValue) > 0 &&
            CALCULATE(COUNTROWS(MyTable), MyTable[Code] = ExcludeValue) > 0,
        UNICHAR(10) & " " & UNICHAR(10),
        BLANK()
    )
    & IF(
        CALCULATE(COUNTROWS(MyTable), MyTable[Code] = ExcludeValue) > 0,
        CALCULATE(
            "[" & COUNTROWS(MyTable) & " " & ExcludeValue & " values]"
            , MyTable[Code] = ExcludeValue
        ),
        BLANK()
    )
下面是在Power BI中的结果


使用COUNTROWS而不是CALCULATE来筛选表中的唯一项,得到了一些类似但略有不同的结果。另外,我只是在学习DAX,所以不知道这是否是一个正确的方法,但它似乎工作

Measure = 
VAR Exclusion = "XYZ"
RETURN
"[ Unique values " & COUNTROWS(FILTER(DISTINCT(MyTable[CODE]), [CODE] <> Exclusion)) & "] 
" & CONCATENATEX(FILTER(DISTINCT(MyTable[CODE]), [CODE] <> Exclusion), [CODE] ,", ") &
"

[" & COUNTROWS(FILTER(MyTable, MyTable[CODE] = Exclusion))+0 & " " & Exclusion & " values]"

@GerCas我今天晚些时候可以测试,但我想你需要删除我公式中的CountLabel部分。在PBI中,这是定义度量值的名称,看起来您在另一个框中设置了它。@GerCas我已根据您的第二次更新更新了我的答案。您应该能够用COUNTROWS替换COUNT。如果收到COUNTROWS的任何错误,请尝试删除参数的[Code]部分,即将其保留为COUNTROWSMyTable。@GerCas我已更新了答案中的公式,使其包含一条If语句,该语句仅在行数大于0时显示第二部分。我已添加了&&MyTable[Count of Code]>0,在有任何值的情况下,如果自出现1,则为第一个。此外,我还删除了UNICHAR,因为它在Excel中不受支持。非常感谢你的帮助。谢谢你的帮助。您的公式似乎正确计算了XYZ值,但没有打印与XYZ不同的唯一值。例如,如果只有5个唯一值,则显示23。我修改了原始帖子中的输入,有2个RB4和3个FTRA2值,但输出应该是相同的。6个唯一值和2个XYZ不确定,即使使用更新的示例值,它也对我有效。我确实改变了Filter+Distinct的用法,使之保持一致,但它仍然有效,但我不知道这是功能性的改变还是语义上的改变。我也在使用Power BI而不是Excel,所以不能说这是否是一个因素。Power BI和Excel之间可能有一些区别。因为Joe的解决方案在UNICHAR的Excel中不被接受。再次感谢你的帮助