Page tree
Skip to end of metadata
Go to start of metadata

Introduction

SAC BW Live Connectivity Search is based on the BW BICS Object Service, that provides a fast, lean and simple way to select BW Metadata. Besides a logic of interpreting the search string, the new service is mainly a dispatcher between a couple of "BW Entities" and a HANA-based so called "TRex Search for BW Repository Objects". This fast search (aka "BW Search", transaction "RSOSM") is also used e.g. in the BW Modeling Tools and is now available in ABAP BICS. However the "BW Search" framework cannot handle Transient CDS Queries and InfoProviders, therefore an additional interface is being developed. Introduction


As a matter of fact to be able to search for BW Queries as a base Object for SAC Models, "BW Search" is needed to be activated as it is described in NOTE 2243132-No queries are found using the INA catalog service.
To be able to search CDS Queries and InfoProviders, The following NOTE is needed to be implemented 2839014-BW HANA based Fast Search

AO and SAC BW Object TypesAvailable TLOGO objects for "BW Search"

           

INA Protocol

The INA HTTP calls related to the search functionality trigger the SICF service /sap/bw/ina/GetCatalog, so this service is also needed to be active.

Metadata Response

The DataSource in this case a technical object "$$DataSource$$" (Cube.DataSource.ObjectName.$$DataSource$$) with type "CatalogView2" (Cube.DataSource.Type.CatalogView2). There is a list of technical dimensions (Cube.Dimensions.Name.["SchemaName", "ObjectName", "BaseDataSource", "Type", "InfoArea", "QueryAlias"]) returned for the Metadata Response that are partially always, partially optionally filled by the Search Result Set response later on.

