【问题标题】:Power bi box and whisker: filter with an if statementPower bi box 和胡须:使用 if 语句过滤
【发布时间】:2016-12-01 16:24:36
【问题描述】:

MWE 设置:

1)来自Power Bi视觉网站:https://app.powerbi.com/visuals/有自定义下载“Box and Whisker (Jan Pieter)”

2) 下载示例。

3) 使用 dax 公式创建新度量:

Distinct count score = if(distinctCOUNT(Courses[Score]) > 4, average(Courses[Score]), Blank())

4) 添加一个以Course为轴,以新创建的'Distinct count score'为Value的堆积柱形图,得到如下结果:

5) 将此图与 Power BI 提供的 Box and Whisker 进行比较:

这是我的问题。我只想在 Box 和 Whisker 中显示 Distinct Count of Score 大于 4 的值——所以我只想显示 Physics(如上面的堆积柱形图)。

因此,如果我尝试使用 Dax 公式处理堆积条形图的解决方案。我得到以下信息 - 没有显示:

这就是我想要发生的事情:

问题:

在 Power BI 运行和盒须图中的不同计数语句中是否有一种方法仅显示具有 > 4 个不同值(或任何 if 语句)的数据?

我希望它是基于公式的,我不能只是“视觉过滤”我不想要的项目。

可能的答案:

我想过去源代码尝试并“抛出”一个 if 语句。但我去了开发者 git 中心:https://github.com/liprec——我找不到这个视觉的 repo。

【问题讨论】:

    标签: powerbi dax


    【解决方案1】:

    基本上,这是由于箱须图的工作方式。视觉效果需要一个数据集来计算值(平均值、中位数等)并使用这些值来显示框和须。

    因此,在您的情况下,您需要创建一个与分数处于同一级别的度量(因为需要这些值)并且仅可用。有关所需措施的直观说明,请参见屏幕截图。

    我使用以下 DAX 度量创建了度量:

    Filter Score = IF(CALCULATE(DISTINCTCOUNT(Courses[Score]), ALLEXCEPT(Courses, Courses[Course]))>4, MIN(Courses[Score]), BLANK())

    IF 语句的布尔表达式通过 CALCULATE 表达式和 ALLEXCEPT 过滤器选项计算每门课程的不同分数,以忽略除课程值之外的所有内容。而TRUE部分返回需要聚合的分数,所以MINFALSE部分返回BLANK()值所以可以忽略。

    当您添加新度量并创建 BW 图表时,它只会显示“物理”课程结果。

    如果您需要更多帮助,请在此处或通过电子邮件告诉我。

    -JP

    顺便说一句:我刚刚更新了我的 PowerBI 可视化 GitHub 存储库 (https://github.com/liprec/PowerBI-custom-visuals),并在文件夹 oldAPI 中添加了我的盒须图和层次结构切片器。

    【讨论】:

    • 这成功了!在我使用的数据集中,我添加到ALLEXEMPT 以包含更多过滤器。也类似Filter Score = IF(CALCULATE(DISTINCTCOUNT(Courses[Score]), ALLEXCEPT(Courses, Courses[Course], Courses[Session]))>4, MIN(Courses[Score]), BLANK())。谢谢JP
    【解决方案2】:

    据我所知,您的问题的症结在于您希望将视觉效果过滤到具有特定数量不同值的课程。您想使用哪种视觉效果几乎无关紧要(尽管有一个示例 Power BI 工作簿可以帮助您学习)。

    我的处理方式(并不是说这是最好的或唯一的方式)

    第 1 步

    创建一个新的课程维度表,每门独特的课程各占一行。在示例工作簿中,您可以单击“输入数据”并手动输入数据。

    Course
    ------
    English
    Math
    Physics
    

    第 2 步

    接下来,在新表中创建一个计算列并计算每门课程的不同计数。这不是衡量标准 - 它是您表格中的一列,它使用您问题中的 Distinct Count 计算。

    Distinct Count = CALCULATE(DISTINCTCOUNT(Courses[Score]), SUMMARIZE('Courses','Courses'[Course])) 
    

    SUMMARIZE 的工作方式类似于 GROUP BY。本质上,就是为每门课程创建一个具有不同分数计数的行。

    第 3 步

    将此新属性用作视觉对象的过滤器。然后,您可以根据需要动态更改不同值的数量 (4, 3, 2)。

    我知道这不如在可视过滤器字段中输入公式那么好,尽管实际上它仍然是公式驱动的。该公式只是在基础表上。

    为什么这么复杂?

    您必须为 Box & Whiskers 视觉效果执行此操作,而您的“不同计数分数”测量效果如此出色的原因是,在柱形图上,您显示的是单个值(平均分数)。相比之下,Box & Whiskers 图表绘制了每个单独的分数。

    事实上,如果您从柱形图的轴中删除“课程”,则该值会随着它重新添加到您过滤掉的课程中而发生变化。 (这样做的原因是,如果您的轴上没有课程,您的公式将计算所有课程的不同计数,即 7)。同样,如果您要将柱形图过滤到特定会话,则柱形图将变为空白(因为在任何给定会话中,没有课程有超过 4 个不同的值)。

    我上面描述的技术解决了这些问题,因为它从一开始就过滤掉了数学和英语课程。如果您已过滤到单个会话,或者根本没有按课程过滤,这并不重要。只要它们的不同计数低于您指定的值,就会始终排除英语和数学。

    希望这会有所帮助。

    【讨论】:

    • 创意。这可能是可行的,但并非如此。我不能让最终用户能够清除视觉过滤器并最终显示“数学”和“英语”——这将是最坏的情况。
    • 安全是完全不同的话题。如果数据在数据模型中,则最终用户可能可以访问它,除非您添加行级安全性:powerbi.microsoft.com/en-us/documentation/powerbi-admin-rls
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-06
    • 2021-11-30
    • 2017-10-31
    • 1970-01-01
    • 2012-02-25
    • 2020-11-09
    • 2017-04-07
    相关资源
    最近更新 更多