我试图通过分箱来表示一些连续数据。区域的连续权重数据应分箱为:VeryHigh、High、Low、VeryLow。权重值基于按区域分组的某些事件类型之间的交互,因此可以根据报告用户选择的类型而变化。
我在下面提供了一些示例数据以及迄今为止所做工作的概述。
从五组区域数据 (A-E) 开始。每个事件类型中都有一个或多个事件类型。每个事件都有一个权重及其在区域内发生的次数(计数)。
添加计算列CC_ALL_WGT(权重*计数)
创建度量:
M_WGT = DIVIDE(SUM(sample_data[CC_ALL_WGT]), SUM(sample_data[4_count]))
一旦按区域分组,这就有意义了,我们可以看到该区域获得了总体权重分数
这可以通过根据我们希望检查的事件类型对数据进行切片来更改:
我们还可以设置额外的措施来获取最小值;最大限度;基于类型选择的测量中值:
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)
我想用这些值做的是根据以下内容创建一个 strip :
VeryLow:(最小到 MinMed 中点) 低:(MinMed 到中位数) 高:(MedMax 中点的中位数) 非常高:(MedMax 到最大值)
因此基于以下选择
垃圾箱的设置如下
- 非常低(0.59 至 0.76)
- 低(0.76 至 0.93)
- 高(0.93 至 1.01)
- 非常高(1.01 至 1.1)
A 区位于 Bin 4(非常高); Bin 2 中的 B 区(低); Bin 1 中的 C 区(非常低); Bin 2 中的 D 区(低); Bin 4 的 E 区(非常高)
如果选择要查看的特定类型(通过切片器),则垃圾箱将设置如下:
- 非常低(0.35 至 0.61)
- 低(0.61 至 0.88)
- 高(0.88 至 1.06)
- 非常高(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"
)
)
)
允许执行以下操作:
虽然我可以将垃圾箱与视觉效果关联起来,但它有很多问题。首先,分箱发生在类型级别而不是区域级别。其次,我手动设置范围值。
当我说类型级别时,我的意思是它们在此级别被分类:
而我希望直方图表示的是区域级别的 M_WGT 值。
如果我只按区域 A 进行切片,问题就更容易看到:
我想要的是在直方图中有一个区域 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/