我请求你帮助一些看起来很简单的事情,但我找不到答案。 我想在卡片可视化中计算数据集中特定列上存在的不同值的数量。 此列(“供应商”)的特殊性是接受多个值,以逗号分隔。例如,考虑帖子底部的简单表格。
在这种特殊情况下,结果应该是 11。我想这样做而不必在模型中创建新表或修改当前数据集。
我尝试结合以下步骤,但没有成功: 1° 创建一个只有 1 列的表变量,用于收集供应商的不同值。 应该是:
Variable Table_Column1
54
216,549
992,97,769,1125,1127
823
96
93
2° 在新表中,为每行上的每个不同值添加新行(生成系列?) 应该是:
Variable Table_Column1
54
216
549
992
97
769
1125
1127
823
96
93
3° 计算不同的行数 不同计数(变量表_列1)= 11
我现在很困惑,我不知道如何在distinctcount中使用我的新表变量的列。
请帮忙 提前谢谢你
Supplier
54
Null
216,549
992,97,769,1125,1127
823
96
Null
823
93
最好在 Power Query 中执行此操作:
在 Power Query 中,按
,
将列拆分为新行.../
,它应该是逗号。)
然后你就会拥有它。
如果您确实需要 DAX 指标,请尝试以下操作:
Supplier count =
var tblPath =
ADDCOLUMNS(
ADDCOLUMNS(
DISTINCT('YourTable'[Supplier]),
"iPath", SUBSTITUTE( 'YourTable'[Supplier], ",", "|")
),
"iPathLength", PATHLENGTH([iPath])
)
var tblPathCum =
ADDCOLUMNS(
tblPath,
"cumLength", SUMX( FILTER(tblPath, [iPath] <= EARLIER([iPath])), [iPathLength])
)
var tblGen =
SELECTCOLUMNS(
ADDCOLUMNS(
GENERATESERIES(1, SUMX(tblPath, [iPathLength]) ),
"cum", MINX( FILTER(tblPathCum, [cumLength] >= [Value]), [cumLength] )
),
"items", MAXX( FILTER(tblPathCum, [cumLength] = [cum]), [iPath] ),
"itemNum", [cum] - [Value] + 1
)
var tblItem =
SELECTCOLUMNS(
tblGen,
"item", PATHITEM( [items], [itemNum])
)
return COUNTROWS( DISTINCT(tblItem) )
这背后的关键是利用 DAX 父函数和子函数、
PATHLENGTH
和PATHITEM
。这些使用管道分隔的字符串,因此 SUBSTITUTE
从 ,
到 |
。