我想通过分片来表示一些连续数据。一个区域的连续权重数据应该被分选为。非常高,高,低,非常低。加权值是基于由一个区域分组的某些事件类型之间的相互作用,因此可以根据报告用户选择的类型而改变。
我在下面包含了一些样本数据和目前所做的概要。
从五组区域数据(A-E)开始。在每个数据中都有一个或多个事件类型。每个事件都有一个Weighting和它在区域内发生的次数(Count)。
添加一个计算列CC_ALL_WGT(权重*计数)。
创建一个措施。
M_WGT = DIVIDE(SUM(sample_data[CC_ALL_WGT]), SUM(sample_data[4_count]))
这就有意义了,一旦按Area分组,我们就可以看到Area得到了一个整体的Weighting Score。
这可以通过根据我们希望检查的事件类型对数据进行切片来改变。
我们也可以设置额外的措施,根据类型选择从措施中获得最小值,最大值,中值。
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]
)
)
当选择Slicer时,这些数据会发生预期的变化。
同时设置一个衡量标准来确定最小值与中位数之间的中点和最大值与中位数之间的中点。
M_MidMinMed =
sample_data[M_MED_M_WGT] - ((sample_data[M_MED_M_WGT] - sample_data[M_MIN_M_WGT]) / 2)
我想用这些值来创建一个基于以下的波段。
VeryLow: (最小值到MinMed中点)Low: (MinMed到Median)High: (Median to MedMax mid-point)VeryHigh:(MedMax to Maximum) (中位数到最大值)
所以根据以下选择
箱子的设置如下
区域A在4号地块(非常高);区域B在2号地块(低);区域C在1号地块(非常低);区域D在2号地块(低);区域E在4号地块(非常高)。
如果选择特定的类型进行审查(通过切片机),料箱将设置如下。
所以检查M_WGT(在切片机中指定类型)。
A区在4区(很高);B区在2区(低);C区在1区(很低);D区在1区(很低);E区在4区(高)。
注:D区的垃圾箱分类从低级改为极低级。
这就是我被卡住的地方。这个帖子指定了如何应用静态bin范围。https:/community.powerbi.comt5DesktopHistogram-User-defined-bin-sizem-p69854#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"
)
)
)
它允许如下:
虽然我可以将Bins与视觉效果联系起来,但有很多问题。首先,分选发生在TYPE级别而不是AREA级别。其次,我手动设置了范围值。
当我说类型级别的时候,我的意思是它们在这个级别被分选。
而我希望直方图所代表的是区域级的M_WGT值。
如果我只按A区分片,问题就比较容易看到。
我想要的是在直方图中只有一个A区的代表(1.10的分栏),而不是目前显示的三个(每个类型1.9;1;0.35)。
希望我已经成功传达了问题和要求。
感谢任何建议或见解。
EDIT:报告+数据源的链接在这里。https:/www.dropbox.comshoganwruacdzgtzmAABlggr3-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
应参与或不参与,但根据需要修改这一计数措施。