【问题标题】:Power BI Dashboard where the core filter condition is a disjunction on numeric fieldsPower BI 仪表板,其中核心筛选条件是数值字段的析取
【发布时间】:2019-02-08 01:17:13
【问题描述】:

我们正在尝试实现显示各种表格、指标和地图的仪表板,其中数据集是客户列表。主要过滤条件是两个数值字段的分离。我们希望用户能够为[field 1] 选择一个阈值,为[field 2] 选择一个单独的阈值,然后施加条件[field 1] >= <threshold> OR [field 2] >= <threshold>

之后,我们还希望允许各种其他交互式切片器,以便用户可以进一步限制数据,例如按国家/地区或客户经理。

Power BI 自然会在所有过滤器之间强加AND,并且没有指定OR 的简洁方法。您能否建议一种使用两个数字字段定义计算的方法,然后将其用作同一交互式仪表板屏幕中的过滤器?或者,有没有办法在显示仪表板之前首先提示用户输入两个阈值 - 因此,当他们在该参数设置屏幕上单击 Submit 时,他们会被带到主仪表板屏幕,并且已经应用​​了析取?

添加以回应评论:

数据可以非常简单:没有复杂性。复杂性在于让用户界面启用析取。

假设数据是包含客户 ID、国家/地区、性别、过去 12 个月的交易总额以及过去 12 个月的购买次数的客户列表。我希望最终用户(没有技术技能)指定总价值(例如 1,000 美元)和购买次数(例如 10 次)的最低阈值,然后将数据集限制为过去 12 个月的交易总值> 1,000 美元或过去 12 个月的购买次数 > 10。

完成此操作后,我希望允许用户在仪表板上查看数据集(例如,带有表格和图表)并从那里选择其他过滤器(例如,性别=男性,国家/地区=澳大利亚)。

【问题讨论】:

  • 能发个小数据例子吗?
  • 查看帖子中添加的更多注释
  • 到目前为止有两个有用的答案。一个解释说,当前的用户界面是不可能的,但是有一个对析取的增强请求,这将使它成为可能。另一个描述了一种通过几个额外的参数表和一个过滤器度量来实现目标的方法。谢谢你们俩。我将在分配赏金之前测试第二种方法。

标签: powerbi


【解决方案1】:

这里的关键是创建单独的参数表并使用度量组合条件。

假设我们有以下Sales 表:

Customer  Value  Number
-----------------------
A         568     2
B         2451   12
C         1352    9
D         876     6
E         993    11
F         2208   20
G         1612    4

然后我们将创建两个新表用作参数。你可以做一个计算表,如

Number = VALUES(Sales[Number])

或者更复杂的东西,比如

Value = GENERATESERIES(0, ROUNDUP(MAX(Sales[Value]),-2), ROUNDUP(MAX(Sales[Value]),-2)/10)

或者使用输入数据或其他方式手动定义表格。

无论如何,一旦你有了这些表,就可以为它们的列命名(我使用了MinNumberMinValue)并编写你的过滤度量

Filter = IF(MAX(Sales[Number]) > MIN(Number[MinCount]) ||
            MAX(Sales[Value])  > MIN('Value'[MinValue]),
            1, 0)

然后将您的Filter 度量作为视觉级别过滤器,其中Filter 不是0,并使用MinCountMinValues 列作为切片器。

如果您为 MinCount 选择 10,为 1000 选择 MinValue,那么您的表格应如下所示:

请注意,EG 仅超过其中一个阈值,AD 被排除在外。

【讨论】:

  • 我们现在已经实现了这种方法,它就像一个魅力。谢谢亚历克西斯。
【解决方案2】:

据我所知,目前 Power BI 中没有这样的内置切片器功能。但是,Power BI forum 中有一个建议,要求提供这样的功能。如果您愿意使用Power Query Editor,则很容易获得您要查找的值,但仅限于硬编码的限制或阈值。

让我向您展示如何使用符合您描述结构的合成数据集:

数据集:

CustomerID,Country,Gender,TransactionValue12,NPurchases12
51,USA,M,3516,1
58,USA,M,3308,12
57,USA,M,7360,19
54,USA,M,2052,6
51,USA,M,4889,5
57,USA,M,4746,6
50,USA,M,3803,3
58,USA,M,4113,24
57,USA,M,7421,17
58,USA,M,1774,24
50,USA,F,8984,5
52,USA,F,1436,22
52,USA,F,2137,9
58,USA,F,9933,25
50,Canada,F,7050,16
56,Canada,F,7202,5
54,Canada,F,2096,19
59,Canada,F,4639,9
58,Canada,F,5724,25
56,Canada,F,4885,5
57,Canada,F,6212,4
54,Canada,F,5016,16
55,Canada,F,7340,21
60,Canada,F,7883,6
55,Canada,M,5884,12
60,UK,M,2328,12
52,UK,M,7826,1
58,UK,M,2542,11
56,UK,M,9304,3
54,UK,M,3685,16
58,UK,M,6440,16
50,UK,M,2469,13
57,UK,M,7827,6

桌面桌:

在这里您可以看到使用两个切片器的输入表和子集表。如果论坛建议得到实施,希望将如下子集更改为"OR" 场景应该很容易:

交易价值 > 1000 或购买次数 > 10 使用 Power Query:

如果你使用Edit Queries > Advanced filter,你可以这样设置:

Applied Steps 下的最后一步将包含以下公式:

= Table.SelectRows(#"Changed Type2", each [NPurchases12] > 10 or [TransactionValue12] > 1000

现在您的原始输入表将如下所示:

现在,如果我们能够将硬编码的 10 和 1000 替换为动态值,例如来自切片器,我们就可以了!但是没有...

我知道这不是您想要的,但这是我能找到的最好的“否定答案”。我想我和你一样希望有更好的解决方案!

【讨论】:

    猜你喜欢
    • 2020-12-23
    • 1970-01-01
    • 2020-11-19
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    相关资源
    最近更新 更多