Skip to content

Commit 99fb5f6

Browse files
furmangg_cpfurmangg_cp
authored andcommitted
fix for work item 43619 parent child dimension naturalizer issue with syntax in creating view
1 parent 748529c commit 99fb5f6

1 file changed

Lines changed: 24 additions & 14 deletions

File tree

SSAS/PCDimNaturalizer/PCDimNaturalizer.cs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ private void CreateNaturalizedView()
119119

120120
foreach (string attr in SQLColsAsNonPCAttributes)
121121
strQry += attr + ", ";
122-
strQry = strQry.Remove(strQry.Length - 2) + "\r\nfrom " + table + ") CurrentMemberSubselect on CurrentMemberSubselect.CurrentMemberID = a.CurrentMemberID\r\n";
122+
strQry = ASPCDimNaturalizer.RemoveLastComma(strQry) + "\r\nfrom " + table + ") CurrentMemberSubselect on CurrentMemberSubselect.CurrentMemberID = a.CurrentMemberID\r\n";
123123

124124
for (int i = 2; i <= MinimumLevelCount + 1; i++)
125125
{
@@ -135,14 +135,14 @@ private void CreateNaturalizedView()
135135
strQry += "left outer join (select " + id + " " + LevelName + ",\r\n";
136136
foreach (string attr in SQLColsASPCAttributes)
137137
strQry += "[" + attr + "] [" + LevelName + "_" + attr + "],\r\n";
138-
strQry = strQry.Remove(strQry.Length - 3) + "\r\nfrom " + table + ") " + LevelName + "Subselect on " + LevelName + "Subselect." + LevelName + " = a." + LevelName + "\r\n";
138+
strQry = ASPCDimNaturalizer.RemoveLastComma(strQry) + "\r\nfrom " + table + ") " + LevelName + "Subselect on " + LevelName + "Subselect." + LevelName + " = a." + LevelName + "\r\n";
139139
}
140140

141-
CTESel = CTESel.Remove(CTESel.Length - 2) + ")\r\n";
142-
CTEQry = CTEQry.Remove(CTEQry.Length - 3) + "\r\n";
143-
strCTELevelEnumeration = strCTELevelEnumeration.Remove(strCTELevelEnumeration.Length - 3) + " FROM " + table + " e " +
141+
CTESel = ASPCDimNaturalizer.RemoveLastComma(CTESel) + ")\r\n";
142+
CTEQry = ASPCDimNaturalizer.RemoveLastComma(CTEQry) + "\r\n";
143+
strCTELevelEnumeration = ASPCDimNaturalizer.RemoveLastComma(strCTELevelEnumeration) + " FROM " + table + " e " +
144144
"INNER JOIN PCStructure d ON e." + pid + " = d.CurrentMemberID)\r\n";
145-
strQry = CTESel + CTEQry + strCTELevelEnumeration + strSel.Remove(strSel.Length - 2) + "\r\n" + strQry;
145+
strQry = CTESel + CTEQry + strCTELevelEnumeration + ASPCDimNaturalizer.RemoveLastComma(strSel) + "\r\n" + strQry;
146146
cmd.CommandText = strQry;
147147
cmd.ExecuteNonQuery();
148148

@@ -897,7 +897,7 @@ private string GetSingleColumnNameAndExpressionForView(DataItem attr, string Col
897897

898898
private string GetNonPCUserHierarchyColumnNamesFromOriginalDimension()
899899
{
900-
string strSubselect = " CurrentMemberSubselect.* from " + id.TableName + " b,\r\n(select " + id.ColumnName + " [" + dim.KeyAttribute.Name + "_KeyColumn], ";
900+
string strSubselect = " CurrentMemberSubselect.* from " + id.TableName + " b,\r\n(select " + id.ColumnName + " [" + dim.KeyAttribute.Name + "_KeyColumn],\r\n";
901901
string strColAlias = "";
902902

903903
if (dim.KeyAttribute.NameColumn != null && ColNameFromDataItem(dim.KeyAttribute.KeyColumns[0]) != ColNameFromDataItem(dim.KeyAttribute.NameColumn))
@@ -922,7 +922,17 @@ private string GetNonPCUserHierarchyColumnNamesFromOriginalDimension()
922922
strSubselect += strCurCol.Replace(", -- End of column definition\r\n", "") + ",\r\n";
923923
}
924924

925-
return strSubselect.Remove(strSubselect.Length - 3) + "\r\nfrom " + id.TableName + " b)\r\nCurrentMemberSubselect\r\n";
925+
return RemoveLastComma(strSubselect) + "\r\nfrom " + id.TableName + " b)\r\nCurrentMemberSubselect\r\n";
926+
}
927+
928+
public static string RemoveLastComma(string str)
929+
{
930+
if (str.EndsWith(",\r\n"))
931+
return str.Remove(str.Length - 3);
932+
else if (str.EndsWith(", "))
933+
return str.Remove(str.Length - 2);
934+
else
935+
return str;
926936
}
927937

