我每周有几台机器的一些“可用性”数字(百分比)。我的原始CSV数据如下所示:
Machine,WW,Availability
A,WW35,0.9
B,WW35,0.95
C,WW35,1
D,WW35,0.87
A,WW36,1
B,WW36,1
C,WW36,0.84
D,WW36,0.94
A,WW37,0.75
B,WW37,0.98
C,WW37,0.91
D,WW37,0.89
A,WW38,1
B,WW38,0.88
C,WW38,0.99
D,WW38,0.95
每周更新数据源,并为每台机器添加新的工作周(WW)可用性数据。如果该周的可用性> 90%,则认为该计算机为“合格”。我计算出“通过”量度,如下所示。
Pass =
VAR varCount = CALCULATE(COUNTA(data[Availability]), data[Availability] > 0.9)
RETURN
IF(varCount = BLANK(), 0, varCount)
每台机器每周的通过次数,以矩阵形式显示(如下所示):
现在,我想为每台机器的这些通过值计算一些数字。我的实际需求有点复杂,但是下面显示了我想要计算的最基本的东西。
新密码:每星期通过但上周失败的计算机总数。
新故障:每周发生故障但过去一周通过的计算机总数。
稳定:每周条件不变的总计算机数。
为了更好地说明,我将所需的结果放在Excel文件中:
在PowerBI社区论坛以及此处,都有许多类似的问题,但是在所有这些问题中,差异计算似乎指定了恒定的列名,或日期的最大值/最小值(在我的情况下为WW) 。但是我想要的是为每两个相邻的WW产生差异,并且由于我的来源每周更新一次,所以我也想显示新一周的差异。
这可能吗?
在尝试下面的@mkRabbani答案后,我正在编辑问题以提供更多详细信息。
正如我在评论中解释的那样,它不会让我像您那样创建度量。在DAX
中,它不允许我使用IF
内的列名。但是,我通过创建一些度量来解决这个问题,这些度量相当于Availability
和PrevAvailability
。
通过测量
Pass =
VAR varCount = CALCULATE(COUNTA(data[Availability]), data[Availability] > 0.9)
RETURN
IF(varCount = BLANK(), 0, varCount)
PrevPass措施
这是上周通过的计算机计数。
PrevPass =
VAR varCount = CALCULATE(COUNTA(data[PrevAvailability]), data[PrevAvailability] > 0.9)
RETURN
IF(varCount = BLANK(), 0, varCount)
通过将它们放在矩阵中,我确认这些值与预期的一样。
然后,我创建了与您的计算NewPass等的度量等效的模型。
PassFailSteadyColumn =
IF(
'data'[PrevPass] = 0,
BLANK(),
IF(
'data'[PrevPass] = 0 && 'data'[Pass] = 1,
"New Pass",
IF(
'data'[PrevPass] = 1 && 'data'[Pass] = 0,
"New Fail",
"Steady"
)
)
)
到目前为止,还不错,但是现在当我尝试将PassFailSteadyColumn
拖放到矩阵的Rows
字段中时,它简直不让我这样做。有什么作用?
答案 0 :(得分:2)
在高级查询步骤-
下执行此操作步骤1::复制列 WW
步骤2::使用固定2个字符拆分新列。现在,您的WW35在两个不同的列中可用,分别为 WW 和 35 。
第3步:创建一个新的自定义列 =(第二个值-1)。这基本上将返回每行上周号。
第4步:现在使用以下关系合并该表与同一表-
column: **Machine** and **Previous Week**
column: **Machine** and **Week Number (Spllitted Second Value)**
第5步,展开该列,仅保留“可用性”列,并将其重命名为上一周的可用性。您将成为最终输出,如下所示:
这是高级编辑器中的代码供您参考-
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("XdDBCcAgDEDRXXKW0lJTk2O1O3gQ91+jkohGT8Ij+QRLgRcc5Hxje86DoboCcSEUS9Mugc8OURDrrWcMxR3ShLblbUmNvS0FsYA2psZke92Wy9SIbY/2y0iHlpgas43R+Iv6Aw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Machine = _t, WW = _t, Availability = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Machine", type text}, {"WW", type text}, {"Availability", type number}}),
#"Duplicated Column" = Table.DuplicateColumn(#"Changed Type", "WW", "WW - Copy"),
#"Split Column by Position" = Table.SplitColumn(#"Duplicated Column", "WW - Copy", Splitter.SplitTextByPositions({0, 2}, false), {"WW - Copy.1", "WW - Copy.2"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Position",{{"WW - Copy.1", type text}, {"WW - Copy.2", Int64.Type}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type1",{{"WW - Copy.2", "week number"}}),
#"Added Custom" = Table.AddColumn(#"Renamed Columns", "prev week number", each [week number] - 1),
#"Merged Queries" = Table.NestedJoin(#"Added Custom", {"Machine", "prev week number"}, #"Added Custom", {"Machine", "week number"}, "Added Custom", JoinKind.LeftOuter),
#"Expanded Added Custom" = Table.ExpandTableColumn(#"Merged Queries", "Added Custom", {"Availability"}, {"Added Custom.Availability"}),
#"Sorted Rows" = Table.Sort(#"Expanded Added Custom",{{"Machine", Order.Ascending}, {"week number", Order.Ascending}}),
#"Renamed Columns1" = Table.RenameColumns(#"Sorted Rows",{{"Added Custom.Availability", "Availability Prev Week"}})
in
#"Renamed Columns1"
现在返回点击“关闭并应用”的报告,并根据以下两种措施创建这些措施-
total_count = count('Table (3)'[Machine])
pass fail steady column =
if(
'Table (3)'[Availability Prev Week] = BLANK(),
BLANK(),
if(
'Table (3)'[Availability Prev Week] <= .9 && 'Table (3)'[Availability] > .9,
"New Pass",
if(
'Table (3)'[Availability Prev Week] > .9 && 'Table (3)'[Availability] <= .9,
"New Fail",
"Steady"
)
)
)
现在将矩阵配置如下-
这是最终输出-
您可以使用过滤器从视觉上删除红色标记的线
在我的示例中,表名称被视为表(3)。进行相应的调整。