{
  "Cube": {
    "Annotations": "",
    "CatalogPackage": "",
    "CatalogSchema": "",
    "CatalogView": "",
    "LastDataUpdateBy": "SYSTEM",
    "Description": "Query Catalog",
    "CatalogType": "OLAP",
    "DataSource": {
      "ObjectName": "$$DataSource$$",
      "Type": "CatalogView2"
    },
    "ResultSetFeatureCapabilities": {
      "ResultFormat": [
        "Version2"
      ]
    },
    "Dimensions": [
      {
        "Name": "SchemaName",
        "Description": "SchemaName",
        "DimensionType": 3,
        "DataType": "String",
        "AxisDefault": "Rows",
        "ResultSetFixedAttributes": true,
        "AxisConstraints": [
          "Rows"
        ],
        "DefaultResultSetAttributes": [
          "SchemaName.KEY"
        ],
        "Attributes": [
          {
            "Name": "SchemaName.KEY",
            "IsKey": true,
            "Length": 0,
            "Decimals": 0,
            "InitialValue": "",
            "SortOrder": 0,
            "PresentationType": "Key",
            "Description": "",
            "IsFilterable": true,
            "DataType": "String"
          }
        ],
        "DefaultResultStructure": {
          "ResultAlignment": "",
          "ResultStructure": [
            {
              "Result": "Members",
              "Visibility": "Visible"
            }
          ]
        },
        "NameExternal": "",
        "Length": 0,
        "Hierarchies": [],
        "LevelHierarchies": []
      },
      {
        "Name": "ObjectName",
        "Description": "ObjectName",
        "DimensionType": 3,
        "DataType": "String",
        "AxisDefault": "Rows",
        "AxisConstraints": [
          "Rows"
        ],
        "DefaultResultSetAttributes": [
          "ObjectName.KEY",
          "ObjectName.LONG_TEXT"
        ],
        "Attributes": [
          {
            "Name": "ObjectName.KEY",
            "IsKey": true,
            "Length": 0,
            "Decimals": 0,
            "InitialValue": "",
            "SortOrder": 0,
            "PresentationType": "Key",
            "Description": "",
            "IsFilterable": true,
            "DataType": "String"
          },
          {
            "Name": "ObjectName.LONG_TEXT",
            "Length": 0,
            "Decimals": 0,
            "InitialValue": "",
            "SortOrder": 0,
            "PresentationType": "Text",
            "Description": "",
            "IsFilterable": true,
            "DataType": "String"
          }
        ],
        "DefaultResultStructure": {
          "ResultAlignment": "",
          "ResultStructure": [
            {
              "Result": "Members",
              "Visibility": "Visible"
            }
          ]
        },
        "NameExternal": "",
        "Length": 0,
        "Hierarchies": [],
        "LevelHierarchies": []
      },
      {
        "Name": "BaseDataSource",
        "Description": "BaseDataSource",
        "DimensionType": 3,
        "DataType": "String",
        "AxisDefault": "Rows",
        "ResultSetFixedAttributes": true,
        "AxisConstraints": [
          "Rows"
        ],
        "DefaultResultSetAttributes": [
          "BaseDataSource.KEY"
        ],
        "Attributes": [
          {
            "Name": "BaseDataSource.KEY",
            "IsKey": true,
            "Length": 0,
            "Decimals": 0,
            "InitialValue": "",
            "SortOrder": 0,
            "PresentationType": "Key",
            "Description": "",
            "IsFilterable": true,
            "DataType": "String"
          }
        ],
        "DefaultResultStructure": {
          "ResultAlignment": "",
          "ResultStructure": [
            {
              "Result": "Members",
              "Visibility": "Visible"
            }
          ]
        },
        "NameExternal": "",
        "Length": 0,
        "Hierarchies": [],
        "LevelHierarchies": []
      },
      {
        "Name": "Type",
        "Description": "Type",
        "DimensionType": 3,
        "DataType": "String",
        "AxisDefault": "Rows",
        "ResultSetFixedAttributes": true,
        "AxisConstraints": [
          "Rows",
          "Free"
        ],
        "DefaultResultSetAttributes": [
          "Type.KEY"
        ],
        "Attributes": [
          {
            "Name": "Type.KEY",
            "IsKey": true,
            "Length": 0,
            "Decimals": 0,
            "InitialValue": "",
            "SortOrder": 0,
            "PresentationType": "Key",
            "Description": "",
            "IsFilterable": true,
            "DataType": "String"
          }
        ],
        "DefaultResultStructure": {
          "ResultAlignment": "",
          "ResultStructure": [
            {
              "Result": "Members",
              "Visibility": "Visible"
            }
          ]
        },
        "NameExternal": "",
        "Length": 0,
        "Hierarchies": [],
        "LevelHierarchies": []
      },
      {
        "Name": "InfoArea",
        "Description": "InfoArea",
        "DimensionType": 3,
        "DataType": "String",
        "AxisDefault": "Rows",
        "AxisConstraints": [
          "Rows",
          "Free"
        ],
        "DefaultResultSetAttributes": [
          "InfoArea.KEY"
        ],
        "Attributes": [
          {
            "Name": "InfoArea.KEY",
            "IsKey": true,
            "Length": 0,
            "Decimals": 0,
            "InitialValue": "",
            "SortOrder": 0,
            "PresentationType": "Key",
            "Description": "",
            "IsFilterable": true,
            "DataType": "String"
          }
        ],
        "DefaultResultStructure": {
          "ResultAlignment": "",
          "ResultStructure": [
            {
              "Result": "Members",
              "Visibility": "Visible"
            }
          ]
        },
        "NameExternal": "",
        "Length": 0,
        "Hierarchies": [],
        "LevelHierarchies": []
      },
      {
        "Name": "QueryAlias",
        "Description": "QueryAlias",
        "DimensionType": 3,
        "DataType": "String",
        "AxisDefault": "Rows",
        "AxisConstraints": [
          "Rows",
          "Free"
        ],
        "DefaultResultSetAttributes": [
          "QueryAlias.KEY"
        ],
        "Attributes": [
          {
            "Name": "QueryAlias.KEY",
            "IsKey": true,
            "Length": 0,
            "Decimals": 0,
            "InitialValue": "",
            "SortOrder": 0,
            "PresentationType": "Key",
            "Description": "",
            "IsFilterable": true,
            "DataType": "String"
          }
        ],
        "DefaultResultStructure": {
          "ResultAlignment": "",
          "ResultStructure": [
            {
              "Result": "Members",
              "Visibility": "Visible"
            }
          ]
        },
        "NameExternal": "",
        "Length": 0,
        "Hierarchies": [],
        "LevelHierarchies": []
      }
    ]
  },
  "Grids": [],
  "DataAreas": [
    {
      "Name": "DEFAULT",
      "Environment": "",
      "Model": "",
      "CellLocking": "",
      "IsWorkStatusActive": false,
      "HasChangedData": false,
      "ChangeCounter": 0
    }
  ],
  "Messages": [],
  "PerformanceData": {
    "SessionId": "4VGQIK77R2ZUZRMPKRHN7UNRK",
    "StepId": "4VGQIK77R2ZUZRMPKRHN7UHG0",
    "Runtime": 0.004348,
    "Timestamp": "2020-10-17 09:45:40.631920",
    "Measurements": [
      {
        "Description": "Execution",
        "Calls": 1,
        "Time": 0.000773
      },
      {
        "Description": "JSON Parser",
        "Calls": 1,
        "Time": 0.001341
      },
      {
        "Description": "Prepare",
        "Calls": 1,
        "Time": 0.002234
      }
    ]
  }
}

