Mobile API Reference  MicroStrategy 2019
DatasetHelper.h
Go to the documentation of this file.
1 //==============================================================================================
2 // FILENAME : DatasetHelper.h
3 // AUTHOR : Dong Shi
4 // CREATION : 1/25/10
5 // Copyright (C) MicroStrategy, Inc. 2008
6 //==============================================================================================
7 #ifndef DATASETHELPER_H
8 #define DATASETHELPER_H
9 
10 #include "../Dataset.h"
11 #include "FormatInfo.h"
12 #include <set>
13 
14 #ifndef _VE_CE
15 #import "DatasetIOSHelper.h"
16 #define DSSTEMPLATE DSSTemplate
17 #define DSSTEMPLATEMETRIC DSSTemplateMetric
18 #define DSSRWGRIDITERATOR DSSRWGridIterator
19 #define DSSTEMPLATECUSTOMGROUP DSSTemplateCustomGroup
20 #else
21 #define DSSTEMPLATE ICDSSTemplate
22 #define DSSTEMPLATEMETRIC ICDSSTemplateMetric
23 #define DSSRWGRIDITERATOR ICDSSRWIterator
24 #define DSSTEMPLATECUSTOMGROUP ICDSSTemplateCustomGroup
25 #endif
26 /************************************************************************************************
27  * This Header File Includes All the Helper Classes Referrenced By DatasetImpl *
28  ************************************************************************************************/
29 
30 typedef enum
31 {
34  BSFT_DATE = 8,
35  BSFT_TIME = 9,
38 
39 typedef enum
40 {
41  TM_INVALID = -1,
42  TM_YEAR = 0,
43  TM_MONTH = 1,
44  TM_DAY = 2,
45  TM_TIME = 3
47 
48 typedef enum
49 {
54 
55 class DSSTemplateMetric;
56 class DSSCustomGroup;
59 namespace MsiChart
60 {
61  const double kNodeSizeFactor = 100.0;
63 
64  //class MDataType::DSSDateTime;
65  class DimTree;
66  struct TMLocaleInfo;
68  public:
69  class DateTimeInfo {
70  public:
72  {
73  }
75  }
76 
77  public:
78  const void* mpData;
85  };
86 
87  class DateTimeIndex {
88  public:
90  }
91  DateTimeIndex(const void* ipData, TMLocaleInfo* ipLocale, Int32 iIndex): mpData(ipData), mpLocale(ipLocale), mIndex(iIndex){
92  }
94  }
95 
96  bool operator == (const DateTimeIndex& x) const;
97 
98  bool operator != (const DateTimeIndex& x) const
99  {
100  return !(*this == x);
101  }
102 
103  public:
104  const void* mpData;
107  };
108 
109  public:
110 
111  FormattedDataString(const FormattedDataString &x) : mpDateTimeIndex (NULL), mpDateTimeInfo(NULL), mText(L"")
112 #ifdef _VE_CE
113 #else
114  ,mpFormattedDataStringHelper(NULL)
115 #endif
116  {
117  if (x.mpDateTimeIndex != NULL) {
118  mpDateTimeIndex = new DateTimeIndex(*(x.mpDateTimeIndex));
119  }
120  if (x.mpDateTimeInfo != NULL) {
121  mpDateTimeInfo = new DateTimeInfo(*(x.mpDateTimeInfo));
122  }
123  mText = x.mText;
124  mIsLink = x.mIsLink;
125 #ifdef _VE_CE
126 #else
127  mpFormattedDataStringHelper = new FormattedDataStringHelper(this);
128 #endif
129  }
130 
132  {
133  if (this != &x) {
134  if (mpDateTimeIndex != NULL) {
135  delete mpDateTimeIndex;
136  }
137  if (x.mpDateTimeIndex != NULL) {
138  mpDateTimeIndex = new DateTimeIndex(*(x.mpDateTimeIndex));
139  }
140  else {
141  mpDateTimeIndex = NULL;
142  }
143 
144  if (mpDateTimeInfo != NULL) {
145  delete mpDateTimeInfo;
146  }
147  if (x.mpDateTimeInfo != NULL) {
148  mpDateTimeInfo = new DateTimeInfo(*(x.mpDateTimeInfo));
149  }
150  else {
151  mpDateTimeInfo = NULL;
152  }
153 
154  mText = x.mText;
155  mIsLink = x.mIsLink;
156  }
157  return *this;
158  }
159 
160  FormattedDataString() : mText(L""), mpDateTimeInfo(NULL), mpDateTimeIndex(NULL), mIsLink(false)
161 #ifdef _VE_CE
162 #else
163  ,mpFormattedDataStringHelper(NULL)
164 #endif
165  {
166 #ifdef _VE_CE
167 #else
168  mpFormattedDataStringHelper = new FormattedDataStringHelper(this);
169 #endif
170  }
171 
172  FormattedDataString(const void* ipData, EnumDSSDataType iType, DSSDataFlag iFlag, Int32 iSize, Int32 iBaseFormType, FormatInfo& iFormat, CComVariant* ipNumberCategory, CComVariant* ipNumberFormat) : mText(L""), mpDateTimeInfo(NULL), mpDateTimeIndex(NULL), mIsLink(false)
173 #ifdef _VE_CE
174 #else
175  ,mpFormattedDataStringHelper(NULL)
176 #endif
177  {
178 #ifdef _VE_CE
179 #else
180  mpFormattedDataStringHelper = new FormattedDataStringHelper(this);
181 #endif
182  SetData(ipData, iType, iFlag, iSize, iBaseFormType, iFormat, ipNumberCategory, ipNumberFormat);
183  }
184 
185  FormattedDataString(const void* ipData, TMLocaleInfo* ipLocale, Int32 iIndex) : mText(L""), mpDateTimeInfo(NULL), mpDateTimeIndex(NULL), mIsLink(false)
186 #ifdef _VE_CE
187 #else
188  ,mpFormattedDataStringHelper(NULL)
189 #endif
190  {
191 #ifdef _VE_CE
192 #else
193  mpFormattedDataStringHelper = new FormattedDataStringHelper(this);
194 #endif
195  SetData(ipData, ipLocale, iIndex);
196  }
197 
198  FormattedDataString(const MBase::String &iText) : mText(iText), mpDateTimeInfo(NULL), mpDateTimeIndex(NULL), mIsLink(false)
199 #ifdef _VE_CE
200 #else
201  ,mpFormattedDataStringHelper(NULL)
202 #endif
203  {
204 #ifdef _VE_CE
205 #else
206  mpFormattedDataStringHelper = new FormattedDataStringHelper(this);
207 #endif
208  }
209 
210  FormattedDataString(const std::string &iText) : mText(MBase::UTF8ToWideChar(iText.c_str()).c_str()), mpDateTimeInfo(NULL), mpDateTimeIndex(NULL), mIsLink(false)
211 #ifdef _VE_CE
212 #else
213  ,mpFormattedDataStringHelper(NULL)
214 #endif
215  {
216 #ifdef _VE_CE
217 #else
218  mpFormattedDataStringHelper = new FormattedDataStringHelper(this);
219 #endif
220  }
221 
223  {
224  if (mpDateTimeInfo != NULL)
225  delete mpDateTimeInfo;
226  if (mpDateTimeIndex != NULL)
227  delete mpDateTimeIndex;
228 #ifdef _VE_CE
229 #else
230  if(mpFormattedDataStringHelper != NULL)
231  {
232  delete mpFormattedDataStringHelper;
233  mpFormattedDataStringHelper = NULL;
234  }
235 #endif
236  }
237 
238  void SetData(const void* ipData, EnumDSSDataType iType, DSSDataFlag iFlag, Int32 iSize, Int32 iBaseFormType, FormatInfo& iFormat, CComVariant* ipNumberCategory, CComVariant* ipNumberFormat);
239  void SetData(const MBase::String& irText);
240  void SetData(const std::string& irText);
241  void SetData(const void* ipData, TMLocaleInfo* ipLocale, Int32 iIndex);
242 
245 
246  bool operator == (const FormattedDataString& irDataString) const;
247 
248  bool operator != (const FormattedDataString& irDataString) const
249  {
250  return !(*this == irDataString);
251  }
252 
253 
254  static void ResolveLinkText(const MBase::String& irBaseStr, MBase::String& iorText, LINK_TEXT_TYPE iWantType = LINK_TEXT_DISPLAY);
255 
256  DateTimeIndex* GetDateTimeIndex();
257  void SetDateTimeIndex(DateTimeIndex* ipDateTimeIndex);
258  DateTimeInfo* GetDateTimeInfo();
259  void SetDateTimeInfo(DateTimeInfo* ipDateTimeInfo);
260  void SetFormattedDataStringText(const MBase::String& iText);
262  bool IsLink();
263  void SetIsLink(bool iIsLink);
265  private:
266  DateTimeInfo* mpDateTimeInfo;
267  DateTimeIndex* mpDateTimeIndex;
268  bool mIsLink;
269 #ifdef _VE_CE
270 #else
271  FormattedDataStringHelper *mpFormattedDataStringHelper;
272 #endif
273  };
274 
275 
277 
278  // ---0. DataPiece--- //
279  class DataPiece
280  {
281  public:
282  //ctor
283  DataPiece(SLICE_TYPE iType, Dataset* ipParent);
284  virtual ~DataPiece();
285 
286  //Exposed for Client Callers
287  virtual HRESULT GetData(Int32 iSeriesID, Int32 iGroupID, const double*& iorValue, Int32 iColumnOffset = 0);
288  virtual HRESULT GetSeriesCount(Int32& orSeriesCount);
289  virtual HRESULT GetGroupCount(Int32& orGroupCount);
290 
291  //Mapping
292  virtual Int32 MapSreiesToParentalDataset(Int32 iSeriesIndex);
293  virtual Int32 MapGroupToParentalDataset(Int32 iGroupIndex);
294  virtual void MapIndexToParentalDataset(Int32 iSeriesIndex, Int32 iGroupIndex, Int32& orSeriesIndex, Int32& orGroupIndex);
295 
296  //Slice Type
297  virtual SLICE_TYPE GetSliceType();
298  virtual void SetSliceType(SLICE_TYPE iType = SLICE_STEPWISE);
299 
300  //Piece Update
301  virtual bool Update(Int32 iBeinSeries, Int32 iEndSeries, Int32 iBeginGroup, Int32 iEndGroup);
302  virtual bool Update(const std::vector<Int32>& irSeriesIndex, const std::vector<Int32>& irGroupIndex);
303 
304  //Get Info like Range
305  virtual bool GetRange(Int32& iBeinSeries, Int32& iEndSeries, Int32& iBeginGroup, Int32& iEndGroup);
306  virtual bool GetRange(std::vector<Int32>& orSeriesIndex, std::vector<Int32>& orGroupIndex);
307  virtual bool GetGroupRange(Int32& orBeginGroup, Int32& orEndGroup);
308  virtual bool IsValid();
309  protected:
311  bool mIsValid;
313  };
314 
315  // ---1. DataSlice--- //
316  class DataSlice : public DataPiece
317  {
318  public:
319  DataSlice(Int32 iBeginGroup, Int32 iEndGroup, Int32 iBeginSeries, Int32 iEndSeries, Dataset* ipParent, SLICE_TYPE iType = SLICE_STEPWISE);
320 
321 
322  virtual HRESULT GetSeriesCount(Int32& orSeriesCount);
323  virtual HRESULT GetGroupCount(Int32& orGroupCount);
324 
325  //Map index info back to parental dataset.
326  virtual Int32 MapSreiesToParentalDataset(Int32 iSeriesIndex);
327  virtual Int32 MapGroupToParentalDataset(Int32 iGroupIndex);
328  virtual void MapIndexToParentalDataset(Int32 iSeriesIndex, Int32 iGroupIndex, Int32& orSeriesIndex, Int32& orGroupIndex);
329 
330  //Update
331  virtual bool Update(Int32 iBeinSeries, Int32 iEndSeries, Int32 iBeginGroup, Int32 iEndGroup);
332 
333  //Get info
334  virtual bool GetRange(Int32& iBeinSeries, Int32& iEndSeries, Int32& iBeginGroup, Int32& iEndGroup);
335  virtual bool GetGroupRange(Int32& orBeginGroup, Int32& orEndGroup);
336 
337  private:
338  void hTrimBoundary(Int32 iSeriesCount, Int32 iGroupCount);
339  bool hCheckValidity();
340 
341  Int32 mBeginGroup;
342  Int32 mEndGroup;
343  Int32 mBeginSeries;
344  Int32 mEndSeries;
345  };
346 
347 
348  // ---2. DataStrip--- //
349  class DataStrip : public DataPiece
350  {
351  public:
352  //Ctor
353  DataStrip(const std::vector<Int32>& irSeriesIndex, const std::vector<Int32>& irGroupIndex, Dataset* ipParent);
354 
355  //Exposed For Clinet Callers
356  virtual HRESULT GetSeriesCount(Int32& orSeriesCount);
357  virtual HRESULT GetGroupCount(Int32& orGroupCount);
358 
359  //Map index info back to parental dataset.
360  virtual Int32 MapSreiesToParentalDataset(Int32 iSeriesIndex);
361  virtual Int32 MapGroupToParentalDataset(Int32 iGroupIndex);
362  virtual void MapIndexToParentalDataset(Int32 iSeriesIndex, Int32 iGroupIndex, Int32& orSeriesIndex, Int32& orGroupIndex);
363 
364  //Update
365  virtual bool Update(const std::vector<Int32>& irSeriesIndex, const std::vector<Int32>& irGroupIndex);
366 
367  //Get info
368  virtual bool GetRange(std::vector<Int32>& orSeriesIndex, std::vector<Int32>& orGroupIndex);
369  virtual bool GetGroupRange(Int32& orBeginGroup, Int32& orEndGroup);
370 
371  private:
372 
373  bool hPickValidIndex(Int32 iInput, Int32 iInputUpperLimit, Int32 iInputLowerLimit = 0);
374  void hUpdate(const std::vector<Int32>& irSeriesIndex, const std::vector<Int32>& irGroupIndex);
375 
376  std::vector<Int32> mSeriesIndex;
377  std::vector<Int32> mGroupIndex;
378  };
379 
380 
381  //For Tree Structure Support
385  class DimNode
386  {
387  public:
393  DimNode(Int32 iDim,Int32 iIndex):mDim(iDim),
394  mIndex(iIndex),
395  mpParent(NULL),
396  mStartChild(0),
397  mGroupPos(-1.0),
398  mOrdinal(-1),
399  mShowNode(true),
400  mOffspringCount(0)
401  {}
402 
406  ~DimNode();
407 
412  bool IsLeafNode();
413 
418  bool IsSupportBracket();
419 
420  /*
421  *Return the right most node of the subtree rooted at the current node.
422  */
424 
425  /*
426  *Treverse to the right bottom most leaf node while collecting the path info.
427  */
428  void RightMostOffspringForPathInfo(std::vector<Int32>& iorPathInfo);
429 
434  DimNode* LeftOrTopMost(){return mChildren.front();}
440 
441 
445  float mGroupPos;
446  std::vector<DimNode*> mChildren;
448  bool mShowNode;
452  };
453 
454 
456 
457  //Unit Info Structure//
458 
460  struct UnitInfo
461  {
463  {
464  mName = L"";
465  mIndexInAxis = 0;
467  mIsValid = false;
468  }
469 
470  UnitInfo(MBase::String& iName, GUID& iID, Int32 iIndex, Int32 iType) : mID(iID), mIndexInAxis(iIndex), mType(iType), mName(iName)
471  {
472  mIsValid = true;
473  }
474  public:
475  MBase::GUID GetID() {return mID;}
477  Int32 GetType() {return mType;}
480  bool mIsValid;
481  protected:
485  };
486 
487  typedef std::pair<MBase::GUID, MBase::String> ElementInfo;
488 
489  class DimTree;
490  struct MetricUnitInfo: public UnitInfo
491  {
493 
494  MetricUnitInfo(MBase::String& iName, MBase::GUID& iID, Int32 iIndex, Int32 iType) : UnitInfo(iName, iID, iIndex, iType)
495  {
496  mIsInRowAxis = false;
497  mMetricNumber = 0;
498  }
499 
501  {
502  mIsInRowAxis = false;
503  mMetricNumber = 0;
504  mIsValid = hPopulateMetricInfo(ipTemplate);
505  }
506  void AddOneElement(const MBase::GUID& iID, const MBase::String& iName) {mElements.push_back(std::make_pair(iID, iName));}
507  void GetOneElement(MBase::GUID& orID, MBase::String& orName, Int32 iIndex)
508  {
509  _ASSERTE( iIndex >= 0 && iIndex < mElements.size());
510  orID = mElements[iIndex].first;
511  orName = mElements[iIndex].second;
512  }
514  {
515  _ASSERTE(iIndex >= 0 && iIndex < mElements.size());
516  return mElements[iIndex].first;
517  }
520  {
521  return mElements[iIndex].second;
522  }
523 
524  void GetElementNames(std::vector<MBase::String>& orElements)
525  {
526  orElements.clear();
527  size_t lSize = mElements.size();
528  for (size_t i = 0; i < lSize; i++)
529  orElements.push_back(mElements[i].second);
530  }
534  {
535  Int32 lSize = sizeof(*this);
536 
537  Int32 lCount = (Int32)mOccupyPairSet.size();
538  Int32 kSize = sizeof(std::pair<Int32, Int32>);
539  lSize += lCount * kSize;
540 
541  lCount = (Int32)mIDToTemplateMetric.size();
542  kSize = sizeof(MBase::GUID) + sizeof(DSSTemplateMetric*);
543  lSize += lCount * kSize;
544 
545  lCount = (Int32)mElements.size();
546  kSize = sizeof(ElementInfo);
547  lSize += lCount * kSize;
548 
549  return lSize;
550  }
551 
555  protected:
556  std::vector<ElementInfo> mElements;
557  std::vector<std::pair<Int32, Int32> > mOccupyPairSet; //<width, index>
558  std::map<MBase::GUID, DSSTEMPLATEMETRIC*> mIDToTemplateMetric;
559  private:
560  bool hPopulateMetricInfo(DSSTEMPLATE* ipTemplate);
561 
562  };
563 
564  //CustomGroupUnitInfo
565  typedef enum
566  {//to identify custom group levels ()
572  //CustomGroupUnitInfo impl
574  {
576 
577  Int32 mCustomGroupNum[2];//0 for rows, 1 for columns
578 
579  CustomGroupUnitInfo(MBase::String& iName, MBase::GUID& iID, Int32 iIndex, Int32 iType) : UnitInfo(iName, iID, iIndex, iType)
580  {
581  mCustomGroupNum[0] = mCustomGroupNum[1] = 0;
582  }
584  {
585  mCustomGroupNum[0] = mCustomGroupNum[1] = 0;
586  mIsValid = hPopulateCustomGroupUnitInfo(ipIterator);
587  }
588  //iAxis = 0(Row) or 1(Column)
589  DSSTEMPLATECUSTOMGROUP* getCustomGroupInAxis(int iAxis, int iDepth, CUSTOM_GROUP_LEVEL& iLevel);//not fully implemented
590  std::vector<std::pair<Int32, Int32> > getCustomGroupPositions(bool iIsRow);
591  bool hasCustomGroupInRow(){return (mCustomGroupNum[0]>0);}
593  protected:
594  std::vector<std::pair<Int32, Int32> > mOccupyPairSet[2]; //<beginIndex endIndex> -- [bgin, end)
595  std::map<Int32, MBase::GUID> mCustomGroupIndexToID[2]; //<CGIndex, ID>
596  std::map<MBase::GUID, DSSTEMPLATECUSTOMGROUP*> mIDToTemplateCustomGroup;
597  //format info pool
598  std::map<Int32, std::pair<GUID, Int32> > mCustomGroupIndexToElement[2];
599  private:
600  bool hPopulateCustomGroupUnitInfo(DSSRWGRIDITERATOR* mpIterator);
601  };
602  //CustomGroupUnitInfo~
603 
604  //Forward Declaration, each unit should contain its type/ID/Name/StartIndex/Width
608  class DimTree
609  {
610  public:
611 
612  typedef std::vector<FormattedDataString> StringForms;
613  typedef std::vector<FormattedDataString>* StringFormsPtr;
614  typedef std::vector<std::vector<std::vector<FormattedDataString> >* > FormStringPool;
615 
616 
621  {
622  // Create root node
623  mRoot.Reset(new DimNode(-1,-1));
624  // Assure the root node is not null
625  _ASSERT(!mRoot.IsNull());
626  }
627  ~DimTree();
628 
629  void Delete()
630  {
631  delete this;
632  }
633 
634  void AddLevel()
635  {
636  mLabelCon.mDimString.push_back(FormStringPool::value_type());
637  }
638 
640  {
641  return mLeafNodes.size() * kNodeSizeFactor;
642  }
643 
644  void GetStringPathToRoot(std::vector<MBase::String>& orPath, DimNode* ipNode)
645  {
646  DimNode* lpNode = ipNode;
647  while(lpNode != mRoot.Get() && lpNode)
648  {
649  MBase::String lNodeString = GetFormattedString(lpNode, true).c_str();
650  orPath.push_back(lNodeString);
651  lpNode = lpNode->mpParent;
652  }
653  }
654 
655  //viewer will get it directly from template
656  MBase::String GetTemplateUnitName(Int32 iDimLayer, bool iUseAlias = false, bool iIsSqueezeHCG = true)
657  {
658  _ASSERTE(iDimLayer >= 0 && iDimLayer < mLabelCon.mDimString.size());
659  if (!iIsSqueezeHCG)
660  {
661  return mAttributes[iDimLayer];
662  }
663  else
664  {
665  Int32 lDepthIndex = mUnitIndexToStartDepthIndex[iDimLayer];
666  return mAttributes[lDepthIndex];
667  }
668  }
669 
670  MBase::String GetTemplateUnitElementName(Int32 iDimLayer, Int32 iIndexInsideDim, Int32 iFormIndex = 0, MBase::String iSeperator = L" ", bool iIsSqueezeHCG = true)
671  {
672  MBase::String lStr = L"";
673  Int32 lSize = (Int32)mLabelCon.mDimString.size();
674 
675  if (!iIsSqueezeHCG || (iIsSqueezeHCG && mHCGMap.find(iDimLayer) == mHCGMap.end()))
676  {
677 
678  if(iIsSqueezeHCG) //Squeeze, but not HCG, only one column to take.
679  iDimLayer = mUnitIndexToStartDepthIndex[iDimLayer]; //convert to depth
680 
681  if (iDimLayer < 0 || iDimLayer >= lSize)
682  return lStr;
683 
684  std::vector<DimNode*> lpNodesVec = GetDimNodes(iDimLayer, false);
685  if (iIndexInsideDim < 0 || iIndexInsideDim >= lpNodesVec.size())
686  return lStr;
687 
688  DimNode* lpNode = lpNodesVec[iIndexInsideDim];
689  return mLabelCon.GetString(lpNode, iFormIndex, iSeperator);
690  }
691  else //squeezed and a HCG
692  {
693  _ASSERTE(mHCGMap.find(iDimLayer) != mHCGMap.end()); //a HCG
694 
695  Int32 lWidth = mHCGMap[iDimLayer].second;
696  Int32 lStartDepth = mHCGMap[iDimLayer].first;
697  Int32 lEndDepth = lStartDepth + lWidth - 1;
698 
699  if (lEndDepth < 0 || lEndDepth >= lSize || lStartDepth < 0 || lStartDepth >= lSize)
700  return lStr;
701 
702  std::vector<DimNode*> lpNodesVec = GetDimNodes(lEndDepth, false);
703  if (iIndexInsideDim < 0 || iIndexInsideDim >= lpNodesVec.size())
704  return lStr;
705 
706  DimNode* lpNode = lpNodesVec[iIndexInsideDim];
707  std::vector <MBase::String> lvParts;
708  while (lWidth > 0)
709  {
710  MBase::String lPart = mLabelCon.GetString(lpNode, iFormIndex, iSeperator);
711  lvParts.insert(lvParts.begin(), lPart);
712 
713  lpNode = lpNode->mpParent;
714  lWidth--;
715  }
716 
717  Int32 lvSize = (Int32)lvParts.size();
718  _ASSERTE(lSize >= 2);
719  for (Int32 i = 0; i < lvSize - 1; i++)
720  lStr += lvParts[i] + iSeperator;
721  lStr += lvParts.back();
722  return lStr;
723  }
724  }
725 
726  Int32 GetTreeDepth(bool iIsSqueezeHCG = true)
727  {
728  if (!iIsSqueezeHCG)
729  return (Int32)mLabelCon.mDimString.size();
730  else
731  {
732  return (Int32)mUnitIndexToStartDepthIndex.size();
733  }
734  }
735 
736  Int32 GetTreeWidth(Int32 iDimLayer, bool iIsActualSize = false, bool iIsSqueezeHCG = true)
737  {
738  if (!iIsSqueezeHCG || (iIsSqueezeHCG && mHCGMap.find(iDimLayer) == mHCGMap.end()))
739  {
740  if (iIsSqueezeHCG)
741  iDimLayer = mUnitIndexToStartDepthIndex[iDimLayer];
742  }
743  else //squeeze HCG
744  {
745  _ASSERTE(mHCGMap.find(iDimLayer) != mHCGMap.end());
746  Int32 lStartDepth = mHCGMap[iDimLayer].first;
747  Int32 lWidth = mHCGMap[iDimLayer].second;
748  _ASSERTE(lWidth >= 2);
749  Int32 lEndDepth = lStartDepth + lWidth - 1;
750  iDimLayer = lEndDepth;
751  }
752 
753  _ASSERTE(iDimLayer >= 0 && iDimLayer < GetTreeDepth(false));
754  if(iIsActualSize)
755  return (Int32)GetDimNodes(iDimLayer, false).size();
756  else
757  return (Int32)mLabelCon.mDimString[iDimLayer]->size();
758  }
759 
760  Int32 GetLeafNodesByRoot(Int32 iDimLayer, Int32 iIndexInsideDim, bool iIsSqueezeHCG = true)
761  {
762  if (!iIsSqueezeHCG || (iIsSqueezeHCG && mHCGMap.find(iDimLayer) == mHCGMap.end()))
763  {
764  if (iIsSqueezeHCG)
765  iDimLayer = mUnitIndexToStartDepthIndex[iDimLayer];
766  }
767  else
768  {
769  _ASSERTE(mHCGMap.find(iDimLayer) != mHCGMap.end());
770  Int32 lStartDepth = mHCGMap[iDimLayer].first;
771  Int32 lWidth = mHCGMap[iDimLayer].second;
772  iDimLayer = lStartDepth + lWidth - 1;
773  }
774  _ASSERTE(GetDim(false) > iDimLayer);
775  _ASSERTE(GetDimNodes(iDimLayer, false).size() > iIndexInsideDim);
776  return GetDimNodes(iDimLayer, false)[iIndexInsideDim]->mOffspringCount;
777  }
778 
783  {
784  public:
794  {
795  std::vector<std::vector<std::vector<FormattedDataString> >* >::iterator pos = mDimString.begin();
796  for(;pos!=mDimString.end();++pos)
797  {
798  if((*pos)!=NULL)
799  {
800  delete (*pos); (*pos) = NULL;
801  }
802  }
803  }
804 
811  Int32 Find(Int32 iDimIndex, StringFormsPtr ipString);
812 
819  Int32 Add(Int32 iDimIndex, StringFormsPtr ipString);
820 
827  MBase::String GetString(DimNode* ipNode, Int32 iFormIndex = -1, MBase::String lSeperator = L" ", LINK_TEXT_TYPE iType = LINK_TEXT_DISPLAY); //[enhanced for forms]
828 
837  MBase::String GetString(Int32 iDim, Int32 iIndex, Int32 iFormIndex = -1, MBase::String lSeperator = L" ", LINK_TEXT_TYPE iType = LINK_TEXT_DISPLAY);
838 
843  unsigned Int32 GetDim()
844  {
845  unsigned Int32 lDim = 0;
846  std::vector<std::vector<std::vector<FormattedDataString> >* >::iterator pos = mDimString.begin();
847  while(pos!=mDimString.end() && (*pos)!=NULL)
848  {
849  lDim++; ++pos;
850  }
851  return lDim;
852  }
853  public:
854 
856  //We make the mDimString a 3 dimentional matrix to support forms of string.
857  //D1 : DimIndex, D2: IndexInsideOneDim, D3: FormIndex.
859  };
860 
861 
863  bool IsLastAttrOfDateStyle();
864 
865 
866 
868  void LevelTraverse();
870  unsigned Int32 GetDim(bool iIsSqueezeHCG = true);
872  std::vector<DimNode*> GetDimNodes(unsigned Int32 iDimIndex, bool iIsSqueezeHCG = true);
874  unsigned Int32 GetLeafCount() const;
876  MBase::String GetPlainLabels(unsigned Int32 iGroupIndex, bool iSuppressLastLevel = false, LABEL_LEVEL_OPTION iOption = LLO_NORMAL);
877  MBase::String GetFormattedString(DimNode* ipNode, bool iIsAbbreviated = false);
878  bool IsLastAttrToDisplay(DimNode* ipNode); //Hard-coded to be deleted or revised in future.
879 
885 
886  private:
888  void hRecGetNodes(DimNode* ipNode,Int32 iDimIndex, std::vector<DimNode*>& iorCon);
890  void hRecLevelTraverse(DimNode* ipNode);
891  MBase::String hAbbreviateText(Int32 iDim, const MBase::String& irLabelPiece);
892  public:
895  std::vector<DimNode*> mLeafNodes;
896  std::vector<MBase::String> mAttributes;
897  std::vector<Int32> mWidths;
898  std::vector<GUID> mIDs;
900  std::map<Int32, Int32> mDepthToUnitIndex;
901  std::map<Int32, Int32> mUnitIndexToStartDepthIndex;
902  std::map<Int32, std::pair<Int32, Int32> > mHCGMap;
903  std::vector<Int32> mFormStyles;
905  };
906 
907 
908 
909 
910 
911 
912 
913 
914 
915 
916 
917 
918 
919  //For Drill Support
926  {
927  public:
928  //Ctor & dtor
929  TokenManager();
930  ~TokenManager();
931  void Populate(DimTree* ipRowTree, DimTree* ipColTree);
932 
933  //Movement
934  void ResetToken();
935  bool MoveDownToken(Int32 iIndex);
936  bool MoveUpToken();
937 
938  //Window Setting, shold be followed by refresh of dataset if called
939  bool SetRowColIndex(Int32 iRowIndex, Int32 iColIndex);
940 
941  //All the Getor methods
943  bool GetRowHeader(MBase::String& orLabel); //Get the row header for CURRENT level
944  bool GetRowHeadersForChildren(std::vector<MBase::String>& orLabels); //Get the row header for its children. Note, only row header, not
945  bool GetAttributeName(MBase::String& orAttrName); //Get Attr Name for ONE LAYER below
946  Int32 GetLevel();
948  Int32 GetRowIndex();
949  Int32 GetColIndex();
950 
951  //Misc
952  bool IsAtBottomLevel(); //At the last level above leafs
953  bool IsDataWindowReady(); //Whether data window is set
954  bool ToColumnRange(Int32& orBegin, Int32& orEnd); //Get the range of columns
955 
956  bool mIsValid;
957  private:
958  Int32 mDim;
959  Int32 mIndex;
960  Int32 mRowDimLimit;
961  Int32 mRowPathIndex;
962  Int32 mColPathIndex;
963  DimTree* mpRowTree;
964  DimTree* mpColTree;
965  bool mIsWindowValid; //user set the window by calling set rowcolindex
966  bool mIsPivot;
967  };
968 
969  //TMLocaleInfo
970  /*********************************************************
971  *= This is a helper struct to get locale info to forma =*
972  *= the x-axis labels in Time Series Chart; =*
973  *********************************************************/
975  {
976  //for time series
977  void* mpLocale;
978  std::string mDateFormatRule;
979  std::string mTimeFormatRule;
982  std::vector<std::string> mDateSeperators;
984 
985  //methods:
986  TMLocaleInfo(Int32 iPartsNumber);
987  ~TMLocaleInfo();
988  void Populate();
989  void ConvertToDateTimeParts(const void* ipDateData, std::vector<std::string>& iorParts);
990  void FormatYMD(const std::string& iFullString, std::vector<std::string>& iorParts);
991  MBase::String GetDateByDateOrderType(MBase::String &irYear,MBase::String &irMonth , MBase::String &irDay ,MBase::String irHour = L"00",MBase::String irMinute = L"00",MBase::String irSecond = L"00");
992 #ifdef _VE_CE
993 #else
994  private:
995  TMLocaleInfoHelper *mpTMLocaleInfoHelper;
996 #endif
997  };
998 #ifndef _VE_CE
999  //DimTreePopulator
1000  /*********************************************************
1001  *= This is a static class to create dim tree instance, =*
1002  *= Usage: DimTreePopulator::ToTree(XXXXX); =*
1003  *********************************************************/
1005  {
1006  public:
1007  //Method 1: get a normal tree
1008  static DimTree* ToTree(bool iIsForRow, DSSTemplate* ipTemplate, DSSRWGridIterator* ipGridIterator, Int32 iBeginLayer = 0, Int32 iEndLayer = -1, bool iIsShowSubtotal = true);
1009 
1010  //Method 2: get a time series tree
1011  static DimTree* ToTimeSeriesTree(bool iIsForRow, DSSTemplate* ipTemplate, DSSRWGridIterator* ipGridIterator, Int32 iBeginLayer = 0, Int32 iEndLayer = -1, bool iIsShowSubtotal = true);
1012 
1013  protected:
1014  //helper methods : to build normal tree
1015  static DimTree* hPopulateTree(DSSRWGridIterator* ipGridIterator, DSSTemplate* ipTemplate, bool iIsRow, Int32 iBeginLayer, Int32 iEndLayer, bool iIsShowSubtotal = true); //[iBeginLayer, iEndLayer)
1016  static bool hTraverseTreeForCompletion(DimNode* ipNode, DimTree* ipTree);
1017 
1018  //helper methods : to build time series tree.
1019  //1. if of time sieres, return how many layers to parse.
1020  //2. if not, return -1.
1021  static Int32 hIsUnitForTimeSeries(DSSTemplateUnit* ipUnit);
1022  static DimTree* hPopulateTimeSeriesTree(bool iIsForRow, DSSTemplateUnit* iDateUnit, DSSTemplate* ipTemplate, DSSRWGridIterator* ipGridIterator, Int32 iTreeDepth);
1023  static Int32 hBuildSubtreeOnDate(DSSRWGridIterator* ipGridIterator, DimTree*& ipTree, Int32 iPreOrdinal, Int32 iOridanlCount, Int32 iFormId,
1024  bool iIsForRow, bool iIsIncludingTime);
1025  static bool hHasRepeatedElementAt(DSSRWGridIterator* ipGridIterator, Int32 iAxisId, Int32 iDepth);
1038  static bool hBuildOneDimNodeOnDate(DimNode** ipCurrentNode, DimNode* ipParentNode, int iDimIndex, FormattedDataString* ipContentToAdd, FormattedDataString* ipCurrentContent, DimTree* ipTree, bool iDimPathChagned);
1039  };
1040 
1041 
1042  /***************************
1043  ****DimTree Populator***
1044  **************************/
1046  {
1049 
1050  Int32 mBeginDepth; //[Note : we should build tree by depth, not by unit.]
1054 
1057  bool mShowSubtotalValue; //important.
1058 
1061 
1062  DimTreeCreator();
1063  ~DimTreeCreator();
1064  DimTree* CreateTree();
1065 
1066  std::map<Int32, Int32> mDepthToUnitIndex; //depth index to unit index.
1067  std::map<Int32, Int32> mUnitIndexToStartDepthIndex; //UnitIndex --> firstDepthIndex for this unit, only CG can take multiple depths.
1073  //following public method are from protected for code re-organization
1074  bool GetElementContent(std::vector<FormattedDataString>&orForms, DSSTemplateUnit* ipUnit, Int32 iDepth);
1075  FormattedDataString GetElementStringPiece(DSSTemplateUnit* ipUnit, const void* ipData, EnumDSSDataType iType, DSSDataFlag iFlag, Int32 iSize, Int32 iBaseFormType);
1076  bool GetAttrElementContent(std::vector<FormattedDataString>&orForms, DSSTemplateAttribute* ipAttr, Int32 iDepth, bool iIsSubtotal); //#7 bool hMoveIteratorByElement(Int32 iDepth, bool iIsWithBoundaryCheck, bool iIsForward); //To replace the NextXXXNByElement
1077  bool GetElementContentFromDimension(std::vector<FormattedDataString>&orForms, DSSTemplateDimension* ipUnit, Int32 iDepth);
1078  protected:
1079  bool hPopulateOneDim(DimTree* ipTree, DSSTemplateUnit* ipUnit, Int32 iDepth,
1080  std::vector<DimNode*>& irParentalSet,
1081  std::vector<std::pair<Int32, Int32> >& irParentalOccypySet, bool iIsBuiltByOrdinal = false);
1082 
1083  bool hMoveIteratorByElement(Int32 iDepth, bool iIsWithBoundaryCheck, bool iIsForward); //To replace the NextXXXNByElement
1084  bool hMoveIteratorByElement(Int32 iDepth, bool iIsForward); //To replace the NextXXXNByElement
1085  /***To Get the elements distrubution at layer(i+1) where iDepth = i.
1086  @orOccupySet is a set of element distribution, it is a vector of paris <Number_Of_Elements, Starting_Ordianl>, note we may exclude subtotals
1087  @iDepth, the parental layer index.
1088  */
1089  void hGetChildCountSet(std::vector<std::pair<Int32, Int32> >& orOccupySet, Int32 iDepth, bool iIsBuiltByOrdinal = false); //To replace getChildCount
1090  bool hMoveIteratorToPosition(Int32 iPosition);
1091  Int32 hCountElementsInRange(Int32 iDepth, Int32 lStart, Int32 lEnd);
1092  void hGetFormatString(DSSTemplateUnit* ipUnit);
1094 
1095  private:
1096  DSSAxis* hGetAxis();
1097  void hPopulateDepthMap(DSSAxis* ipAixs);
1098  void hPopulateSubtotalMap(DSSAxis* ipAxis);
1099 
1100  std::vector<Int32> hFilterOutSubtotal(Int32 iDimIndex, Int32 iStart, Int32 iEnd);
1101 
1102 
1103  //void hGetLocaleRelatedInfo(); //for time series
1104  void hPopulateLocaleRelatedInfo();
1105  DimTreeCreatorHelper *mpDimTreeCreatorHelper;
1106  };
1107 #endif
1108  /********************/
1109  /* DateTime Parser */
1110  /********************/
1112  {
1113  public:
1114  DateTimeParser(MBase::String& irString);
1115  DateTimeParser(std::string& irString);
1116  DateTimeParser(Int32 iYear, Int32 iMonth, Int32 iDay);
1117  DateTimeParser(Int32 iYear, Int32 iMonth, Int32 iDay, Int32 iHour, Int32 iMinute, Int32 iSecond, bool iIsIncludingTime);
1118  DateTimeParser(const std::string& iDay, const std::string& iMonth, const std::string& iYear, const std::string& iTime);
1119 
1120  MBase::String ToYear(bool iIsShorten);
1121  MBase::String ToDay(bool iIsShorten);
1122  MBase::String ToMonth(bool iIsDigital, bool iIsShorten = false);
1123  MBase::String ToMonth(bool iIsShorten) const;
1124  MBase::String ToFormattedDate(Int32 iFormatType, const MBase::String iSerperator = L"-", bool iIsShorten = true, Int32 iTimeLenght = 5);
1125  MBase::String ToTime(bool iIsShorten, Int32 iLength);
1126  bool IsValid();
1127  static std::map<MBase::String, MBase::String> msMonthlyMap;
1128  private:
1129  bool hCheckValidity(MBase::String& irString);
1130  bool hBuildDate(Int32 iYear, Int32 iMonth, Int32 iDay);
1131  bool hBuildTime(Int32 iHour, Int32 iMinute, Int32 iSecond);
1132  MBase::String hDigitsToWString(Int32 iNumber);
1133  bool mIsValid;
1134  MBase::String mYear;
1135  MBase::String mMonth;
1136  MBase::String mDay;
1137  MBase::String mTime;
1138  static bool mIsInit;
1139  void hInit();
1140  void hTrimSpaces(MBase::String& iorString);
1141  };
1142 #ifndef _VE_CE
1144  {
1145  //Int32 mRow;
1146  //Int32 mCol;
1147  //Int32 mMetricIndex;
1148  //Int32 mThresholdIndex;
1149 
1152  double mValue;
1153  bool mIsNull;
1154  bool mIsDataInit; //if data is inited.
1155 
1156  bool IsNull(DSSRWGridIterator* ipIterator);
1157  double* GetValue(DSSRWGridIterator*); //For easier use.
1158  Int32 GetColor(); //Used when color is by metrics.
1159  Int32 GetSize(Int32 iOffset); //Not sure if this will be used.
1160 
1161  DataTableCell(void* ipController); //< To Be Delete
1162  DataTableCell();
1163 
1164  bool Populate(DSSRWGridIterator* ipIterator, Int32 iRowIndex, Int32 iColIndex);
1165  void Populate(Int32 iRowIndex, Int32 iColIndex);
1166  void PrintInfo(bool iHasOriginalIndex); //< for testing & debug.
1167 
1168  };
1169 
1170  class DataTableReformer //We expose this structre here for GM widget to compoute stacked value easily.
1171  {
1172  public:
1173 
1175  DataTableReformer(DSSRWGridIterator* ipIterator, DataSetReformInfo* ipReformInfo, bool iHasConsolidatedMetrics = false);
1178  void Delete();
1179  bool mIsValid; //whether valid for further operation or not.
1180  bool mIsReformed; //whether reform operation has been carried out or not.
1181  bool mHasMetrics; //whether there are metric cells for the input iterator (it could be filter out by grouping by metrics).
1182  bool mHasConsolidatedMetrics; //Whether the break-by unit is put on row axis.
1183 
1187  std::set<Int32> mAdditionalMetrics;
1188 
1190 
1191  bool Reform();
1192 
1194 
1195  DataTableCell* GetOneCell(Int32 iRowIndex, Int32 iColIndex, Int32 iColumnOffset = 0, bool iConsiderSeriesGroup = false);
1196 
1197  bool GetMaxMinValue(Int32 iGroupID, double& orMax, double& orMin, Int32 iStartSeriesIndex = 0, Int32 iSpan = 1, DATA_RETRIEVAL_TYPE iType = DRT_STACKED);
1198 
1199  Int32 GetGroupCount();
1202  void Dump(bool iHasOriginalIndex = false);
1204  protected:
1205  bool hPopulate(DSSRWGridIterator* ipIterator, DataSetReformInfo* ipReformInfo, bool iIsDataNeeded);
1206  //void hExpand(Int32 iBlockNumber, Int32 iBlockSize, std::vector<DataTableCell*>& orAllCells);
1207  //void hReform(std::vector<DataTableCell*>& irAllCells, int iBlockNumber, int iBlockSize, int iReformedDataGroup);
1208 
1209  DataTableCell** hExpand(Int32 iBlockNumber, Int32 iBlockSize, bool iIsColShuffled = false);
1210  void hReform(DataTableCell** ipAllCells, int iBlockNumber, int iBlockSize, int iReformedDataGroup);
1211  void hReformForHorzontalCateoryPieBreakCol(DataTableCell** ipAllCells, int iBlockNumber, int iBlockSize, int iReformedGroupNum);
1212  void hReformForCategoryPieCombineGroup(DataTableCell** ipAllCells, int iBlockNumber, int iBlockSize, int iCombineGroupNum);
1213  void hReformForCategoryPieCombineBlock(DataTableCell** ipAllCells, int iBlockNumber, int iBlockSize, int iCombineSliceNum);
1214  Int32 hGetSuffledColumnIndex(Int32 iInputIndex);
1215  void hBuildShuffledColumns(Int32 iSuiteCount, Int32 iDataMetricsNumber, Int32 iAddtionalMetricsNumber);
1216 
1217  private:
1218  DSSRWGridIterator* mpIterator; //<AE Iterator
1219  DataSetReformInfo* mpReformInfo; //<Reformed Information
1220  //std::vector<DataTableCell*> mAllCells; //<Array of all cells, stroed in "Row first" order. It contains both real and virtual cells.
1221  DataTableCell** mAllCells; //<Array of all cells, stroed in "Row first" order. It contains both real and virtual cells.
1222  std::vector<DataTableCell*> mDeleteCellsPool; //<A helper vector to hold all the real cells.
1223  Int32 mRealMetricNumber; //<Templatemetric number in the template.or when groupping by metrics, the selected number of metrics.
1224  bool mPerfHasDuplicatedData; //<For performance, additional metrics could be reused.
1225  bool mIsDataNeeded; //<For some case, like to compute the uniform axis width/heigh, we actually do not need the data part from dataset.
1226  Int32 mAllCellsCount; //<Cell number in total
1227  std::map<Int32, Int32> mShuffledColumns; //<Shuffle the mAllCells by column for horizontal chart with breakby
1228  };
1229 
1230 
1231  inline DataSetReformInfo* DataTableReformer::GetReformInfo() {return mpReformInfo;}
1232  inline Int32 DataTableReformer::GetRealMetricNumber() {return mRealMetricNumber;}
1233  inline void DataTableCell::Populate(Int32 iRowIndex, Int32 iColIndex) {mAERow = iRowIndex; mAECol = iColIndex;}
1234 #endif
1235 }
1236 #endif
CUSTOM_GROUP_LEVEL
Definition: DatasetHelper.h:565
Definition: DatasetHelper.h:782
virtual SLICE_TYPE GetSliceType()
Definition: DatasetHelper.h:36
virtual void MapIndexToParentalDataset(Int32 iSeriesIndex, Int32 iGroupIndex, Int32 &orSeriesIndex, Int32 &orGroupIndex)
void SetIsLink(bool iIsLink)
Definition: DatasetHelper.h:568
MBase::String BuildLabelWithOption(Int32 iIndex, LABEL_LEVEL_OPTION iOption)
CComVariant * mpNumberCategory
Definition: DatasetHelper.h:83
Int32 mBeginLayer
Definition: DatasetHelper.h:1047
double mValue
Definition: DatasetHelper.h:1152
BASE_FORMAT_TYPE
Definition: DatasetHelper.h:30
static DimTree * ToTree(bool iIsForRow, DSSTemplate *ipTemplate, DSSRWGridIterator *ipGridIterator, Int32 iBeginLayer=0, Int32 iEndLayer=-1, bool iIsShowSubtotal=true)
bool IsNull(DSSRWGridIterator *ipIterator)
static Int32 hIsUnitForTimeSeries(DSSTemplateUnit *ipUnit)
void hReform(DataTableCell **ipAllCells, int iBlockNumber, int iBlockSize, int iReformedDataGroup)
virtual HRESULT GetSeriesCount(Int32 &orSeriesCount)
Definition: DatasetHelper.h:45
Definition: DatasetIOSHelper.h:34
std::vector< DimNode * > mChildren
Children nodes.
Definition: DatasetHelper.h:446
std::map< Int32, Int32 > mDepthToUnitIndex
Depth index to unit index.
Definition: DatasetHelper.h:900
float mGroupPos
Each node&#39;s group index.
Definition: DatasetHelper.h:445
void hGetFormatString(DSSTemplateUnit *ipUnit)
DataTableCell * GetOneCell(Int32 iRowIndex, Int32 iColIndex, Int32 iColumnOffset=0, bool iConsiderSeriesGroup=false)
FormattedDataString(const void *ipData, TMLocaleInfo *ipLocale, Int32 iIndex)
Definition: DatasetHelper.h:185
Int32 mBeginDepth
Definition: DatasetHelper.h:1050
Definition: DatasetHelper.h:460
Definition: DatasetIOSHelper.h:24
virtual bool Update(Int32 iBeinSeries, Int32 iEndSeries, Int32 iBeginGroup, Int32 iEndGroup)
unsigned char DSSDataFlag
Definition: Dataset.h:45
#define _ASSERT(x)
Definition: Asserte.h:34
bool mIsDataInit
Definition: DatasetHelper.h:1154
Definition: DatasetHelper.h:33
bool mIsValid
Definition: DatasetHelper.h:480
CComVariant * mpNumberFormat
Definition: DatasetHelper.h:1072
Int32 mEndLayer
Definition: DatasetHelper.h:1048
bool hMoveIteratorToPosition(Int32 iPosition)
Definition: DatasetHelper.h:925
bool hPopulateOneDim(DimTree *ipTree, DSSTemplateUnit *ipUnit, Int32 iDepth, std::vector< DimNode *> &irParentalSet, std::vector< std::pair< Int32, Int32 > > &irParentalOccypySet, bool iIsBuiltByOrdinal=false)
virtual HRESULT GetGroupCount(Int32 &orGroupCount)
Int32 mColCount
Definition: DatasetHelper.h:1185
void hReformForCategoryPieCombineGroup(DataTableCell **ipAllCells, int iBlockNumber, int iBlockSize, int iCombineGroupNum)
virtual Int32 MapSreiesToParentalDataset(Int32 iSeriesIndex)
std::vector< DimNode * > mLeafNodes
Leaf nodes, used for getting plain labels.
Definition: DatasetHelper.h:895
Int32 mAECol
Definition: DatasetHelper.h:1151
Int32 GetTreeWidth(Int32 iDimLayer, bool iIsActualSize=false, bool iIsSqueezeHCG=true)
Definition: DatasetHelper.h:736
Definition: Dataset.h:74
virtual HRESULT GetGroupCount(Int32 &orGroupCount)
Int32 mOrdinal
The ordinal for this node - only used for leafnode.
Definition: DatasetHelper.h:444
FormatInfo mFormatInfo
Definition: DatasetHelper.h:1068
std::map< Int32, Int32 > mUnitIndexToStartDepthIndex
unit index –> its start index.
Definition: DatasetHelper.h:901
void FormatYMD(const std::string &iFullString, std::vector< std::string > &iorParts)
Definition: DatasetHelper.h:567
Definition: DatasetHelper.h:41
virtual Int32 MapGroupToParentalDataset(Int32 iGroupIndex)
Definition: DatasetHelper.h:52
std::vector< std::pair< Int32, Int32 > > mOccupyPairSet[2]
Definition: DatasetHelper.h:594
DataPiece(SLICE_TYPE iType, Dataset *ipParent)
MBase::String GetTemplateUnitElementName(Int32 iDimLayer, Int32 iIndexInsideDim, Int32 iFormIndex=0, MBase::String iSeperator=L" ", bool iIsSqueezeHCG=true)
Definition: DatasetHelper.h:670
bool Populate(DSSRWGridIterator *ipIterator, Int32 iRowIndex, Int32 iColIndex)
virtual bool IsValid()
UnitInfo()
Definition: DatasetHelper.h:462
Definition: DatasetHelper.h:569
Definition: DSSAxis.h:18
bool hIsHierarchicalCustomGroup(DSSTemplateUnit *ipUnit)
bool mIsNull
Definition: DatasetHelper.h:1153
FormattedDataString(const MBase::String &iText)
Definition: DatasetHelper.h:198
Int32 mCustomGroupNum[2]
Definition: DatasetHelper.h:577
Definition: Base/Base/GUID.h:365
bool mShowSubtotalValue
Definition: DatasetHelper.h:1057
Int32 mAxisId
Definition: DatasetHelper.h:1053
std::vector< FormattedDataString > StringForms
Definition: DatasetHelper.h:612
virtual bool GetRange(Int32 &iBeinSeries, Int32 &iEndSeries, Int32 &iBeginGroup, Int32 &iEndGroup)
bool mIsIncludeTime
Definition: DatasetHelper.h:981
Definition: DSSTemplateUnit.h:19
FormattedDataString()
Definition: DatasetHelper.h:160
Definition: DatasetHelper.h:35
long HRESULT
Definition: FragmentedString.h:20
Dataset * mpParent
Dataset instance pointer.
Definition: DatasetHelper.h:312
std::set< Int32 > mAdditionalMetrics
Definition: DatasetHelper.h:1187
DataSlice(Int32 iBeginGroup, Int32 iEndGroup, Int32 iBeginSeries, Int32 iEndSeries, Dataset *ipParent, SLICE_TYPE iType=SLICE_STEPWISE)
Int32 hGetSuffledColumnIndex(Int32 iInputIndex)
bool hasCustomGroupInColumn()
Definition: DatasetHelper.h:592
MBase::String GetTemplateUnitName(Int32 iDimLayer, bool iUseAlias=false, bool iIsSqueezeHCG=true)
Definition: DatasetHelper.h:656
void ConvertToDateTimeParts(const void *ipDateData, std::vector< std::string > &iorParts)
#define _ASSERTE(x)
Definition: Asserte.h:40
void SetDateTimeInfo(DateTimeInfo *ipDateTimeInfo)
TMLocaleInfo * mpLocale
Definition: DatasetHelper.h:105
std::map< MBase::GUID, DSSTEMPLATECUSTOMGROUP * > mIDToTemplateCustomGroup
Definition: DatasetHelper.h:596
std::string mTimeFormatRule
Definition: DatasetHelper.h:979
bool mHasMetrics
Definition: DatasetHelper.h:553
bool IsLastAttrToDisplay(DimNode *ipNode)
Definition: DatasetHelper.h:69
virtual bool GetGroupRange(Int32 &orBeginGroup, Int32 &orEndGroup)
static std::map< MBase::String, MBase::String > msMonthlyMap
Definition: DatasetHelper.h:1127
std::vector< FormattedDataString > * StringFormsPtr
Definition: DatasetHelper.h:613
bool hasCustomGroupInRow()
Definition: DatasetHelper.h:591
Definition: DatasetHelper.h:34
FormStringPool mDimString
Data used for storing label string information.
Definition: DatasetHelper.h:858
Definition: DatasetIOSHelper.h:14
Definition: DSSRWGridIterator.h:68
bool mHasRunTimeUnit
Definition: DatasetHelper.h:1055
Definition: DSSTemplateDimension.h:20
DateTimeIndex()
Definition: DatasetHelper.h:89
DimTree()
Definition: DatasetHelper.h:620
MBase::String ToFormattedDate(Int32 iFormatType, const MBase::String iSerperator=L"-", bool iIsShorten=true, Int32 iTimeLenght=5)
Definition: DatasetHelper.h:573
Definition: DSSTemplate.h:29
Int32 mSize
Definition: DatasetHelper.h:79
Definition: DSSTemplateCustomGroup.h:17
void GetElementNames(std::vector< MBase::String > &orElements)
Definition: DatasetHelper.h:524
SLICE_TYPE
Definition: Dataset.h:77
static void ResolveLinkText(const MBase::String &irBaseStr, MBase::String &iorText, LINK_TEXT_TYPE iWantType=LINK_TEXT_DISPLAY)
std::pair< MBase::GUID, MBase::String > ElementInfo
Definition: DatasetHelper.h:487
DLL_BASE_EXIM ReturnWString UTF8ToWideChar(const char *ipUTF8, bool ibUseSubstitutionCharacter=false)
MBase::String GetFormattedString(DimNode *ipNode, bool iIsAbbreviated=false)
Get Formatted Label String Piece.
Definition: Dataset.h:198
TMLocaleInfo * mpLocale
For postponed date/time formatting –xxiao.
Definition: DatasetHelper.h:904
std::vector< std::pair< Int32, Int32 > > mOccupyPairSet
Definition: DatasetHelper.h:557
Int32 GetMemoryUsageEstimation()
Definition: DatasetHelper.h:533
void hGetChildCountSet(std::vector< std::pair< Int32, Int32 > > &orOccupySet, Int32 iDepth, bool iIsBuiltByOrdinal=false)
Definition: DatasetHelper.h:570
std::vector< std::vector< std::vector< FormattedDataString > > *> FormStringPool
Definition: DatasetHelper.h:614
bool GetElementContent(std::vector< FormattedDataString > &orForms, DSSTemplateUnit *ipUnit, Int32 iDepth)
float GetMemoryUsageEstimation()
Definition: DatasetHelper.h:639
Definition: DatasetHelper.h:316
void SetFormattedDataStringText(const MBase::String &iText)
Int32 mIndex
Definition: DatasetHelper.h:106
bool mIsValid
Definition: DatasetHelper.h:956
virtual void SetSliceType(SLICE_TYPE iType=SLICE_STEPWISE)
CComVariant mNumberCategory
Definition: DatasetHelper.h:1069
void AddOneElement(const MBase::GUID &iID, const MBase::String &iName)
Definition: DatasetHelper.h:506
virtual HRESULT GetSeriesCount(Int32 &orSeriesCount)
const double kNodeSizeFactor
Definition: DatasetHelper.h:61
Int32 mIndexInAxis
Definition: DatasetHelper.h:479
static bool hBuildOneDimNodeOnDate(DimNode **ipCurrentNode, DimNode *ipParentNode, int iDimIndex, FormattedDataString *ipContentToAdd, FormattedDataString *ipCurrentContent, DimTree *ipTree, bool iDimPathChagned)
std::vector< std::pair< Int32, Int32 > > getCustomGroupPositions(bool iIsRow)
Int32 mStartChild
the index of its first child into the layer it stays at.
Definition: DatasetHelper.h:451
void Dump(bool iHasOriginalIndex=false)
~FormattedDataString()
Definition: DatasetHelper.h:222
Int32 mIndex
The index in this dimensionality.
Definition: DatasetHelper.h:443
~DateTimeInfo()
Definition: DatasetHelper.h:74
bool mIsValid
Definition: DatasetHelper.h:1179
MBase::String GetPlainLabels(unsigned Int32 iGroupIndex, bool iSuppressLastLevel=false, LABEL_LEVEL_OPTION iOption=LLO_NORMAL)
Get plain label with specified GroupIndex.
void hReformForHorzontalCateoryPieBreakCol(DataTableCell **ipAllCells, int iBlockNumber, int iBlockSize, int iReformedGroupNum)
void RightMostOffspringForPathInfo(std::vector< Int32 > &iorPathInfo)
MBase::String ToTime(bool iIsShorten, Int32 iLength)
unsigned Int32 GetDim()
Definition: DatasetHelper.h:843
DateTimeIndex(const void *ipData, TMLocaleInfo *ipLocale, Int32 iIndex)
Definition: DatasetHelper.h:91
EnumDSSDataType
Definition: DSSIPhoneEnums.h:39
DateTimeInfo()
Definition: DatasetHelper.h:71
MetricUnitInfo::Ptr mMetricPtr
MetricInfo, could be null.
Definition: DatasetHelper.h:899
MBase::String ToYear(bool iIsShorten)
void GetOneElement(MBase::GUID &orID, MBase::String &orName, Int32 iIndex)
Definition: DatasetHelper.h:507
FormattedDataString & operator=(const FormattedDataString &x)
Definition: DatasetHelper.h:131
Definition: DatasetHelper.h:1111
Definition: DatasetHelper.h:385
MBase::GUID mID
Definition: DatasetHelper.h:482
DataStrip(const std::vector< Int32 > &irSeriesIndex, const std::vector< Int32 > &irGroupIndex, Dataset *ipParent)
#define Int32
Definition: BasicTypes.h:20
bool operator==(const DateTimeIndex &x) const
std::vector< MBase::String > mAttributes
Attr Names, added by dshi. //for phrase 1.
Definition: DatasetHelper.h:896
DataTableCell ** hExpand(Int32 iBlockNumber, Int32 iBlockSize, bool iIsColShuffled=false)
Definition: DatasetHelper.h:51
virtual void MapIndexToParentalDataset(Int32 iSeriesIndex, Int32 iGroupIndex, Int32 &orSeriesIndex, Int32 &orGroupIndex)
struct _GUID GUID
Int32 GetTreeDepth(bool iIsSqueezeHCG=true)
Definition: DatasetHelper.h:726
Int32 hCountElementsInRange(Int32 iDepth, Int32 lStart, Int32 lEnd)
bool mIsReformed
Definition: DatasetHelper.h:1180
Int32 mType
Definition: DatasetHelper.h:483
const void * mpData
Definition: DatasetHelper.h:78
Definition: DatasetHelper.h:43
double * GetValue(DSSRWGridIterator *)
std::map< Int32, Int32 > mUnitIndexToStartDepthIndex
Definition: DatasetHelper.h:1067
bool mShowNode
Whether the node is shown or not.
Definition: DatasetHelper.h:448
Int32 Find(Int32 iDimIndex, StringFormsPtr ipString)
DimNode * RightOrBottomMost()
Definition: DatasetHelper.h:439
DataTableReformer(DSSRWGridIterator *ipIterator, DataSetReformInfo *ipReformInfo, bool iHasConsolidatedMetrics=false)
unsigned Int32 GetLeafCount() const
Get Leaf Count(Group Count)
CComVariant * mpNumberFormat
Definition: DatasetHelper.h:84
std::vector< GUID > mIDs
Template Unit IDs For this Axis. //for phrase 2.
Definition: DatasetHelper.h:898
bool IsLastAttrOfDateStyle()
Time Series Decider: used for time series.
MBase::String GetName()
Definition: DatasetHelper.h:478
Int32 mReformedDataGroup
Definition: DatasetHelper.h:1186
bool GetMaxMinValue(Int32 iGroupID, double &orMax, double &orMin, Int32 iStartSeriesIndex=0, Int32 iSpan=1, DATA_RETRIEVAL_TYPE iType=DRT_STACKED)
CustomGroupUnitInfo(DSSRWGRIDITERATOR *ipIterator)
Definition: DatasetHelper.h:583
std::string mDateFormatRule
Definition: DatasetHelper.h:978
std::vector< std::string > mDateSeperators
Definition: DatasetHelper.h:982
MBase::GUID GetID()
Definition: DatasetHelper.h:475
Int32 GetType()
Definition: DatasetHelper.h:477
MetricUnitInfo(DSSTEMPLATE *ipTemplate)
Definition: DatasetHelper.h:500
const void * mpData
Definition: DatasetHelper.h:104
Int32 mOffspringCount
the leafnode coverd by the subtree rooted at this node –dshi
Definition: DatasetHelper.h:450
void * mpLocale
Definition: DatasetHelper.h:977
bool GetRowHeadersForChildren(std::vector< MBase::String > &orLabels)
MBase::String ToMonth(bool iIsDigital, bool iIsShorten=false)
std::map< Int32, std::pair< Int32, Int32 > > mHCGMap
Hierachical CG unit [UnitIndex ==> <startDepth, width>].
Definition: DatasetHelper.h:902
Definition: Allocator.h:47
bool hPopulate(DSSRWGridIterator *ipIterator, DataSetReformInfo *ipReformInfo, bool iIsDataNeeded)
Int32 mBalancedGroupCount
Definition: DatasetHelper.h:1203
Definition: DatasetHelper.h:1170
LINK_TEXT_TYPE
Definition: DatasetHelper.h:48
DimNode * mpParent
The node&#39;s parent.
Definition: DatasetHelper.h:447
FormattedDataString(const FormattedDataString &x)
Definition: DatasetHelper.h:111
Int32 Add(Int32 iDimIndex, StringFormsPtr ipString)
GUID GetMetricID(Int32 iIndex)
Definition: DatasetHelper.h:513
Definition: Dataset.h:116
bool mHasMetrics
Definition: DatasetHelper.h:1181
#define DSSRWGRIDITERATOR
Definition: DatasetHelper.h:18
Definition: DatasetHelper.h:608
DSSTemplate * mpTemplate
Definition: DatasetHelper.h:1059
std::map< Int32, Int32 > mDepthToUnitIndex
Definition: DatasetHelper.h:1066
#define DSSTEMPLATE
Definition: DatasetHelper.h:16
Definition: DatasetHelper.h:1004
virtual bool GetGroupRange(Int32 &orBeginGroup, Int32 &orEndGroup)
Definition: DSSIPhoneEnums.h:14
virtual Int32 MapSreiesToParentalDataset(Int32 iSeriesIndex)
void LevelTraverse()
Traverse the tree, get each node&#39;s GroupIndex.
DateTimeParser(MBase::String &irString)
void * mpDateFormatter
Definition: DatasetHelper.h:980
Definition: StrongPtr.h:50
MBase::String mName
Definition: DatasetHelper.h:484
Int32 mMetricNumber
Definition: DatasetHelper.h:554
std::basic_string< WCHAR, std::char_traits< WCHAR >, Allocator< WCHAR > > String
Definition: BaseString.h:26
MBase::String GetString(DimNode *ipNode, Int32 iFormIndex=-1, MBase::String lSeperator=L" ", LINK_TEXT_TYPE iType=LINK_TEXT_DISPLAY)
static DimTree * hPopulateTimeSeriesTree(bool iIsForRow, DSSTemplateUnit *iDateUnit, DSSTemplate *ipTemplate, DSSRWGridIterator *ipGridIterator, Int32 iTreeDepth)
DataTableReformer * Ptr
Definition: DatasetHelper.h:1174
void GetStringPathToRoot(std::vector< MBase::String > &orPath, DimNode *ipNode)
Definition: DatasetHelper.h:644
SLICE_TYPE mType
Sliced Type.
Definition: DatasetHelper.h:310
Int32 mDim
The dimensionality of the node.
Definition: DatasetHelper.h:442
bool operator==(const FormattedDataString &irDataString) const
std::vector< Int32 > mFormStyles
the formtype for displayed form, used in time series.
Definition: DatasetHelper.h:903
void SetData(const void *ipData, EnumDSSDataType iType, DSSDataFlag iFlag, Int32 iSize, Int32 iBaseFormType, FormatInfo &iFormat, CComVariant *ipNumberCategory, CComVariant *ipNumberFormat)
Int32 GetLeafNodesByRoot(Int32 iDimLayer, Int32 iIndexInsideDim, bool iIsSqueezeHCG=true)
Definition: DatasetHelper.h:760
Definition: ABLPlot.h:21
bool SetRowColIndex(Int32 iRowIndex, Int32 iColIndex)
MBase::String GetDateByDateOrderType(MBase::String &irYear, MBase::String &irMonth, MBase::String &irDay, MBase::String irHour=L"00", MBase::String irMinute=L"00", MBase::String irSecond=L"00")
std::map< MBase::GUID, DSSTEMPLATEMETRIC * > mIDToTemplateMetric
Definition: DatasetHelper.h:558
bool mIsForRow
Definition: DatasetHelper.h:1056
bool operator!=(const FormattedDataString &irDataString) const
Definition: DatasetHelper.h:248
Definition: DatasetHelper.h:67
~DimStringContainer()
Definition: DatasetHelper.h:793
virtual HRESULT GetGroupCount(Int32 &orGroupCount)
Int32 GetIndex()
Definition: DatasetHelper.h:476
virtual void MapIndexToParentalDataset(Int32 iSeriesIndex, Int32 iGroupIndex, Int32 &orSeriesIndex, Int32 &orGroupIndex)
Int32 mAERow
Definition: DatasetHelper.h:1150
MetricUnitInfo(MBase::String &iName, MBase::GUID &iID, Int32 iIndex, Int32 iType)
Definition: DatasetHelper.h:494
Definition: Dataset.h:79
Definition: DatasetHelper.h:1143
MBase::String GetAttributeName()
virtual bool Update(Int32 iBeinSeries, Int32 iEndSeries, Int32 iBeginGroup, Int32 iEndGroup)
Definition: DSSCustomGroup.h:19
std::vector< Int32 > mWidths
Width for each unit.
Definition: DatasetHelper.h:897
void Populate(DimTree *ipRowTree, DimTree *ipColTree)
Definition: DatasetHelper.h:50
DateTimeIndex * GetDateTimeIndex()
void PrintInfo(bool iHasOriginalIndex)
Definition: DatasetHelper.h:32
bool GetRowHeader(MBase::String &orLabel)
Definition: DSSTemplateMetric.h:20
Definition: DSSTemplateAttribute.h:20
virtual bool GetRange(Int32 &iBeinSeries, Int32 &iEndSeries, Int32 &iBeginGroup, Int32 &iEndGroup)
bool mIsInRowAxis
Definition: DatasetHelper.h:552
DataSetReformInfo * GetReformInfo()
Definition: DatasetHelper.h:1231
MBase::String GetFormattedDataStringText()
Definition: DatasetHelper.h:279
CustomGroupUnitInfo(MBase::String &iName, MBase::GUID &iID, Int32 iIndex, Int32 iType)
Definition: DatasetHelper.h:579
MBase::String GetMetricName(Int32 iIndex)
Definition: DatasetHelper.h:519
~DateTimeIndex()
Definition: DatasetHelper.h:93
virtual Int32 MapGroupToParentalDataset(Int32 iGroupIndex)
int mDateOrderType
Definition: DatasetHelper.h:983
Int32 MetricIDToTemaplateMetricIndex(GUID &irID)
Definition: Msi_ccomvariant.h:24
unsigned Int32 GetDim(bool iIsSqueezeHCG=true)
Return number of dimension.
static DimTree * ToTimeSeriesTree(bool iIsForRow, DSSTemplate *ipTemplate, DSSRWGridIterator *ipGridIterator, Int32 iBeginLayer=0, Int32 iEndLayer=-1, bool iIsShowSubtotal=true)
DimNode * LeftOrTopMost()
Definition: DatasetHelper.h:434
Definition: DatasetHelper.h:42
void hBuildShuffledColumns(Int32 iSuiteCount, Int32 iDataMetricsNumber, Int32 iAddtionalMetricsNumber)
LABEL_LEVEL_OPTION
Definition: Dataset.h:114
Definition: DatasetHelper.h:1045
TMLocaleInfo(Int32 iPartsNumber)
bool GetElementContentFromDimension(std::vector< FormattedDataString > &orForms, DSSTemplateDimension *ipUnit, Int32 iDepth)
Int32 GetElementNumber()
Definition: DatasetHelper.h:531
static DimTree * hPopulateTree(DSSRWGridIterator *ipGridIterator, DSSTemplate *ipTemplate, bool iIsRow, Int32 iBeginLayer, Int32 iEndLayer, bool iIsShowSubtotal=true)
static bool hHasRepeatedElementAt(DSSRWGridIterator *ipGridIterator, Int32 iAxisId, Int32 iDepth)
MBase::String mText
Definition: DatasetHelper.h:264
void Delete()
Definition: DatasetHelper.h:629
Definition: DatasetHelper.h:349
virtual Int32 MapSreiesToParentalDataset(Int32 iSeriesIndex)
bool GetAttrElementContent(std::vector< FormattedDataString > &orForms, DSSTemplateAttribute *ipAttr, Int32 iDepth, bool iIsSubtotal)
DimStringContainer mLabelCon
Dimensional String.
Definition: DatasetHelper.h:893
Int32 mEndDepth
Definition: DatasetHelper.h:1051
virtual bool Update(const std::vector< Int32 > &irSeriesIndex, const std::vector< Int32 > &irGroupIndex)
TM_LABEL_PART
Definition: DatasetHelper.h:39
virtual Int32 MapGroupToParentalDataset(Int32 iGroupIndex)
FormattedDataString GetElementStringPiece(DSSTemplateUnit *ipUnit, const void *ipData, EnumDSSDataType iType, DSSDataFlag iFlag, Int32 iSize, Int32 iBaseFormType)
Int32 GetSize(Int32 iOffset)
FormattedDataString(const void *ipData, EnumDSSDataType iType, DSSDataFlag iFlag, Int32 iSize, Int32 iBaseFormType, FormatInfo &iFormat, CComVariant *ipNumberCategory, CComVariant *ipNumberFormat)
Definition: DatasetHelper.h:172
Definition: DatasetHelper.h:490
DateTimeInfo * GetDateTimeInfo()
Int32 mBaseFormType
Definition: DatasetHelper.h:82
Definition: DatasetHelper.h:44
MBase::StrongPtr< DimNode > mRoot
Root node for the tree.
Definition: DatasetHelper.h:894
bool operator!=(const DateTimeIndex &x) const
Definition: DatasetHelper.h:98
Int32 mRowCount
Definition: DatasetHelper.h:1184
virtual bool GetRange(std::vector< Int32 > &orSeriesIndex, std::vector< Int32 > &orGroupIndex)
void hReformForCategoryPieCombineBlock(DataTableCell **ipAllCells, int iBlockNumber, int iBlockSize, int iCombineSliceNum)
DSSRWGridIterator * mpGridIterator
Definition: DatasetHelper.h:1060
virtual HRESULT GetSeriesCount(Int32 &orSeriesCount)
FormattedDataString(const std::string &iText)
Definition: DatasetHelper.h:210
Int32 mWidth
The size of child —dshi.
Definition: DatasetHelper.h:449
#define NULL
Definition: Null.h:10
bool ToColumnRange(Int32 &orBegin, Int32 &orEnd)
DSSTemplateMetric * GetTemplateMetric(MBase::GUID &irID)
bool mHasConsolidatedMetrics
Definition: DatasetHelper.h:1182
static Int32 hBuildSubtreeOnDate(DSSRWGridIterator *ipGridIterator, DimTree *&ipTree, Int32 iPreOrdinal, Int32 iOridanlCount, Int32 iFormId, bool iIsForRow, bool iIsIncludingTime)
DSSTEMPLATECUSTOMGROUP * getCustomGroupInAxis(int iAxis, int iDepth, CUSTOM_GROUP_LEVEL &iLevel)
void AddLevel()
Definition: DatasetHelper.h:634
std::vector< ElementInfo > mElements
Definition: DatasetHelper.h:556
bool mIsValid
This flag denotes the validity of the data piece object, if it is ture, then this object is ready for...
Definition: DatasetHelper.h:311
MBase::String ToDay(bool iIsShorten)
void SetDateTimeIndex(DateTimeIndex *ipDateTimeIndex)
CComVariant * mpNumberCategory
Definition: DatasetHelper.h:1071
#define DSSTEMPLATECUSTOMGROUP
Definition: DatasetHelper.h:19
MSynch::SmartPtr< MetricUnitInfo > Ptr
Definition: DatasetHelper.h:492
UnitInfo(MBase::String &iName, GUID &iID, Int32 iIndex, Int32 iType)
Definition: DatasetHelper.h:470
std::map< Int32, std::pair< GUID, Int32 > > mCustomGroupIndexToElement[2]
Definition: DatasetHelper.h:598
std::map< Int32, MBase::GUID > mCustomGroupIndexToID[2]
Definition: DatasetHelper.h:595
CComVariant mNumberFormat
Definition: DatasetHelper.h:1070
DSSDataFlag mFlag
Definition: DatasetHelper.h:81
Definition: DatasetHelper.h:87
Definition: Base/Base/GUID.h:32
DATA_RETRIEVAL_TYPE
Definition: Dataset.h:70
Int32 GetRealMetricNumber()
Definition: DatasetHelper.h:1232
Definition: DatasetHelper.h:974
virtual bool GetGroupRange(Int32 &orBeginGroup, Int32 &orEndGroup)
static bool hTraverseTreeForCompletion(DimNode *ipNode, DimTree *ipTree)
std::vector< DimNode * > GetDimNodes(unsigned Int32 iDimIndex, bool iIsSqueezeHCG=true)
return all the nodes
bool MoveDownToken(Int32 iIndex)
Definition: Dataset.h:152
Int32 mCurrentDepth
Definition: DatasetHelper.h:1052
Definition: FormatInfo.h:60
EnumDSSDataType mType
Definition: DatasetHelper.h:80
virtual HRESULT GetData(Int32 iSeriesID, Int32 iGroupID, const double *&iorValue, Int32 iColumnOffset=0)
DimNode * RightMostOffspring()
static DataTableCell globalCell
Definition: DatasetHelper.h:1189
DimNode(Int32 iDim, Int32 iIndex)
Definition: DatasetHelper.h:393
bool hMoveIteratorByElement(Int32 iDepth, bool iIsWithBoundaryCheck, bool iIsForward)
MSynch::SmartPtr< CustomGroupUnitInfo > Ptr
Definition: DatasetHelper.h:575