通过计算表变量的不同行来创建度量

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

我请求你帮助一些看起来很简单的事情,但我找不到答案。 我想在卡片可视化中计算数据集中特定列上存在的不同值的数量。 此列(“供应商”)的特殊性是接受多个值,以逗号分隔。例如,考虑帖子底部的简单表格。

在这种特殊情况下,结果应该是 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
powerbi dax measure
1个回答
0
投票

最好在 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
,
|

© www.soinside.com 2019 - 2024. All rights reserved.