Power BI 动态图例

Posted

技术标签:

【中文标题】Power BI 动态图例【英文标题】:Power BI Dynamic Legend 【发布时间】:2019-02-24 23:28:36 【问题描述】:

我正在处理地理层次结构。我希望我的折线图或带状图上的图例根据切片器选择显示下一个最低的相关细节级别。

目标: 没有切片器选择会产生区域图表(东南、东北等线)。从 Slicer 中选择“Northeast”区域会生成州图(缅因州、新罕布什尔州等线)。从 Slicer 中选择“缅因州”会生成县图,依此类推。

我可以在卡片中使用 HASONEVALUE 和 VALUES 的组合来执行此操作,以获得动态的单个值。但是,Ribbon 或 Line Charts 的 Legend 字段不会接受这样的度量。

是否有任何方法可以根据切片器选择创建具有动态图例的 Power BI 折线图或带状图?

我宁愿不为所有层次结构节点创建单独的度量,因为可能有数千个叶子。

【问题讨论】:

【参考方案1】:

假设我有一些美国最大的 20 个县的人口数据如下:

Data = DATATABLE(
       "Rank", INTEGER, "Region", STRING, "County", STRING, "State", STRING,
       "2010", INTEGER, "2012", INTEGER, "2014", INTEGER,
       1,"West","Los Angeles","California",9818605,9826773,9826773,
        2,"Midwest","Cook","Illinois",5194675,5199971,5199971,
        3,"South","Harris","Texas",4092459,4109362,4109362,
        4,"South","Maricopa","Arizona",3817117,3824834,3824834,
        5,"West","San Diego","California",3095313,3105115,3105115,
        6,"West","Orange","California",3010232,3017598,3017598,
        7,"South","Miami-Dade","Florida",2496435,2503034,2503034,
        8,"Northeast","Kings","New York",2504700,2508515,2508515,
        9,"South","Dallas","Texas",2368139,2375207,2375207,
        10,"Northeast","Queens","New York",2230722,2233895,2233895,
        11,"West","Riverside","California",2189641,2202978,2202978,
        12,"West","San Bernardino","California",2035210,2042027,2042027,
        13,"West","King","Washington",1931249,1937157,1937157,
        14,"West","Clark","Nevada",1951269,1953927,1953927,
        15,"South","Tarrant","Texas",1809034,1816850,1816850,
        16,"West","Santa Clara","California",1781642,1786267,1786267,
        17,"South","Broward","Florida",1748066,1752122,1752122,
        18,"South","Bexar","Texas",1714773,1723561,1723561,
        19,"Midwest","Wayne","Michigan",1820584,1815246,1815246,
        20,"Northeast","New York","New York",1585873,1587481,1587481
       )

在查询编辑器中使用此数据作为源,我们将生成两个表。第一个将是Fact 表,该表不透视年份,前三个县看起来像这样:

第二个将是一个Bridge 表,它只是一个唯一RegionStateCounty 组合的列表:

我们将使用 DAX 创建一个决赛桌。这将是我们的Legend 表。

Legend = UNION(SUMMARIZECOLUMNS(Fact[Region], Fact[Rank], "Level", 1),
             SUMMARIZECOLUMNS(Fact[State], Fact[Rank],  "Level", 2),
             SUMMARIZECOLUMNS(Fact[County], Fact[Rank],  "Level", 3)
             )

确保在Rank 列上设置了关系,以便您的关系图如下所示:

现在我们将编写一个度量来利用我们刚刚在Legend 表中创建的这些级别。

Measure = 
    VAR StateCount = CALCULATE(DISTINCTCOUNT(Bridge[State]),
                         ALLSELECTED(Bridge), ALLSELECTED(Legend))
    VAR RegionCount = CALCULATE(DISTINCTCOUNT(Bridge[Region]),
                          ALLSELECTED(Bridge), ALLSELECTED(Legend))
    VAR LevelNumber = SWITCH(TRUE(), StateCount = 1, 3, RegionCount = 1, 2, 1)
    RETURN CALCULATE(SUM(Fact[Population]), Legend[Level] = LevelNumber)

基本上,我们只想显示适当级别的人口。

在带有Legend[Region] 在图例框中和Fact[Year] 在轴上的折线图上使用此度量,当切片器留空时,结果如下所示:

当我们选择一个区域然后选择一个状态时,我们会得到以下信息:


这是我为此创建的 PBIX 文件的链接:Variable Legend.pbix

【讨论】:

我在编辑通过 Datatable DAX 命令添加的新表时遇到问题。查询编辑器似乎只想编辑实时连接数据。 是的,DAX 计算表不会传回查询编辑器。不过,您可以通过 Enter Data 将其复制并粘贴到表格中。 如果有人试图重新创建它,应该注意必须从 Bridge[Region] 或 Bridge[State] 创建 Report Slicers。 Fact[Region] 上的切片器不会产生预期的效果。对于具有区域中层管理人员的销售组织来说,这是一个非常好的解决方案。 另外,请注意,当您尝试取消透视数据表以创建事实表时,您将收到与破坏主键相关的错误消息。请参阅此帖子以获取解决方案 - community.powerbi.com/t5/Desktop/change-primary-key-power-bi/… 另请注意,这不适用于多选切片器。 @AlexisOlson,如果我错了,请纠正我。

以上是关于Power BI 动态图例的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Power BI 中动态获取列名?

power bi怎么放到ppt啊??怎么样才能在ppt中展示power bi的动态图表?求教程

Power BI 中动态变化的排名列

power bi如何抓取连续的分秒

数据可视化之powerBI基础(十九)学会使用Power BI的参数,轻松搞定动态分析

如何将颜色饱和度分布的图例添加到 power bi 填充地图图表中