928938
private void CreateNaturalizedView()
@@ -958,7 +968,7 @@ private void CreateNaturalizedView()
958968
strCTELevelEnumeration += "WHEN " + j.ToString() + " THEN e." + id.ColumnName + "\r\n";
959969
}
960970
strCTELevelEnumeration += "WHEN " + i.ToString() + " THEN e." + id.ColumnName + " ELSE [" + LevelName + "_KeyColumn]\r\nEND\r\nAS [" + LevelName + "_KeyColumn],\r\n";
961-
strQry += "(select " + id.ColumnName + " [" + LevelName + "_KeyColumn], ";
971+
strQry += "(select " + id.ColumnName + " [" + LevelName + "_KeyColumn],\r\n";
962972

963973

964974
if (PCParentAttribute().UnaryOperatorColumn != null)
@@ -1014,20 +1024,20 @@ private void CreateNaturalizedView()
10141024
}
10151025

10161026
if (i > 2)
1017-
strQry = strQry.Remove(strQry.Length - 3) + "\r\n, Level" + (i - 1).ToString() + "Subselect.*\r\nfrom " + id.TableName + " b,\r\n";
1027+
strQry = RemoveLastComma(strQry) + "\r\n, Level" + (i - 1).ToString() + "Subselect.*\r\nfrom " + id.TableName + " b,\r\n";
10181028
strSelEnd = ") Level" + i.ToString() + "Subselect\r\n" + strSelEnd;
10191029
strWhere += "Level" + (MinimumLevelCount + 1).ToString() + "Subselect.[" + LevelName + "_KeyColumn] = a.[" + LevelName + "_KeyColumn] and\r\n";
10201030
strLevelsEnumerations = strCTELevelEnumeration + strLevelsEnumerations;
10211031
}
10221032

10231033
CTESel = "CREATE VIEW " + txtNewView + " AS\r\n" +
1024-
"WITH PCStructure(Level, " + pid.ColumnName + ", [" + dim.KeyAttribute.Name + "_KeyColumn], [" + GetNaturalizedLevelName(2) + "_KeyColumn]" + ((CTESel.Length > 0) ? ", " + CTESel.Remove(CTESel.Length - 2) : "") + ")\r\n";
1025-
CTEQry = "AS (SELECT 3 Level, " + pid.ColumnName + ", " + id.ColumnName + ",\r\n" + id.ColumnName + " as [" + GetNaturalizedLevelName(2) + "_KeyColumn]" + (CTEQry.Length > 0 ? ", \r\n" + CTEQry.Remove(CTEQry.Length - 3) : "") + "\r\n";
1034+
"WITH PCStructure(Level, " + pid.ColumnName + ", [" + dim.KeyAttribute.Name + "_KeyColumn], [" + GetNaturalizedLevelName(2) + "_KeyColumn]" + ((CTESel.Length > 0) ? ", " + RemoveLastComma(CTESel) : "") + ")\r\n";
1035+
CTEQry = "AS (SELECT 3 Level, " + pid.ColumnName + ", " + id.ColumnName + ",\r\n" + id.ColumnName + " as [" + GetNaturalizedLevelName(2) + "_KeyColumn]" + (CTEQry.Length > 0 ? ", \r\n" + RemoveLastComma(CTEQry) : "") + "\r\n";
10261036
strWhere += "Level" + (MinimumLevelCount + 1).ToString() + "Subselect.[" + dim.KeyAttribute.Name + "_KeyColumn] = a.[" + dim.KeyAttribute.Name + "_KeyColumn]";
10271037
strLevelsEnumerations = "FROM " + id.TableName + " WHERE " + pid.ColumnName + " IS NULL OR " + pid.ColumnName + " = " + id.ColumnName + " " +
1028-
"UNION ALL SELECT Level + 1, e." + pid.ColumnName + ", e." + id.ColumnName + ",\r\n" + strLevelsEnumerations.Remove(strLevelsEnumerations.Length - 3) + " FROM " + id.TableName + " e " +
1038+
"UNION ALL SELECT Level + 1, e." + pid.ColumnName + ", e." + id.ColumnName + ",\r\n" + RemoveLastComma(strLevelsEnumerations) + " FROM " + id.TableName + " e " +
10291039
"INNER JOIN PCStructure d ON e." + pid.ColumnName + " = d.[" + dim.KeyAttribute.Name + "_KeyColumn] AND e." + pid.ColumnName + " != e." + id.ColumnName + ")\r\n";
1030-
strQry = CTESel + CTEQry + strLevelsEnumerations + strSel.Remove(strSel.Length - 2) + "\r\n" + strQry +
1040+
strQry = CTESel + CTEQry + strLevelsEnumerations + RemoveLastComma(strSel) + "\r\n" + strQry +
10311041
GetNonPCUserHierarchyColumnNamesFromOriginalDimension() + strSelEnd + strWhere;
10321042
cmd.CommandText = strQry;
10331043

0 commit comments

Comments
 (0)