ResultSet Request

The list of technical dimensions that are returned by the metadata response, is now requested to be filled in the result set request (Analytics.Definition.Dimensions.Name.["SchemaName", "ObjectName", "BaseDataSource", "Type"]). If we filtered a search in SAC, it is also presented in the Request (Analytics.Definition.Filter). The search, as well as the Filtering always happen on Internal Key (.KEY) and Long Text (.LONG_TEXT).

{
  "Analytics": {
    "Capabilities": [
      "AttributeHierarchy",
      "AttributeHierarchyHierarchyFields",
      "CartesianFilterIntersect",
      "CatalogServiceV20",
      "ClientCapabilities",
      "ClientInfo",
      "ComplexTupleFilter",
      "Conditions",
      "CubeBlending",
      "CubeBlendingPersistanceType",
      "CustomMeasureSortOrder",
      "CustomMemberKeySortOrder",
      "DatasourceAtService",
      "DefinitionReturnsVariableValues",
      "DetailedResponseExpansion",
      "DimF4SelectionWithCompoundment",
      "DimensionHierarchyLevels",
      "DynamicRestrictionOnFormula",
      "ExceptionAggregationDimsAndFormulas",
      "Exceptions",
      "ExceptionsV2",
      "ExpandHierarchyBottomUp",
      "ExtHierarchy",
      "ExtendedDimensionTypes",
      "ExtendedVariableDefinition",
      "F4FilterForTextField",
      "FastPath",
      "HierarchyLevelOffsetFilter",
      "HierarchyNameVariable",
      "HierarchyNavigationCounter",
      "INACurrentMember",
      "InitialDrillLevelRelative",
      "MDMHierarchyDrillLevel",
      "MDSLikePaging",
      "MaxResultRecords",
      "MetadataBaseMeasureName",
      "NewValuesExtendedFormat",
      "NewValuesImplicitUnlock",
      "Obtainability",
      "PagingTupleCountTotal",
      "PresentationLength",
      "QDataCells",
      "QueryCurrencyTranslation",
      "RRI",
      "ReadMode",
      "ReadModesV2",
      "RemoteBlending",
      "RespectUnassignedNodeSetting",
      "ResultSetAxisType",
      "ResultSetInterval",
      "ResultSetUnitIndex",
      "RsCellValueTypes",
      "SAPDate",
      "SemanticalErrorType",
      "ServerStructureNames",
      "SpatialChoropleth",
      "SpatialClustering",
      "SpatialFilterSRID",
      "StatefulServer",
      "StructureRestrictionsInValueHelp",
      "SubmitReturnsVariableValues",
      "Supplements",
      "SupportsCalculatedKeyFigures",
      "SupportsCummulative",
      "SupportsDataCellMixedValues",
      "SupportsDataRefresh",
      "SupportsDataRefreshAndDataTopicality",
      "SupportsDimensionFilterCapability",
      "SupportsDimensionTypeTime",
      "SupportsEncodedResultSet",
      "SupportsExtendedSort",
      "SupportsHierarchySelectionAsFlatSelection",
      "SupportsIgnoreExternalDimensions",
      "SupportsKeyfigureHierarchies",
      "SupportsMemberVisibility",
      "SupportsOperatorTotals",
      "SupportsOperatorVariance",
      "SupportsOriginalTexts",
      "SupportsRestrictedKeyFigures",
      "SupportsSetOperand",
      "SupportsSpatialFilter",
      "SupportsSpatialTransformations",
      "SupportsUniversalDisplayHierarchies",
      "SupportsVariableVariants",
      "SuppressKeyfigureCalculation",
      "SuppressSupplements",
      "TransientHierarchy1",
      "UnifiedDataCells",
      "UniversalDisplayHierarchyCustomDimensions",
      "ValueHelpWithAttributes",
      "VariableMasking",
      "VariableReSubmit",
      "ZeroSuppression"
    ],
    "DataSource": {
      "InstanceId": "7ba6c53f-9664-0a95-ce9c-b2754bbc3227",
      "ObjectName": "$$DataSource$$",
      "Type": "CatalogView2"
    },
    "Definition": {
      "Dimensions": [
        {
          "Attributes": [
            {
              "Name": "Type.KEY",
              "Obtainability": "UserInterface"
            }
          ],
          "Axis": "Rows",
          "Name": "Type",
          "NonEmpty": true,
          "ReadMode": "Booked",
          "ResultSetReadMode": "Booked"
        },
        {
          "Attributes": [
            {
              "Name": "SchemaName.KEY",
              "Obtainability": "UserInterface"
            }
          ],
          "Axis": "Rows",
          "Name": "SchemaName",
          "NonEmpty": true,
          "ReadMode": "Booked",
          "ResultSetReadMode": "Booked"
        },
        {
          "Attributes": [
            {
              "Name": "ObjectName.KEY",
              "Obtainability": "Always"
            },
            {
              "Name": "ObjectName.LONG_TEXT",
              "Obtainability": "Always"
            }
          ],
          "Axis": "Rows",
          "Name": "ObjectName",
          "NonEmpty": true,
          "ReadMode": "Booked",
          "ResultSetReadMode": "Booked"
        },
        {
          "Attributes": [
            {
              "Name": "BaseDataSource.KEY",
              "Obtainability": "UserInterface"
            }
          ],
          "Axis": "Rows",
          "Name": "BaseDataSource",
          "NonEmpty": true,
          "ReadMode": "Booked",
          "ResultSetReadMode": "Booked"
        }
      ],
      "Filter": {
        "Selection": {
          "Operator": {
            "Code": "And",
            "SubSelections": [
              {
                "SetOperand": {
                  "Elements": [
                    {
                      "Comparison": "=",
                      "Low": "Query"
                    }
                  ],
                  "FieldName": "Type.KEY"
                }
              },
              {
                "Operator": {
                  "Code": "Or",
                  "SubSelections": [
                    {
                      "SetOperand": {
                        "Elements": [
                          {
                            "Comparison": "MATCH",
                            "Low": "*GA_Q*"
                          }
                        ],
                        "FieldName": "ObjectName.KEY"
                      }
                    },
                    {
                      "SetOperand": {
                        "Elements": [
                          {
                            "Comparison": "MATCH",
                            "Low": "*GA_Q*"
                          }
                        ],
                        "FieldName": "ObjectName.LONG_TEXT"
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      },
      "Query": {
        "Axes": [
          {
            "Axis": "Columns",
            "Type": 2,
            "ZeroSuppressionType": 0
          },
          {
            "Axis": "Rows",
            "Type": 1,
            "ZeroSuppressionType": 0
          }
        ]
      },
      "QueryDataCells": [],
      "ResultSetFeatureRequest": {
        "ResultEncoding": "None",
        "ResultFormat": "Version2",
        "ResultKeepOriginalTexts": false,
        "SubSetDescription": {
          "ColumnFrom": 0,
          "ColumnTo": -1,
          "RowFrom": 0,
          "RowTo": 100
        },
        "UseDefaultAttributeKey": false
      },
      "Sort": []
    },
    "Language": "EN"
  },
  "ClientInfo": {},
  "Options": [
    "StatefulServer"
  ]
}

ResultSet Response

In the ResultSet Response, the technical dimensions are actually being filled strictly, or optionally (Grids.Axes.Dimensions.Name.["SchemaName", "ObjectName", "BaseDataSource", "Type"]). Type is Query, while the ObjectName holds the list of Queries in the search result and BaseDataSource holds the underlying InfoProviders.

{
  "Grids": [
    {
      "Axes": [
        {
          "Name": "Rows",
          "Dimensions": [
            {
              "Name": "Type",
              "Description": "Type",
              "Attributes": [
                {
                  "Name": "Type.KEY",
                  "Description": "Type.Internal Key",
                  "IsKey": true,
                  "Values": [
                    "Query"
                  ]
                }
              ],
              "MemberTypes": {
                "Encoding": "None",
                "Size": 1,
                "Values": [
                  0
                ]
              }
            },
            {
              "Name": "SchemaName",
              "Description": "SchemaName",
              "Attributes": [
                {
                  "Name": "SchemaName.KEY",
                  "Description": "SchemaName.Internal Key",
                  "IsKey": true,
                  "Values": [
                    ""
                  ]
                }
              ],
              "MemberTypes": {
                "Encoding": "None",
                "Size": 1,
                "Values": [
                  0
                ]
              }
            },
            {
              "Name": "ObjectName",
              "Description": "ObjectName",
              "Attributes": [
                {
                  "Name": "ObjectName.KEY",
                  "Description": "ObjectName.Internal Key",
                  "IsKey": true,
                  "Values": [
                    "GA_QUERY",
                    "GA_QUERY10",
                    "GA_QUERY11",
                    "GA_QUERY12",
                    "GA_QUERY13",
                    "GA_QUERY14",
                    "GA_QUERY15",
                    "GA_QUERY16",
                    "GA_QUERY17",
                    "GA_QUERY18",
                    "GA_QUERY19",
                    "GA_QUERY2",
                    "GA_QUERY20",
                    "GA_QUERY21",
                    "GA_QUERY22",
                    "GA_QUERY23",
                    "GA_QUERY24",
                    "GA_QUERY25",
                    "GA_QUERY26",
                    "GA_QUERY27",
                    "GA_QUERY28",
                    "GA_QUERY29",
                    "GA_QUERY3",
                    "GA_QUERY30",
                    "GA_QUERY31",
                    "GA_QUERY32",
                    "GA_QUERY33",
                    "GA_QUERY34",
                    "GA_QUERY35",
                    "GA_QUERY4",
                    "GA_QUERY5",
                    "GA_QUERY6",
                    "GA_QUERY7",
                    "GA_QUERY8",
                    "GA_QUERY9",
                    "GEO_H_QRY"
                  ]
                },
                {
                  "Name": "ObjectName.LONG_TEXT",
                  "Description": "ObjectName.Long Text",
                  "IsKey": false,
                  "Values": [
                    "GA_QUERY SAC Time Series/Time Variance 0CALDAY",
                    "GA_QUERY10 Customer Shape 2 Geo Type 4",
                    "GA_QUERY11 Geo Data Tuple Filter Geo Type 1",
                    "GA_QUERY12 Geo Data Tuple Filter Default Shape Geo Type 1",
                    "GA_QUERY13 Custom Shape 3 Geo Type 2",
                    "GA_QUERY14 Geo Data Compounded Geo Type 1",
                    "GA_QUERY15 Custom Shape 4 Attribute Hierarchy Geo Type 1",
                    "GA_QUERY16 Custom Sorting w/o Variables",
                    "GA_QUERY17 Custom Sortings w/ SPACE Single Selection Var.",
                    "GA_QUERY18 Custom Sorting w/ SPACE Hierarchy and NODE Var.",
                    "GA_QUERY19 Custom Sortings w/ STATE Single Selection Var.",
                    "GA_QUERY2 SAC Time Series/Time Variance w/o 0CALDAY",
                    "GA_QUERY20 Custom Sorting w/o Variables, w/ Two Structures",
                    "GA_QUERY21 Default Text",
                    "GA_QUERY22 Input Enabled for Zero Suppression",
                    "GA_QUERY23 PreCalculated Value Set",
                    "GA_QUERY24 REST_H",
                    "GA_QUERY25 Text NODE text",
                    "GA_QUERY26 Text NODE text_2",
                    "GA_QUERY27 Navigation Attribute",
                    "GA_QUERY28 Simple w Variables",
                    "GA_QUERY29 Exceptions",
                    "GA_QUERY3 SAC Time Series/Time Variance 0CALDAY",
                    "GA_QUERY30 Conditions",
                    "GA_QUERY31 Simple w/o Variables",
                    "GA_QUERY32 Simple w/o Variables DWC",
                    "GA_QUERY33 Simple w Variables DWC",
                    "GA_QUERY34 Simple hierarchy NODE filter DWC",
                    "GA_QUERY35 Simple Hierarchy REST_H DWC",
                    "GA_QUERY4 SAC Tuple Filter",
                    "GA_QUERY5 SAC Tuple Filter 2",
                    "GA_QUERY6 Geo Data",
                    "GA_QUERY7 Geo Data Default Shape Geo Type 1",
                    "GA_QUERY8 Custom Shape Gyo Type 2",
                    "GA_QUERY9 Custom Shape Geo Type 2",
                    "GA_QUERY10 Customer Shape 2 Geo Type 4_GEO_H_QRY"
                  ]
                }
              ],
              "MemberTypes": {
                "Encoding": "None",
                "Size": 36,
                "Values": [
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0
                ]
              }
            },
            {
              "Name": "BaseDataSource",
              "Description": "BaseDataSource",
              "Attributes": [
                {
                  "Name": "BaseDataSource.KEY",
                  "Description": "BaseDataSource.Internal Key",
                  "IsKey": true,
                  "Values": [
                    "GA_ADSO",
                    "GA_HCPR4",
                    "GA_HCPR5",
                    "GA_HCPR6",
                    "GA_HCPR7",
                    "GA_HCPR8",
                    "GA_HCPR9",
                    "GA_HCPR10",
                    "GA_ADSO2",
                    "GA_ADSO15",
                    "GA_ALVL1",
                    "GA_ADSO17",
                    "GA_ADSO18",
                    "GA_ADSO19",
                    "GA_HCPR11",
                    "GA_ADSO21",
                    "GA_ADSO3",
                    "GA_HCPR12",
                    "GA_ADSO4",
                    "GA_ADSO5",
                    "GA_HCPR",
                    "GA_HCPR2",
                    "GA_HCPR3",
                    "GEO_HCPR1"
                  ]
                }
              ],
              "MemberTypes": {
                "Encoding": "None",
                "Size": 24,
                "Values": [
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0
                ]
              }
            }
          ],
          "TupleCount": 36,
          "MaxTupleCount": 36,
          "TupleCountTotal": 36,
          "RootTuple": "",
          "Tuples": [
            {
              "MemberIndexes": {
                "Encoding": "None",
                "Size": 36,
                "Values": [
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0
                ]
              }
            },
            {
              "MemberIndexes": {
                "Encoding": "None",
                "Size": 36,
                "Values": [
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0
                ]
              }
            },
            {
              "MemberIndexes": {
                "Encoding": "None",
                "Size": 36,
                "Values": [
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  24,
                  25,
                  26,
                  27,
                  28,
                  29,
                  30,
                  31,
                  32,
                  33,
                  34,
                  35
                ]
              }
            },
            {
              "MemberIndexes": {
                "Encoding": "None",
                "Size": 36,
                "Values": [
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  7,
                  7,
                  7,
                  8,
                  7,
                  9,
                  10,
                  11,
                  12,
                  12,
                  13,
                  14,
                  15,
                  15,
                  16,
                  15,
                  15,
                  17,
                  17,
                  17,
                  17,
                  18,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23
                ]
              }
            }
          ]
        }
      ]
    }
  ],
  "DataAreas": [
    {
      "Name": "DEFAULT",
      "Environment": "",
      "Model": "",
      "CellLocking": "",
      "IsWorkStatusActive": false,
      "HasChangedData": false,
      "ChangeCounter": 0
    }
  ],
  "Messages": [],
  "PerformanceData": {
    "SessionId": "4VGQIK77R2ZUZRMPKRHN7UNRK",
    "StepId": "4VGQIK77R2ZUZRMPM4L278GYE",
    "Runtime": 2.132566,
    "Timestamp": "2020-10-17 09:46:29.570280",
    "Measurements": [
      {
        "Description": "Execution",
        "Calls": 1,
        "Time": 2.127093
      },
      {
        "Description": "JSON Parser",
        "Calls": 1,
        "Time": 0.004245
      },
      {
        "Description": "Prepare",
        "Calls": 1,
        "Time": 0.001228
      }
    ]
  }
}

BW search


T
ransaction RSOSM shall be used to maintain the whole BW Search on SAP HANA framework. Here you are able to (de-)activate BW Search, maintain available TLOGO objects, maintain required SAP HANA artifacts like Attribute Views and use the different search types. 

The meta data shall be retrieved directly from the specific TLOGO tables. Hence, the information per TLOGO object about required database tables, their relationship, main table, required database columns for search and for output of search results need to be maintained by each TLOGO object owner. Therefore a framework is needed which enables the TLOGO object owner to provide the BW Search framework with all the required information to generate a proper Attribute View, which can later be used during BW Search. The header meta data as well as the body meta data shall be combined into one great Attribute View per TLOGO object.

The meta data of a TLOGO object can be searched in via a set of generated Attribute Views in SAP HANA. The views are generated based on the provided information in transaction RSOSM. The views by default are put into subpackages of package system-local.bw.bwsearch. For each TLOGO object there's an own package, i.e. system-local.bw.bwsearch.ELEM with two subpackages METADATA and WHEREUSED. Package METADATA contains all views required to run a meta data search, the package WHEREUSED contains all views required to do a Where-Used search.

Each metadata package contains at least a view called PRIMARY which contains the primary table of the TLOGO object plus the TADIR table optionally, based on whether the TLOGO object retrieves its owner and creation date from the TADIR table. In addition the meta data package contains all views required to display the usage of other objects as maintained in transaction RSOSM.

When doing a Where-Used or Meta Data search, a SQL statement is generated which contains all views and i.e. joins the primary and Usage views based on the user's input.

The search for a base Query of a Model in SAC with BW Live Connectivity is expected to deliver the same result as the Test Framework for "BW Search ". It can be called with program RSOSN_SEARCH. The result in SAC is filtered for Repository types (REP) and for TLOGO object ELEM, while only Queries in A version shown.

Search result in SAC ModelerSearch Result in RSOSN_SEARCH

To sum it up, in order to be able to search for BW Queries in SAC with BW Live Connectivity, it is needed to have BW search Active and TLOGO ELEM (Query Element) is needed to be configured and set. 

Transient Object search

As "BW Search" does not support transient objects, a new service is used to extend the existing functionality. CDS View RSRTS_QF4_QueryProvider provides a list with all queries and there potential providers. One query might have multiple entries (dimensions used in associations are also included!) RSRTS_QF4_QueryProvider contains only released queries and is filtered by authorization. The View is also deployed by NOTE 2839014-BW HANA based Fast Search. Therefore it is also needed to make sure that the object is released as it is described in the following wiki page.

RSRTS_QF4_QueryProvider Data Preview

Important NOTEs

It is very important to follow Note 2541557-SAP Analytics Cloud with BW live connection below NW BW 7.50 SP16, BW/4 2.0 SP4 or S/4 1909 and run the attached report to implement the notes in the sequence from top to down. It is needed to make sure that all the NOTES are implemented and also the manual implementation steps are performed. This is the safest way to implement also the NOTEs stated below.

  • No labels