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

时间:2019-04-05 16:33:30

标签: formula dax powerquery

我有一个表,其中“ 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

我在尝试乔的解决方案时遇到此错误。 enter image description here

UPDATE2

Joe,我能够像这样修改您的第一部分:

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

后可以正常工作

最终解决方案如下。

=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()时不打印任何内容。当根本没有值时,我尝试按照您的逻辑进行相同的操作。我加了 IF()用于计算MyTable[Code] <> ExcludeValue是否大于0,如果为true,则进行原始计算,如果不是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()
    )

最终更新

这是按预期方式运行的最终公式。在这种情况下,要感谢乔的帮助。

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

2 个答案:

答案 0 :(得分:1)

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

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

更新3:-向公式中添加IF语句以排除0时的不重复计数。


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

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

在需要更改的情况下,我将变量用于“ 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

答案 1 :(得分:0)

使用COUNTROWS而不是CALCULATE来过滤相似项,但略有不同,以过滤表以查找唯一项。另外,我只是在学习DAX,所以不知道这是否是“正确”的方法,但似乎可行。

Cache-Control: no-cache