CDS Views Cube und Query für SAC

Alles über die SAPs In-Memory Datenbank HANA
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

CDS Views Cube und Query für SAC

Beitrag von kola (ForumUser / 20 / 5 / 0 ) »
Hallo,

ich bin ziemlich überfragt was das Thema CDS-Views angeht. Es soll einen bestimmten Report in der SAC geben, der mit CDS-Views implementiert werden soll.
Dabei ist die Besonderheit, dass Summen gebildet werden müssen für die Zeilen.

Ich habe eine CDS-View angelegt und eine Klasse zur Ermittlung der Summen. Das Konstrukt hat mit dem Service gut funktioniert und mir Werte ausgegeben.

Jedoch soll dies ja nun in der SAC einen Report ergeben.
Dazu habe ich gelesen, dass es wohl immer (min.) eine CDS-View mit der Cube Annotation und eine mit der Query Annotation und Consumption geben müsse.

Nun habe ich meine CDS View geändert:
@VDM.viewType: #COMPOSITE
@Analytics.dataCategory: #CUBE

ich habe einige key Felder aus den Tabellen und sowas des Öfteren:
@ObjectModel.readOnly: true
@ObjectModel.virtualElement: true
@ObjectModel.virtualElementCalculatedBy: 'ABAP: zzhr_cl_test'
cast( 0 as abap.int4) as employee, -- Total No. of Employee

Nun habe ich eine neue CDS View erstellt mit den Annotations, nach den Standard-Annotations:
@Analytics.query: true
@VDM.viewType: #CONSUMPTION
@OData.publish: true

habe die View als select des Cubes definiert und die key-Felder wieder als Key angeben, sowie die Summenfelder auch gelistet.
ZZHR_Test_STATISTICS.employee, -- Total No. of Employee

Wenn ich dafür einen Service anlege, kommen allerdings keine Daten zurück, besser gesagt ein leeres result.
Dann habe ich entdeckt, dass mir automatisch eine Klasse erstellt wurde, die dieses Interface erbt CL_SADL_GTK_EXPOSURE_MPC.
Allerdings weiß ich nicht, was ich damit anfangen soll...

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: CDS Views Cube und Query für SAC

Beitrag von jocoder (Specialist / 339 / 3 / 101 ) »
ich habe einige key Felder aus den Tabellen und sowas des Öfteren:
@ObjectModel.readOnly: true
@ObjectModel.virtualElement: true
@ObjectModel.virtualElementCalculatedBy: 'ABAP: zzhr_cl_test'
cast( 0 as abap.int4) as employee, -- Total No. of Employee
"Sowas" sind virtuelle Felder.

Sind nur die virtuellen Felder leer oder gibt es keinerlei Ergebniszeilen? Bei den virtuellen Feldern gilt es zu beachten, dass diese nur vom OData-Framework gefüllt werden. Ein SELECT beachtet die Annotationen @ObjectModel.virtualElement: true nicht. Wenn die virtuellen Felder leer sind, müsste es schon helfen diese direkt im Consumption-View mit der Annotation @OData.publish: true zu definieren und nicht im Cube-View.

Re: CDS Views Cube und Query für SAC

Beitrag von kola (ForumUser / 20 / 5 / 0 ) »
Es gibt generell keine Ergebniszeilen. Ich habe jetzt die virtuellen Felder in der Consumption-View definiert. Nun bekomme ich vom Service Zeilen geliefert, allerdings sind die Summen alle 0. Zudem ist im ersten Feld, was sich selbst ID nennt, eine lange Versionsnummer vor meinem eigentlichen Text. Dieser Text besteht im übrigen auch aus den festen Feldern, die nun plötzlich nicht mehr jeweils eine eigene Spalte bekommen haben.

Re: CDS Views Cube und Query für SAC

Beitrag von kola (ForumUser / 20 / 5 / 0 ) »
Die Felder die immer kommen sind ID und TotaledProperties. Da weiß ich nicht wo die herkommen... In ID steckt alles, was in der Cube-View als key definiert ist.

Re: CDS Views Cube und Query für SAC

Beitrag von jocoder (Specialist / 339 / 3 / 101 ) »
Bitte den Code (Views und Klassen) einmal posten. So ist schwer zu raten, voran es liegt.

Re: CDS Views Cube und Query für SAC

Beitrag von kola (ForumUser / 20 / 5 / 0 ) »
Anbei alle Code-Ausschnitte vereinfacht dargestellt.
---------------------------------------------------------------
Die Cube-View:
@AbapCatalog.sqlViewName: 'ZZHR_V_TEST'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Definition für HR-Report Test'

@VDM.viewType: #COMPOSITE
@Analytics.dataCategory: #CUBE

define view ZZHR_TEST_STATISTICS
as select from pa0001
inner join pa0000 on pa0000.pernr = pa0001.pernr
and pa0000.begda <= $session.system_date
and pa0000.endda >= $session.system_date
and pa0000.stat2 = '3'
[ weitere inner joins]
{ key pa0001.werks as werks,
key pa0001.orgeh as orgeh,
[weitere key Felder aus den anderen Tabellen]
@EndUserText.label: 'Employee'
@ObjectModel: { readOnly: true, virtualElement: true, virtualElementCalculatedBy: 'ABAP: zzhr_cl_test'}
cast( 0 as abap.int4) as employee, -- Total No. of Employee
[weitere virtuelle Felder vom selben Typ]
}
where
pa0001.begda <= $session.system_date
and pa0001.endda >= $session.system_date
and pa0001.persg = '1'
group by
pa0001.werks,
pa0001.orgeh
---------------------------------------------------------------
Die Klasse:
class zzhr_cl_test definition
public
final
create public .

