diff --git a/TM1py/Utils/Utils.py b/TM1py/Utils/Utils.py index 8d6aae85..47fa7177 100644 --- a/TM1py/Utils/Utils.py +++ b/TM1py/Utils/Utils.py @@ -909,6 +909,8 @@ def build_cellset_from_pandas_dataframe( def aggregate_duplicate_intersections(df, dimension_headers, value_header): + for col in dimension_headers: + df[col] = df[col].str.lower().str.replace(' ', '') return df.groupby([*dimension_headers])[value_header].sum().reset_index() diff --git a/Tests/CellService_test.py b/Tests/CellService_test.py index d12479d8..524b1cf1 100644 --- a/Tests/CellService_test.py +++ b/Tests/CellService_test.py @@ -1188,6 +1188,26 @@ def test_write_dataframe_duplicate_numeric_entries(self): self.assertEqual([6], values) + @skip_if_no_pandas + def test_write_dataframe_duplicate_case_and_space_insensitive(self): + df = pd.DataFrame({ + self.dimension_names[0]: ["element 1", "Element1", "ELEMENT 1"], + self.dimension_names[1]: ["element 1", "element 1", "element 1"], + self.dimension_names[2]: ["element 1", "element 1", "element 1"], + "Value": [1.0, 2.0, 3.0]}) + self.tm1.cells.write_dataframe(self.cube_name, df, use_blob=True) + + query = MdxBuilder.from_cube(self.cube_name) + query = query.add_hierarchy_set_to_column_axis( + MdxHierarchySet.member(Member.of(self.dimension_names[0], "element 1"))) + query = query.add_hierarchy_set_to_row_axis(MdxHierarchySet.members([ + Member.of(self.dimension_names[1], "element 1")])) + + query = query.add_member_to_where(Member.of(self.dimension_names[2], "element 1")) + values = self.tm1.cells.execute_mdx_values(query.to_mdx()) + + self.assertEqual([6], values) + @skip_if_no_pandas def test_write_dataframe_duplicate_numeric_and_string_entries(self): df = pd.DataFrame({