我有一个数据库,里面有脏数据。
例如,天数应该是整数,但人们填写了双精度数,如 2.3 或 5.2...
我的透视表示例数据来自此数据库。
工作流程(不可改变)是:
- 以 .csv 格式导出不同部门的数据,其中包含脏数据。
- 将所有 .csv 上传到服务器
- 使用查询将所有.csv 读入一个大的 excel,因此脏数据进入大 excel 文件。
- 使用另一个 Excel 中的数据透视表进行分析。
我需要的是让我的数据透视表自动忽略数据源中的这些脏数据。
基本上就是忽略这 2.3 天或 5.2 天。
因此,当我在数据透视表中计算总天数时,我得到的只是整数。
我无法清理数据库,因为
- 这是从在线数据收集器导出的
- 数据太多,类型混乱。Int -> double、空字段、拼写错误等。
- 幸运的是,这些类型的脏东西都有规律,因此也许我可以在它们进入数据透视表之前将它们过滤掉
4 月 21 日编辑 Power Query 看起来很有前途。我会看看的。非常感谢 SuperUser 社区和你们的反馈!
对于那些可能会问的人来说,在句子末尾输入 2 个空格,然后按 Enter 键,您将得到一个新行,而不是一个新段落。
就像这样。
答案1
您可以像这样过滤整数:
=FILTER(A1:B5, IF( ISNUMBER(B1:B5), MOD(B1:B5,1), 1) = 0)
它检查条目的类型是否为有效数字,如果是,则使用MOD()
1,因此任何整数都将返回 0。这将在测试范围内的每个单元格时返回 TRUE。如果测试失败ISNUMBER()
,则返回“1”。它是否是整数并不重要,因为它没有被测试是否为 1,只是它等于零或不等于零(当然它不等于零),因此在测试中返回 FALSEFILTER()
是在范围内执行的。
然后,您可以用它作为进一步包装它的函数的输入FILTER()
,但您必须记住,您的测试必须始终覆盖整个原始行集,尽管列可以随着每个包装函数而改变:永远不要尝试仅在当前结果的数据集上运行测试......始终覆盖首先使用的整个行集。
然后,您可能能够逐渐找出最糟糕的数据,然后随着时间的推移,逐步深入清理,并且您有时间去做这件事,或者有关于如何表征事物以进行更深入清理的想法。
答案2
我找到了解决方案!Power Query 是正确的选择!如果从数据库中提取数据时数据透视表中出现脏数据,就不要考虑如何处理数据透视表中的脏数据。直接进入数据库,在数据库中清理或排除脏数据。正确的方法始终是确保脏数据不会进入数据库,而不是在处理时找到处理脏数据的方法!