动态更改的Power BI中的“排名”列

时间:2019-08-05 09:51:11

标签: powerbi power-bi-report-server powerbi-custom-visuals

在Power BI Desktop中尝试使用自定义视觉创建组织结构图,要求是显示带有过滤数据的图表,该数据由 Slicer 在部门列上应用。

我遇到了自定义视觉(逻辑上)的局限性,为了在视觉上获得正确的图表,数据集必须具有一个根节点,在我的场景中,ReportsTo列应为null以标识作为根节点。

设法使用Reportstonull逻辑在SQL视图内的每个部门中创建ROW_NUMBER () OVER (PARTITION BY EmpDepartment Order by EmpGrade descCASE。但是这个已经处理过的数据,我在选择过滤器时正在寻找一些东西,这样当用户在切片器中选择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

场景:

  1. 通过多个部门进行过滤(没有可用的根节点)时,如果我使用Grade作为父节点,则会显示错误“多个根节点”:Image Link
  2. 在部门中未应用过滤器时:Image Link

自定义视觉2的相同方案:

  1. Image Link
  2. Image Link

附加说明2:
我遇到的主要问题是 Measure ,我们可以轻松获得预期的结果,但是 Calculated Column (计算列)不能给出预期的结果。
Image Link

1 个答案:

答案 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]
        )
    )