首页 > 解决方案 > power bi DAX 分层表名称串联

问题描述

因为两天我遇到了一个问题,我无法解决,所以我来这里寻求帮助......我有一点 dax 基本上采用分层表(整数)的路径并采用字符串名称路径中的第一个。

我使用的名称:

DisplayPath =
    var __Path =PATH(ParentChild[id], ParentChild[parent_id])
    var __P1 = PATHITEM(__Path,1) var __P2 = PATHITEM(__Path,2)
    var l1 = LOOKUPVALUE(ParentChild[Place],ParentChild[id],VALUE(__P1))
    var l2a = LOOKUPVALUE(ParentChild[Place],ParentChild[id],VALUE(__P2))
    var l2 = if(ISBLANK(l2a), "", " -> " & l2a) 
return CONCATENATE(l1,l2)

我的问题是......我不知道路径中的索引数量,可以从 0 到我猜的 15......我尝试了一些东西,但无法找到解决方案。首先,我添加了一个名为 nbrItems 的新列,它计算路径列表中的项目数。

两列:

两列:

然后我根据路径列表中的项目数添加了模拟for循环的那段代码,我想在其中

  1. 获取参数名称
  2. 将它们连接成一个字符串,我可以返回并获取
string = 
    var n = 'HIERARCHY'[nbrItems]
    var mytable = GENERATESERIES(1, n)
    var addedcolumn1 = ADDCOLUMNS(mytable, "nom", /* missing part: get name */)
    var addedcolumn2 = ADDCOLUMNS(addedcolumn1, "string", /* missing part: concatenate previous concatenated and new name */)
    var mymax = MAXX(addedcolumn2, [Value])
RETURN MAXX(FILTER(addedcolumn2, [Value] = mymax), [string])

全表:

满桌

提前感谢您的帮助!

标签: powerbidaxhierarchical

解决方案


好的,所以经过一些研究和大量尝试和错误......我想出了一个很好且简单的解决方案:最初的问题是我有一个分层表,但所有数据都在同一个表中。

像这样

我所做的是,用这个 dax 添加一个新的“父”列:

parent = 
    var a = 'HIERARCHY'[id_parent]
    var b = CALCULATE(MIN('HIERARCHY'[libelle]), FILTER(ALL('HIERARCHY'), 'HIERARCHY'[id_h] = a))
RETURN b

这从 id_parent (参考屏幕)获取父名称。

然后我可以只使用路径函数,而不是在 id 上,而是在名称上......就像这样:

path = PATH('HIERARCHY'[libelle], 'HIERARCHY'[parent])

它使问题变得简单,因为我不需要在此之后用那里的名称替换 id ......

最后为了让它看起来不错,我使用了一些替换来移除管道:

formated_path = SUBSTITUTE('HIERARCHY'[path], "|", " -> ")

最后结果


推荐阅读