R脚本电源查询:新字符列在电源BI中读取为数字
我正在使用PowerBI创建报告,但我正在PowerQuery编辑器中的R脚本中进行数据清理,因为我无法想象如何在DAX中进行清理。出于某种原因,我创建的一个新字符列被读取为数字,类似于将因子级别读取为整数时的情况。下面是一些示例数据R脚本电源查询:新字符列在电源BI中读取为数字,r,powerbi,powerbi-desktop,R,Powerbi,Powerbi Desktop,我正在使用PowerBI创建报告,但我正在PowerQuery编辑器中的R脚本中进行数据清理,因为我无法想象如何在DAX中进行清理。出于某种原因,我创建的一个新字符列被读取为数字,类似于将因子级别读取为整数时的情况。下面是一些示例数据 +-----------+-------------------------+-----------------------------------+ | PatientId | LabTestName | LabTes
+-----------+-------------------------+-----------------------------------+
| PatientId | LabTestName | LabTestResult |
+-----------+-------------------------+-----------------------------------+
| 1 | Veritor Rapid Influenza | NEGATIVE TYPE A / NEGATIVE TYPE B |
| 1 | Veritor Rapid Strep | Cancelled |
| 1 | NA | NA |
| 2 | NA | NA |
| 3 | Veritor Rapid Strep | Negative |
| 3 | SARS CoV 2 RNA, RT PCR | NOT DETECTED |
+-----------+-------------------------+-----------------------------------+
一些示例代码:
x %>%
group_by(PatientId) %>%
mutate(
CoV_Tested = any(!is.na(LabTestName) & str_detect(LabTestName, "CoV")),
CoV_Result = ifelse(
CoV_Tested, unique(LabTestResult[!is.na(LabTestName) & str_detect(LabTestName, "CoV")]), NA
)
) %>%
distinct(PatientId, CoV_Tested, CoV_Result)
在下表中,Power BI将CoV_读取为逻辑测试(如预期),但CoV_结果读取为文本
+-----------+------------+--------------+
| PatientId | CoV_Tested | CoV_Result |
+-----------+------------+--------------+
| 1 | FALSE | <NA> |
| 2 | FALSE | <NA> |
| 3 | TRUE | NOT DETECTED |
+-----------+------------+--------------+
+-----------+------------+--------------+
|PatientId | CoV | U测试| CoV | U结果|
+-----------+------------+--------------+
|1 |假||
|2 |假||
|3 |正确|未检测到|
+-----------+------------+--------------+
值“未检测到”被读取为4。我用我的大数据集和这个较小的示例重现了这一点。我也不能告诉Power BI将数据类型更改为“text”,因为它只是将4更改为“4”(即,将数字“4”更改为文本“4”)。我可能只是能够转换Power BI中的列以用实际文本替换数字,但这是一个不需要的步骤,如果有很多唯一的值,这将是一个麻烦
任何帮助都将不胜感激!谢谢 我不知道为什么它会像这样与R交互,但在自定义列的帮助下,仅在m中这样做并不难
#"Added Custom" = Table.AddColumn(#"Previous Step",
"CoV", each if [LabTestName] <> null and Text.Contains([LabTestName], "CoV")
then [LabTestResult] else null, type text),
#"Grouped Rows" = Table.Group(#"Added Custom",
{"PatientId"},
{{"CoV_Tested", each List.MatchesAny([CoV], each _ <> null), type logical},
{"CoV_Result", each List.First(List.Select([CoV], each _ <> null)), type text}})
#“添加的自定义”=Table.AddColumn(#“上一步”,
“CoV”,如果[LabTestName]为空,则每个都包含([LabTestName],“CoV”)
然后[LabTestResult]否则为空,键入文本),
#“分组行”=表.Group(#“添加自定义”,
{“PatientId”},
{{“CoV_Tested”,每个List.MatchesAny([CoV],每个u null),输入logical},
{“CoV_Result”,每个List.First(List.Select([CoV],each{null)),键入text})
我不知道为什么它会像这样与R交互,但在自定义列的帮助下,仅在m中这样做并不难
#"Added Custom" = Table.AddColumn(#"Previous Step",
"CoV", each if [LabTestName] <> null and Text.Contains([LabTestName], "CoV")
then [LabTestResult] else null, type text),
#"Grouped Rows" = Table.Group(#"Added Custom",
{"PatientId"},
{{"CoV_Tested", each List.MatchesAny([CoV], each _ <> null), type logical},
{"CoV_Result", each List.First(List.Select([CoV], each _ <> null)), type text}})
#“添加的自定义”=Table.AddColumn(#“上一步”,
“CoV”,如果[LabTestName]为空,则每个都包含([LabTestName],“CoV”)
然后[LabTestResult]否则为空,键入文本),
#“分组行”=表.Group(#“添加自定义”,
{“PatientId”},
{{“CoV_Tested”,每个List.MatchesAny([CoV],每个u null),输入logical},
{“CoV_Result”,每个List.First(List.Select([CoV],each{null)),键入text})
所以我今天第一次听说了M,除此之外我还需要进行其他转换,所以我尝试将解决方案保留在R中。将字符列转换为整数似乎是一个巨大的疏忽(将R脚本转换为无用),所以我希望其他人以前见过。是的,如果你对R更熟悉的话,这肯定不是一个通用的解决方案,也不是一个很好的解决方案,但是查询编辑器M语言非常适合于基本的转换,而不涉及复杂的建模或统计。所以我今天第一次听说M,除此之外,我还需要进行其他转换,所以我试图将解决方案保留在R中。字符列转换为整数似乎是一个巨大的疏忽(将R脚本转换为无用),所以我希望其他人以前见过。是的,如果您对R更熟悉,那么这肯定不是一个通用的解决方案,也不是一个好方法,但是查询编辑器M语言对于不涉及奇特的建模或统计的基本转换来说是非常好的。