在Power BI Desktop中尝试使用自定义视觉创建组织结构图,要求是显示带有过滤数据的图表,该数据由 Slicer 在部门列上应用。
我遇到了自定义视觉(逻辑上)的局限性,为了在视觉上获得正确的图表,数据集必须具有一个根节点,在我的场景中,ReportsTo
列应为null
以标识作为根节点。
设法使用Reportsto
和null
逻辑在SQL视图内的每个部门中创建ROW_NUMBER () OVER (PARTITION BY EmpDepartment Order by EmpGrade desc
列CASE
。但是这个已经处理过的数据,我在选择过滤器时正在寻找一些东西,这样当用户在切片器中选择2个部门时,自定义视觉不会崩溃。
我尝试在Power BI桌面中使用DAX来获得基于Grade
的RANK,其中包含已过滤的数据,但是 DAX 用作 Measure 而不是< strong>计算列,使用IF([RANK]=1,BLANK(), ('Table'[ReportsTo]))
注意:Power BI Desktop-“编辑查询”页面中添加了索引列
RANK =
MINX (
FILTER (
SELECTCOLUMNS (
ALLSELECTED ('Table'),
"index", 'Table'[Index],
"rank", RANKX ( ALLSELECTED ( 'Table' ), 'Table'[Grade],, DESC, DENSE )
),
[index] = MAX ( 'Table'[Index] )
),
[rank]
)
)
这是示例数据,如下表所示,当部门使用 IT (按切片器)进行过滤时,EmpID
107 将是基于{{ 1}}列。但是,当选择2个部门时,视觉效果将不起作用。
ReportsTo_2
预期结果::我的想法是获取+-----------+------------+-------+---------------+---------+--------------+
| EmpID | ReportsTo | Grade | EmpDepartment | EmpName | ReportsTo_2
+-----------+------------+-------+---------------+---------+--------------+
| 101 | 107 | A1 | IT | Emp1 | 107
| 102 | 107 | A1 | IT | Emp2 | 107
| 103 | 107 | A1 | IT | Emp3 | 107
| 104 | 108 | A2 | Proc. | Emp1 | 108
| 105 | 108 | A2 | Proc. | Emp1 | 108
| 106 | 108 | A2 | Proc. | Emp1 | 108
| 107 | 109 | B1 | IT | Mgr1 |
| 108 | 109 | B1 | Proc. | Mgr2 |
| 109 | 110 | C2 | Management | Director|
| 110 | | D9 | Sr.Management | CEO |
+-----------+------------+-------+---------------+---------+--------------+
列中的null
值,以获取过滤数据(按部门过滤)中最高的ReportsTo_2
。
感谢您的建议以实现这一目标。谢谢
注释中要求的其他说明信息
使用以下视觉效果:
Custom Visual 1
Custom Visual 2
场景:
Grade
作为父节点,则会显示错误“多个根节点”:Image Link 自定义视觉2的相同方案:
附加说明2:
我遇到的主要问题是 Measure ,我们可以轻松获得预期的结果,但是 Calculated Column (计算列)不能给出预期的结果。
Image Link
答案 0 :(得分:0)
我想我了解您的问题,下面是您需要采取的措施。但是,请注意视觉效果的限制。它们都明确需要一个起始节点。不允许多个或没有起始节点。因此,即使采取这种措施,也要选择IT和Proc。过滤器中的会导致错误,因为它为两个视觉对象提供了两个可能的起始节点。此措施将解决没有起始节点的问题,因为它将始终在ReportsTo_2中产生至少一个空白值。
在明确需要时,可以用BLANK()替换“”,我没有在视觉效果上进行测试。
ReportsTo_2 =
var _highestSelectedRank = CALCULATE( MAX ( 'Table'[Grade] ) ; ALLSELECTED( 'Table' ) )
RETURN
IF (
MAX( 'Table'[Grade] ) = _highestSelectedRank ;
"" ;
MAX ( 'Table'[ReportsTo] )
)
基于评论进行更新:或者强制度量的行为类似于计算列
ReportsTo_2 =
var _highestSelectedRank = CALCULATE( MAX ( 'Table'[Grade] ) ; ALLSELECTED( 'Table' ) )
RETURN
MAXX (
'Table' ;
IF (
'Table'[Grade] = _highestSelectedRank ;
"" ;
'Table'[ReportsTo]
)
)