DAX 公式显示不重复的值并计算它们
DAX formula to show not repeated values and count them
我有一个 table,其中 "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.
我该怎么做?提前致谢。
更新1
我在尝试 Joe 的解决方案时遇到了这个错误。
更新2
乔,我能够像这样修改你的第一部分:
= 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 上不起作用。
更新3
Joe 的解决方案在我将 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,如果为真则执行原始计算,如果不是 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()
) & "
"
更新: - 根据 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 中)。
使用 COUNTROWS 而不是 CALCULATE 来过滤唯一项的 table,想出了一些相似但略有不同的东西。另外,我刚刚开始学习 DAX,所以不知道这是否是一种 "proper" 的方法,但它似乎有效。
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]"
我有一个 table,其中 "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.
我该怎么做?提前致谢。
更新1
我在尝试 Joe 的解决方案时遇到了这个错误。
更新2
乔,我能够像这样修改你的第一部分:
= 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 上不起作用。
更新3
Joe 的解决方案在我将 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,如果为真则执行原始计算,如果不是 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()
) & "
"
更新: - 根据 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 中)。
使用 COUNTROWS 而不是 CALCULATE 来过滤唯一项的 table,想出了一些相似但略有不同的东西。另外,我刚刚开始学习 DAX,所以不知道这是否是一种 "proper" 的方法,但它似乎有效。
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]"