PowerBI 基于度量值的动态分箱(范围变化)

标签 powerbi dax powerbi-desktop binning summarize

我试图通过分箱来表示一些连续数据。区域的连续权重数据应分箱为:VeryHigh、High、Low、VeryLow。权重值基于按区域分组的某些事件类型之间的交互,因此可以根据报告用户选择的类型而变化。

我在下面提供了一些示例数据以及迄今为止所做工作的概述。

从五组区域数据 (A-E) 开始。每个事件类型中都有一个或多个事件类型。每个事件都有一个权重及其在区域内发生的次数(计数)。

enter image description here

添加计算列CC_ALL_WGT(权重*计数)

enter image description here

创建度量:

M_WGT = DIVIDE(SUM(sample_data[CC_ALL_WGT]), SUM(sample_data[4_count]))

一旦按区域分组,这就有意义了,我们可以看到该区域获得了总体权重分数

enter image description here

这可以通过根据我们希望检查的事件类型对数据进行切片来更改:

enter image description here

我们还可以设置额外的措施来获取最小值;最大限度;基于类型选择的测量中值:

M_MIN_M_WGT = IF(
    countrows(values(sample_data[1_area])) = 1,
    sample_data[M_WGT],
    MINX(
        values(sample_data[1_area]),
        sample_data[M_WGT]
    )
)

enter image description here

选择切片器后会发生预期的变化

enter image description here

还设置一个度量来确定最小值和中值之间的中点以及最大值和中值之间的中点

M_MidMinMed =
sample_data[M_MED_M_WGT] - ((sample_data[M_MED_M_WGT] - sample_data[M_MIN_M_WGT]) / 2)

我想用这些值做的是根据以下内容创建一个 strip :

VeryLow:(最小到 MinMed 中点) 低:(MinMed 到中位数) 高:(MedMax 中点的中位数) 非常高:(MedMax 到最大值)

因此基于以下选择

enter image description here

垃圾箱的设置如下

  1. 非常低(0.59 至 0.76)
  2. 低(0.76 至 0.93)
  3. 高(0.93 至 1.01)
  4. 非常高(1.01 至 1.1)

A 区位于 Bin 4(非常高); Bin 2 中的 B 区(低); Bin 1 中的 C 区(非常低); Bin 2 中的 D 区(低); Bin 4 的 E 区(非常高)

如果选择要查看的特定类型(通过切片器),则垃圾箱将设置如下:

enter image description here

  1. 非常低(0.35 至 0.61)
  2. 低(0.61 至 0.88)
  3. 高(0.88 至 1.06)
  4. 非常高(1.06 至 1.24)

因此检查 M_WGT(使用切片器中指定的类型):

A 区位于 Bin 4(非常高); Bin 2 中的 B 区(低); Bin 1 中的 C 区(非常低); Bin 1 中的 D 区(非常低); 4号仓E区(高)

注意 - D 区垃圾箱分类从“低”变为“非常低”

这就是我陷入困境的地方。这篇文章指定了如何应用静态 bin 范围:https://community.powerbi.com/t5/Desktop/Histogram-User-defined-bin-size/m-p/69854#M28961但我无法根据选择使用动态或变化的值(最小值、最大值、媒体、中点)来做到这一点。

我成功申请的最接近如下:

Range =
VAR temp =
    CALCULATE ( sample_data[M_WGT] )
RETURN
    IF (
        temp < 0.76,
        "1_VeryLow",
        IF (
            AND ( temp > 0.76, temp <= 0.93 ),
            "2_Low",
            IF (
                AND ( temp > 0.93, temp <= 1.01 ),
                "3_High",
                "4_VeryHigh"
            )
        )
    )

允许执行以下操作:

enter image description here

虽然我可以将垃圾箱与视觉效果关联起来,但它有很多问题。首先,分箱发生在类型级别而不是区域级别。其次,我手动设置范围值。

当我说类型级别时,我的意思是它们在此级别被分类:

enter image description here

而我希望直方图表示的是区域级别的 M_WGT 值。

如果我只按区域 A 进行切片,问题就更容易看到:

enter image description here

我想要的是在直方图中有一个区域 A 的表示(1.10 的箱),而不是当前显示的三个(对于每个类型 1.9; 1; 0.35)

希望我已经成功传达了问题和要求。

感谢任何建议或见解。

编辑: 报告+数据源链接位于:https://www.dropbox.com/sh/oganwruacdzgtzm/AABlggr3-xqdMvPjuR9EyrMaa?dl=0

最佳答案

您可以在单个度量中为某个区域定义存储桶:

Bucket = 
VAR Weights =
    SUMMARIZE ( ALLSELECTED ( sample_data ), sample_data[1_area], "Wgt", [M_WGT] )
VAR MinW = MINX ( Weights, [Wgt] )
VAR MaxW = MAXX ( Weights, [Wgt] )
VAR MedW = MEDIANX ( Weights, [Wgt] )
VAR MinMedW = ( MinW + MedW ) / 2
VAR MedMaxW = ( MedW + MaxW ) / 2
VAR CurrW = CALCULATE( [M_WGT], ALLSELECTED( sample_data[2_type] ) )
RETURN
    SWITCH (
        TRUE (),
        CurrW <= MinMedW, "1_VeryLow",
        CurrW <= MedW,    "2_Low",
        CurrW <= MedMaxW, "3_High",
        CurrW <= MaxW,    "4_VeryHigh"
    )

这会总结过滤器选择 (ALLSELECTED) 中所有内容的权重,然后根据您的指定定义边界。然后,我们计算所有选定类型的当前区域的权重,并将其传递到开关,在开关中我们从低到高检查值。


现在您不能使用度量作为图表的轴,因此如果您希望这些桶位于轴上,我建议定义一个独立的表格。

Ranges =
DATATABLE (
    "Range", STRING,
    {
        { "1_VeryLow" },
        { "2_Low" },
        { "3_High" },
        { "4_VeryHigh" }
    }
)

Ranges[Range] 放在轴上并根据需要定义计数度量。

CountArea =
COUNTROWS ( FILTER ( sample_data, [Range] = SELECTEDVALUE ( Ranges[Range] ) ) )

我真的不知道您要计算什么,它是否应该是一个不同的计数,或者是否应该涉及4_count,但请根据需要修改此计数措施。

关于PowerBI 基于度量值的动态分箱(范围变化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61624237/

相关文章:

azure - 如何在突触分析工作区的日志分析工作区中获取错误详细信息日志

mysql - 使用 Mysql 或 PowerBI 和 3 个表(数据集),如何将工作日添加到销售日期?

powerbi - 显示所有值的切片器 - Power BI Desktop

java - 如何将 Power BI 嵌入到基于 Spring 的项目中?

powerbi - 在带有日期的 Power BI 中使用 switch true

list - Power BI - 用于引用值列表的 DAX 度量。计算每个经纪人的净营业额 - 更优雅的解决方案?

powerbi - Power Bi 中的交通灯也适用于总计

dax - 2个DAX问题(根据同一张表和另一张表的条件从一个表中添加行)

powerbi - 查询中无法识别电源双开关

mysql - 将 Power BI 桌面从虚拟机连接到 Ubuntu