public section.
interfaces if_sadl_exit_calc_element_read.

"! Gibt die Anzahl aller Mitarbeiter in der Abteilung zurück
"! @parameter department | Abteilung
"! @parameter number | Anzahl Mitarbeiter
methods
totalemloyee
importing
value(department) type orgeh
returning
value(number) type i.
[die anderen Methoden für die anderen virutellen Felder mit gleichem Aufbau]
protected section.
private section.

endclass.

class zzhr_cl_orgeh implementation.
method if_sadl_exit_calc_element_read~calculate.
data: lt_original type standard table of zzhr_v_test.


move-corresponding: it_original_data[] to lt_original[].

do lines( lt_original ) times.

data(object) = new zzhr_cl_test( ).

lt_original[ sy-index ]-employee = object->totalemloyee( lt_original[ sy-index ]-orgeh ).
[weitere Aufrufe für die anderen Felder mit gleichem Aufbau]

enddo.

move-corresponding lt_original[] to ct_calculated_data[].
endmethod.
method if_sadl_exit_calc_element_read~get_calculation_info.

endmethod.
method totalemloyee.
select count( * )
from pa0001
where orgeh = @department
and begda <= @sy-datum
and endda >= @sy-datum
into @data(anz).

if sy-subrc = 0.
number = anz.
else.
number = 0.
endif.

endmethod.
endclass.
---------------------------------------------------------------
Die Consumption-View:
@AbapCatalog.sqlViewName: 'ZZHR_VC_test'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Query für HR-Report Test'

@Analytics.query: true
@VDM.viewType: #CONSUMPTION
@OData.publish: true
define view ZZHR_c_test_STATISTICS
as select from ZZHR_test_STATISTICS
{

key ZZHR_test_STATISTICS.werks,
key ZZHR_ORGEH_STATISTICS.orgeh,
[die anderen key-felder aus der cube-view]
@EndUserText.label: 'Employee'
@ObjectModel: { readOnly: true, virtualElement: true, virtualElementCalculatedBy: 'ABAP: zzhr_cl_orgeh'}
cast( 0 as abap.int4) as employee, -- Total No. of Employee
[die anderen virutellen Felder]
}
---------------------------------------------------------------
Klasse, die sich automatisch generiert hat:
class zcl_zzhr_c_test_statistics definition
public
inheriting from cl_nat_odata_model_abs
final
create public .

public section.

constants nc_query_name type /iwbep/ana_gsr_query_name value '2CZZHR_VC_TEST' ##NO_TEXT.

methods if_nat_query_helper~get_query_name
redefinition .


protected section.
private section.
endclass.



class zcl_zzhr_c_test_statistics implementation.

method if_nat_query_helper~get_query_name.
r_query_name = nc_query_name.
endmethod.
endclass.
---------------------------------------------------------------
Service angelegt, der auch funktioniert.
In der SAC bekomme ich mittlerweile ein Modell erstellt, da vorher immer die Meldung kam, dass keine Kennzahlen verfügbar seien. Danke nochmal für den Tipp, die virtuellen Felder auch in der Consumption View zu definieren, das hat mich das Modell in der SAC erstellen lassen. Dadurch konnte ich natürlich auf dieser Basis eine Story erstellen, allerdings kommen da nicht die Daten der Methoden aus der Klasse an, also die Anzahl der Mitarbeiter etc. die Werte sind alle 0. Auch im Service ist alles 0.
Zudem ist mir aufgefallen, dass es nun jedes Feld zwei mal gibt. Wenn ich im Service sage xlsx-Format, dann steht sogar dahinter formatiert und dasselbe Feld bzw. die selbe Spalte nicht formatiert nochmal... Das ist aber wohl das geringere Problem, in der SAC könnte ich ja überschüssige Spalten wegblenden.

Re: CDS Views Cube und Query für SAC

Beitrag von kola (ForumUser / 20 / 5 / 0 ) »
Ich möchte hier noch einmal anmerken, dass das vielleicht generell das falsche Vorgehen ist. Auf verschiedenen Webseiten wurde immer erläutert, dass man eine CDS-View mit #CUBE Annotation und eine mit #CONSUMPTION Annotation und @Analytics.query = true bräuchte. Allerdings habe ich kaum was bezüglich viruteller Felder und Klassen gefunden. Deshalb ist mir der Zusammenhang auch teilweise noch nicht ganz klar.
Vielleicht kann da jemand Licht ins Dunkle bringen...

Seite 1 von 1

Vergleichbare Themen

0
Antw.
3406
Views
Query views im Portal sichern und anzeigen
von Hipp_01 » 05.08.2011 10:28 • Verfasst in Java & SAP®
5
Antw.
3574
Views
Cube und ODS aus Prozesskette laden
von kid » 06.07.2006 12:07 • Verfasst in Sonstige Module
1
Antw.
1559
Views
kompletten Cube abziehen um vorher nacher zu verlgeichen
von philipkoch87 » 23.10.2015 13:09 • Verfasst in ABAP® Core
0
Antw.
1127
Views
Datensatz löscht sich nicht aus Info Cube
von Dyrdek » 15.09.2015 10:31 • Verfasst in ABAP® für Anfänger
1
Antw.
4152
Views
BW-Query und Abap, speziell Query mit Variante
von GastX » 17.03.2009 14:38 • Verfasst in Sonstige Module

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.