DAX公式显示不重复的值并计算它们

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

我有一个表,其中“CODE”列的值如下所示:

FTRA2
BRB92
RBRB4
XYZ
SXM4
RBRB4
NLDR
XYZ
FTRA2
POEU
FTRA2

我目前有这个公式

="[ Unique values " & DISTINCTCOUNT(MyTable[CODE]) & "] 
" & CONCATENATEX(DISTINCT(MyTable[CODE]), MyTable[CODE] ,", ")

输出这个:

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

我想显示所有唯一值及其计数(除了带有字符串“XYZ”的那些),下面显示了多少“XYZ”值,如下所示:

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

[2 XYZ values]

在这种情况下,有2个“XYZ”值,但也可能是零XYZ值。

我正在使用Excel 2016。

我怎样才能做到这一点?提前致谢。

UPDATE1

我得到这个错误尝试Joe的解决方案。 enter image description here

UPDATE2

乔,我能够让你的第一部分工作像这样修改:

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

但是当我添加第二部分时,它说出了这个错误

This formula is invalid or incomplete: 'Calculation error in
measure 'MyTable[Code]: The function COUNT takes an argument 
that evaluates to numbers or dates and cannot work with values 
of type String.'.   

我也删除了UNICHAR,因为它不适用于Excel。

UPDATE3

在我将COUNT(MyTable[Code])修改为COUNTROWS(MyTable)后,Joe的解决方案正常工作

最终解决方案看起来像这样。

=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
    ) & "
"   

UPDATE4

当没有“XYZ”值与IF()添加一起使用时,不打印任何内容。当没有任何值时,我试图遵循你的逻辑来做同样的事情。我添加了一个IF()来计算MyTable[Code] <> ExcludeValue是否大于0,如果为true则执行原始CALCULATE,如果不是BLANK()但不起作用。

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()
    )

最终更新

这是按预期工作的最终公式。感谢Joe在这种情况下的帮助。

=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()
    ) & "
"
formula dax powerquery
2个回答
1
投票

更新: - 根据OP的反馈,将我的公式从使用COUNT更改为COUNTROWS

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

更新3: - 将IF语句添加到公式以在0时排除非重复计数。


我会说我在Power BI中创建了这个解决方案,但Excel 2016在DAX上应该具有相同的功能(稍微调整一下)。

我使用您的公式创建了一个度量,并使用CALCULATE语句简单地包装每个部分(不同的计数和重复计数),该语句用于将MyTable过滤到您关注的代码。

在需要更改的情况下,我使用变量作为“XYZ”值。现在,您只需在一个位置(在公式的开头)更改它,公式的其余部分将反映该更改。

我还使用UNICHAR(10)添加换行符,而不是指望公式中的新行。

随着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中)。

Result


0
投票

使用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]"
© www.soinside.com 2019 - 2024. All rights reserved.