I was working on the SSRS reports there was the scenario of showing the individual dimensions values i.e Business Unit, Cost Center, Department, LineOfBusiness, LineOfRevenue.
I have the generalJournalAccountEntry table in my query which cantains the LedgerAccount that contains the financial dimension values in combine i,e 602100-001-026-014-. This account contains the values of main account i.e 602100, business unit i.e 011, department i.e 026, costcentre i.e 014.
My scenario was I have to break this accounts into individual dimensions at run time.
After some research I got the code to get the financial dimension values by ledgerDimension which is already present in GeneralJournalAccountEntry table.
Below is the code snippet to achieve this:
private void addDimensionSegments(MzkLedgerTransactionListStagingTmp _ProcessingStagingTable, GeneralJournalAccountEntry _generalJournalAccountEntry)
{
// DimensionAttributeValueCombination stores the combinations of dimension values
// Any tables that uses dimension combinations for main account and dimensions
// Has a reference to this table’s recid
DimensionAttributeValueCombination dimAttrValueComb;
//GeneralJournalAccountEntry is one such tables that refrences DimensionAttributeValueCombination
//GeneralJournalAccountEntry gjAccEntry;//TODO commment zahid
// Class Dimension storage is used to store and manipulate the values of combination
DimensionStorage dimensionStorage;
// Class DimensionStorageSegment will get specfic segments based on hierarchies
DimensionStorageSegment segment;
int segmentCount, segmentIndex;
int hierarchyCount, hierarchyIndex;
str segmentName, segmentDescription;
SysDim segmentValue;
;
setPrefix("Dimension values fetching");
//Fetch the Value combination record
dimAttrValueComb = DimensionAttributeValueCombination::find(
_generalJournalAccountEntry.LedgerDimension);
setPrefix("Breakup for " + dimAttrValueComb.DisplayValue);
// Get dimension storage
dimensionStorage = DimensionStorage::findById(
_generalJournalAccountEntry.LedgerDimension);
if (dimensionStorage == null)
{
throw error("@SYS83964");
}
// Get hierarchy count
hierarchyCount = dimensionStorage.hierarchyCount();
//Loop through hierarchies to get individual segments
for(hierarchyIndex = 1; hierarchyIndex <= hierarchyCount; hierarchyIndex++)
{
setPrefix(strFmt("Hierarchy: %1", DimensionHierarchy::find(dimensionStorage.getHierarchyId(hierarchyIndex)).Name));
//Get segment count for hierarchy
segmentCount = dimensionStorage.segmentCountForHierarchy(hierarchyIndex);
//Loop through segments and display required values
for (segmentIndex = 1; segmentIndex <= segmentCount; segmentIndex++)
{
// Get segment
segment = dimensionStorage.getSegmentForHierarchy(hierarchyIndex, segmentIndex);
// Get the segment information
if (segment.parmDimensionAttributeValueId() != 0)
{
// Get segment name
segmentName = DimensionAttribute::find(DimensionAttributeValue::find(segment.parmDimensionAttributeValueId()).DimensionAttribute).Name;
//Get segment value (id of the dimension)
segmentValue = segment.parmDisplayValue();
//Get segment value name (Description for dimension)
segmentDescription = segment.getName();
///info(strFmt("%1: %2, %3", segmentName, segmentValue, segmentDescription));
if(segmentName == 'BusinessUnit')
{
_ProcessingStagingTable.BusinessUnit = segmentValue;
}
else if(segmentName == 'LineOfBusiness')
{
_ProcessingStagingTable.LineOfBusiness = segmentValue;
}
else if(segmentName == 'LineOfRevenue')
{
_ProcessingStagingTable.LineOfRevenue = segmentValue;
}
else if(segmentName == 'Location')
{
_ProcessingStagingTable.Location = segmentValue;
}
else if(segmentName == 'Department')
{
_ProcessingStagingTable.Department = segmentValue;
}
}
}
}
}
Thats all from my side.
More detail to this can be found on the below link:
https://sumitsaxfactor.wordpress.com/2011/12/16/getting-individual-dimension-combination-valuesdimension-storage-class-ax-2012/