matrix - 计算 PowerBI 矩阵中相邻列的差异
问题描述
我每周都会为一堆机器提供一些“可用性”数字(百分比)。我的原始 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
and 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
字段中时,它根本不允许我这样做。是什么赋予了?
解决方案
在Power Query步骤下面执行此操作 -
第 1 步:复制列WW
第 2 步:使用 Fixed 2 字符拆分新列。您的 WW35 现在在WW和35两个不同的列中可用。
步骤 3:创建一个新的自定义列= (Spllitted Second Value - 1)。这基本上将返回每行的上一周数。
第4步:现在使用以下关系将表与同一个表合并-
column: **Machine** and **Previous Week**
column: **Machine** and **Week Number (Spllitted Second Value)**
Step-5展开该列并仅保留“Availability”列并将其重命名为Availability Prev Week。您将成为最终输出,如下所示 -
这是来自高级编辑器的代码供您参考-
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"
现在返回报告单击关闭并应用并创建以下 2 个措施-
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"
)
)
)
现在配置矩阵如下 -
这是最终的输出 -
您可以使用过滤器从视觉中删除红色标记线
在我的示例中,表名被视为Table (3)。相应调整。
推荐阅读
- python - 打印变量名称的函数
- elasticsearch - 如何实现对共享文档的搜索
- spring-boot - 使用 docker-compose 时获取连接拒绝
- python - 你能告诉我 Python 中的 rep() 函数吗?
- r - 2组异质性指数
- javascript - 如何从 app.post 中的按钮检索值?
- blender - 使用python将mp4文件加载到ImageSequence剪辑中
- performance - Jmeter HTML 报告是从 csv 文件(简单数据编写器)生成的,如何在 Taurus 中禁用从 kpi.jtl 文件生成报告?
- c++ - 如果您创建一个可变长度数组并使用 g++ 编译会发生什么
- java - 我应该先将客户端的流读入字符串,然后在从客户端的流中获取输入的同时解析 HTTP 还是解析 HTTP?