【问题标题】:PowerBI Dynamic binning (ranges change) based on value of measure基于测量值的 PowerBI 动态分箱(范围变化)
【发布时间】:2020-08-20 18:26:57
【问题描述】:

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

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

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

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

创建一个度量:

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

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

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

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

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

进行切片器选择时预期会发生哪些变化

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

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

我想对这些值做的是根据以下内容创建一个条带:

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

所以根据下面的选择

垃圾箱的设置如下

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

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

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

  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 (VeryHigh) 中; 2号仓B区(低); Bin 1 中的 C 区(非常低); Bin 1 中的 D 区(非常低); Bin 4 中的 E 区(高)

注意 - 区域 D 的 bin 分类从低到非常低的变化

这就是我卡住的地方。这篇文章指定了如何应用静态 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"
            )
        )
    )

其中允许以下内容:

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

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

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

如果我按区域 A 切片,则问题更容易看出:

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

希望我已经设法传达了问题和要求。

感谢任何建议或见解。

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

【问题讨论】:

  • 您可以将示例数据以文本形式放置,以便于复制吗?指向 PBIX 的链接也很有用。
  • @AlexisOlson 我已经编辑了原始帖子以包含指向数据 (csv) 和报告 (.pbix) 的链接

标签: powerbi dax powerbi-desktop binning summarize


【解决方案1】:

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

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,但根据需要修改此计数度量。

【讨论】:

  • 这绝对是拥有动态垃圾箱的方法 - 非常感谢您的洞察力。我要计算的是每个区域的整体 M_WGT - 而不是每个单独的类型。因此,对于 DF (1.9)、RTC (1) 和 SLLR (0.35),区域 A 将针对 M_WGT 值 1.10 计算一次,而不是计算三次。有什么方法可以总结 CountArea 吗?像这样的东西: CountArea_ii = COUNTROWS ( FILTER (SUMMARIZE( sample_data, sample_data[1_area], "area_aggregated" ,[Range] = SELECTEDVALUE ( Ranges[Range] ) ) ) )
  • SUMX(VALUES(sample_data[1_area]), IF([Bucket] IN VALUES(Ranges[Range]), 1)) 怎么样?
  • 我认为这看起来很有效。我将继续进行一些检查,但会根据进展和对问题的一般见解接受这个答案。感谢您的时间、洞察力和帮助。如果有其他问题,我会提出一个不同的问题。
猜你喜欢
  • 1970-01-01
  • 2020-02-10
  • 2018-05-07
  • 2018-08-10
  • 2017-03-11
  • 2015-06-19
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多