我有一个表,其中“ 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
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()
) & "
"
答案 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中)。
答案 1 :(得分:0)
使用COUNTROWS而不是CALCULATE来过滤相似项,但略有不同,以过滤表以查找唯一项。另外,我只是在学习DAX,所以不知道这是否是“正确”的方法,但似乎可行。
Cache-Control: no-cache